You need to enable JavaScript to run this app.
AI 数据湖服务

AI 数据湖服务

复制全文
视频处理
视频清晰度计算
复制全文
视频清晰度计算

算子ID:daft.las.functions.video.video_sharpness.VideoSharpness

算子介绍

描述

视频清晰度计算处理器,支持多种清晰度评估方法和抽帧策略。

核心功能

  • 视频抽帧:
    • 基于FPS的抽帧策略,可自定义每秒抽帧数量
    • 限制最大抽帧数量,防止处理长视频时陷入无限循环
    • 支持ffmpeg和cv2双重抽帧方案,提高稳定性
  • 多种清晰度评估方法:
    • 拉普拉斯方差法(laplacian) - 基于二阶导数的边缘检测,计算简单快速
    • Tenengrad法(tenengrad) - 基于Sobel梯度的边缘强度,对噪声敏感
    • Brenner法(brenner) - 基于相邻像素灰度差的简单计算,速度最快
    • FFT高频能量法(fft_highfreq) - 基于频域分析的清晰度评估,对模糊更敏感
  • 多池化功能:
    • 返回所有池化方法的结果(均值、中位数、最大值、最小值、标准差)
    • 自动处理NaN值和异常情况
  • 多格式输入支持:
    • URL地址
    • 二进制流

格式支持:

  • 输入:MP4、AVI、MOV 等主流视频格式

注意与前提

细分项

注意与前提

费用

调用算子前,您需先了解使用算子时的模型调用费用,详情请参见大模型调用计费

鉴权(API Key)

调用算子前,您需要先生成算子调用的API Key,并建议将API Key配置为环境变量,便于更安全地调用算子,详情请参见获取 API Key 并配置

BaseURL

调用算子前,您需要先根据您当前使用的LAS服务所在地域,了解算子调用的BaseURL,用于配置算子调用路径参数取值。
详情请参见获取 Base URL,下文中的调用示例仅作为参考,实际调用时需替换为您对应地域的路径取值。

Daft 调用

算子参数

输入

输入列名

说明

video_paths

视频文件路径列(本地、TOS、HTTP等),与 video_binaries 二选一

video_binaries

视频二进制数据列,与 video_paths 二选一

video_formats

视频格式字符串列,配合 video_binaries 使用

输出

包含所有池化方法的清晰度结果的结构体数组,每个元素包含:

  • mean: 清晰度均值
  • median: 清晰度中位数
  • max: 清晰度最大值
  • min: 清晰度最小值
  • std: 清晰度标准差

参数

如参数没有默认值,则为必填参数

参数名称

类型

默认值

描述

fps

float

2.0

每秒抽帧数量。
描述: 从视频中每秒抽取的帧数,用于计算清晰度
默认值: 2.0

method

str

"laplacian"

清晰度计算方法。
描述: 清晰度计算方法,支持 laplacian(拉普拉斯方差)、tenengrad(Tenengrad梯度)、brenner(Brenner梯度)、fft_highfreq(FFT高频能量),默认为 laplacian。
可选值: ["laplacian", "tenengrad", "brenner", "fft_highfreq"]
默认值: "laplacian"

max_frames

int

100

最大抽帧数量。
描述: 限制抽帧的最大数量,防止处理长视频时陷入无限循环
默认值: 100

调用示例

下面的代码展示了如何使用 Daft(适用于分布式)运行算子进行视频清晰度计算。

from __future__ import annotations

import os

import daft
from daft import col
from daft.las.functions.udf import las_udf
from daft.las.functions.video.video_sharpness import VideoSharpness

if __name__ == "__main__":
    if os.getenv("DAFT_RUNNER", "native") == "ray":
        import logging

        import ray

        def configure_logging():
            logging.basicConfig(
                level=logging.INFO,
                format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
                datefmt="%Y-%m-%d %H:%M:%S",
            )
            logging.getLogger("tracing.span").setLevel(logging.WARNING)
            logging.getLogger("daft_io.stats").setLevel(logging.WARNING)
            logging.getLogger("DaftStatisticsManager").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaScheduler").setLevel(logging.WARNING)
            logging.getLogger("DaftFlotillaDispatcher").setLevel(logging.WARNING)

        ray.init(dashboard_host="0.0.0.0", runtime_env={"worker_process_setup_hook": configure_logging})
        daft.set_runner_ray()
    daft.set_execution_config(actor_udf_ready_timeout=600)
    daft.set_execution_config(min_cpu_per_task=0)

    # 使用环境变量构建 URL
    tos_dir_url = os.getenv("TOS_DIR_URL", "las-cn-beijing-public-online.tos-cn-beijing.volces.com")
    samples = {
        "video_path": [
            f"https://{tos_dir_url}/public/shared_video_dataset/sample.mp4"
        ]
    }

    ds = daft.from_pydict(samples)

    sharpness_calculator = las_udf(
        VideoSharpness,
        construct_args={
            "fps": 2.0,
            "method": "laplacian",
            "max_frames": 100,
        },
        num_gpus=1,
        concurrency=1,
        batch_size=1,
    )

    # 使用 Daft 进行分布式处理
    ds = ds.with_column("video_sharpness", sharpness_calculator(col("video_path")))

    ds.show()
    # ╭────────────────────────────────┬──────────────────────────────────╮
    # │ video_path                     ┆ video_sharpness                  │
    # │ ---                            ┆ ---                              │
    # │ Utf8                           ┆ Struct[mean: Float64, median: F… │
    # ╞════════════════════════════════╪══════════════════════════════════╡
    # │ https://las-cn-beijing-publi-… ┆ {mean: 1234.56, median: 1200.00… │
    # ╰────────────────────────────────┴──────────────────────────────────╯
最近更新时间:2026.02.10 15:51:19
这个页面对您有帮助吗?
有用
有用
无用
无用