视频质量评分
更新时间:2026-05-18
视频质量评分
简介
VideoQualityScore 是基于 Daft + Ray 分布式框架的视频质量评分组件,利用 CLIP 模型对视频帧进行质量评估,输出一个综合质量分数,适用于视频筛选、质量过滤等场景。视频质量评分处理器,基于 CLIP-IQA 对采样帧评分并聚合为视频质量分
功能
- 支持通过视频采样进行质量评分
- 基于 CLIP 模型的视频帧质量评估
- 支持多种帧采样策略(如均匀采样)
- 支持多种分数聚合方式(如平均值)
输入
| 输入列名 | 说明 |
|---|---|
| video_paths | 可选,视频文件路径列(本地、BOS、HTTP等),与 video_binaries 二选一 |
| video_binaries | 可选,视频二进制数据列,与 video_paths 二选一 |
| video_formats | 可选,视频格式字符串列,配合 video_binaries 使用 |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| model_path | str | /opt/aihc/models | 模型文件存储路径 |
| clip_model_name | str | openai/clip-vit-large-patch14 | CLIP 模型名称或路径 |
| prompt | str | quality | 质量评估提示词 |
| device | str | cuda | 设备类型,支持CPU和GPU设备默认值:"cuda"可选值:"cpu", "cuda", "cuda:0", "cuda:1"等 |
| sample_mode | str | by_count_uniform | 采样模式,参考 VideoFrameSampler |
| start_time_sec | float | 0.0 | 采样起始时间(秒) |
| end_time_sec | float or None | 采样结束时间(秒) | |
| count_k | int or None | 8 | 均匀采样帧数(by_count_uniform使用) |
| interval_sec | float or None | 时间间隔(秒,by_interval_time使用) | |
| interval_frames | int or None | 解码帧间隔(by_interval_frames使用) | |
| target_fps | float or None | 目标采样FPS(by_fps使用) | |
| timestamps_sec | list[float] or None | 采样时间戳列表(秒,by_timestamps使用) | |
| max_frames | int or None | 返回帧上限 | |
| reduce_mode | str | avg | 多帧聚合策略,可选 "avg" |
| default_video_format | str | mp4 | 二进制/BASE64输入的视频格式 |
输出
包含视频质量评分的浮点数组,无法评分返回null值
使用示例
Plain Text
1from __future__ import annotations
2
3import logging
4import os
5
6import ray
7
8import daft
9from daft import col
10from daft.aihc.common.udf import aihc_udf
11from daft.aihc.functions.video.video_quality_score import VideoQualityScore
12
13if __name__ == "__main__":
14 if os.getenv("DAFT_RUNNER", "native") == "ray":
15 import ray
16 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
17 daft.set_runner_ray()
18 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
19
20 model_path = os.getenv("MODEL_PATH", "/opt/aihc/models")
21 num_gpus = 1
22
23 samples = {
24 "video_path": ["https://{bucket}.bj.bcebos.com/sample.mp4"],
25 }
26 ds = daft.from_pydict(samples)
27
28 constructor_kwargs = {
29 "model_path": model_path,
30 "clip_model_name": "openai/clip-vit-large-patch14",
31 "prompt": "quality",
32 "rank": 0,
33 "sample_mode": "by_count_uniform",
34 "count_k": 4,
35 "reduce_mode": "avg",
36 }
37
38 ds = ds.with_column(
39 "quality_score",
40 aihc_udf(VideoQualityScore, construct_args=constructor_kwargs, num_gpus=num_gpus, batch_size=1, concurrency=1)(
41 col("video_path")
42 ),
43 )
44
45 ds.show()
46#╭────────────────────────────────┬───────────────────╮
47#│ video_path ┆ quality_score │
48#│ --- ┆ --- │
49#│ String ┆ Float64 │
50#╞════════════════════════════════╪═══════════════════╡
51#│ https://{bucket}.bj.bcebos.com/┆ 0.372357835372289 │
52#╰────────────────────────────────┴───────────────────╯
评价此篇文章
