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

AI 数据湖服务

复制全文
视频处理
视频区域修复
复制全文
视频区域修复

算子介绍

描述

视频区域修复

核心功能

  • 智能修复:基于STTN时空记忆网络进行视频内容修复(去除水印、字幕等外来内容)
  • 多区域支持:支持同时修复一个、多个指定区域或全屏处理
  • 音频保留:视频修复不影响原始音频
  • GPU加速:支持CUDA加速提升处理效率
  • 多输入支持:支持路径输入和二进制输入

推荐实践

  • 建议处理分辨率不超过1080p的视频
  • 修复区域越小处理速度越快
  • 长视频建议预先分段处理

技术特性

  • 时空一致性:保证修复区域的时间连续性
  • 格式兼容:输出标准MP4格式视频

Daft 调用

算子参数

输入

输入列名

说明

video_paths

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

video_binaries

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

video_formats

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

inpaint_areas

修复区域坐标列,List格式: [{'ymin': int, 'ymax': int, 'xmin': int, 'xmax': int}, ...] 与video_watermark_detect算子输出格式兼容 若为None则进行全屏修复

output_basenames

输出文件基础名称列(不含扩展名) 若为None则使用原文件名加"_inpainted"后缀

输出

处理后的结构化列,每个元素包含以下字段:

  • output_path: 修复后视频的TOS存储路径;
  • processed_frames: 实际处理的视频帧数;
  • processed_resolution: 处理后视频的分辨率[width, height]

参数

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

参数名称

类型

默认值

描述

output_tos_dir

str

TOS输出目录(必需) 修复后视频的TOS存储路径 格式:"tos://bucket/path"

model_path

str

/opt/las/models

模型存储路径 默认值:"/opt/las/models"

model_name

str

researchmm/STTN

模型名称 默认值:"researchmm/STTN"

neighbor_stride

int

5

相邻帧步长 选择参考帧的间隔距离 较小值(3-5)适合慢动作视频,较大值(8-10)适合快动作视频 默认值:5

reference_length

int

10

参考帧数量 用于修复当前帧的参考帧总数 提供时序上下文信息,值越大修复质量越好但计算量增加 默认值:10

max_load_num

int

50

最大加载帧数 每次处理时最多同时加载到内存的视频帧数量 控制内存使用,避免长视频导致内存溢出 约束:max_load_num >= reference_length * neighbor_stride 默认值:50

rank

int or None

GPU设备编号 指定使用的GPU设备ID(多卡环境生效) None表示自动选择可用GPU 默认值:None

调用示例

下面的代码展示了如何使用 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 import VideoSttnInpaint

if __name__ == "__main__":
    
    # 更改完修复的视频会保存到指定的TOS路径下,因此,需要设置好环境变量以保证有权限写入TOS,包括:ACCESS_KEY,SECRET_KEY,TOS_ENDPOINT,TOS_REGION,TOS_TEST_DIR
    TOS_DIR = os.getenv("TOS_TEST_DIR", "tos_bucket")
    output_tos_dir = f"tos://{TOS_DIR}/video/video_sttn_inpaint"

    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.%s".format(),
            )
            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.context.set_runner_ray()

    daft.set_execution_config(actor_udf_ready_timeout=600)
    daft.set_execution_config(min_cpu_per_task=0)

    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/watermark_sample.mp4"
        ]
    }
    ds = daft.from_pydict(samples)

    model_path = os.getenv("MODEL_PATH", "/opt/las/models")
    constructor_kwargs = {
        "output_tos_dir": output_tos_dir,
        "model_path": model_path,
        "model_name": "researchmm/STTN",
        "neighbor_stride": 5,
        "reference_length": 10,
        "max_load_num": 50,
    }

    ds = ds.with_column(
        "results",
        las_udf(
            VideoSttnInpaint,
            construct_args=constructor_kwargs,
            num_gpus=1,
            batch_size=1,
            concurrency=1,
        )(col("video_path")),
    )

    ds.show()

    # ╭────────────────────────────────┬───────────────────────────────────────────────────────────────────────────────────────╮
    # │ video_path                     ┆ results                                                                               │
    # │ ---                            ┆ ---                                                                                   │
    # │ Utf8                           ┆ Struct[output_path: Utf8, processed_frames: Int32, processed_resolution: List[Int32]] │
    # ╞════════════════════════════════╪═══════════════════════════════════════════════════════════════════════════════════════╡
    # │ https://las-cn-beijing-publi-… ┆ {output_path: tos://tos_bucket…                                                       │
    # ╰────────────────────────────────┴───────────────────────────────────────────────────────────────────────────────────────╯
最近更新时间:2026.01.08 19:14:20
这个页面对您有帮助吗?
有用
有用
无用
无用