视频人脸脱敏
更新时间:2026-06-15
简介
视频人脸模糊处理算子
功能描述
- 自动检测视频帧中的人脸并进行模糊处理
- 支持多种模糊类型(均值、盒式、高斯)
- 支持本地路径、远程 URL/BOS 路径以及二进制/BASE64 视频输入
- 统一输出模糊后的视频路径(即使未检测到人脸也会重新编码输出)
- cpu 和 gpu 环境均可运行
- 隐私保护:对视频中的人脸信息进行脱敏处理,防止个人隐私泄露
- 数据发布前的隐私清洗:在发布视频数据前,对其中包含的人脸进行模糊处理,保护用户隐私
- 训练/评测数据集中的人脸模糊预处理:在训练/评测模型时,对数据集中的视频帧进行人脸模糊处理,提高模型泛化能力
- 人脸检测基于 InsightFace 模型,对光照、姿态变化较敏感
- 输入视频需为 PyAV/FFmpeg 可解码的常见格式(如 mp4、mov、avi 等)
- 单条样本处理失败时,该条结果返回空字符串,不影响批次内其他样本
算子参数
输入
| 输入 | 含义 |
|---|---|
| video_paths | 视频文件路径列(本地、BOS、HTTP 等),与 video_binaries 二选一。 |
| video_binaries | 视频二进制数据或 BASE64 字符串列,与 video_paths 二选一。 |
| video_formats | 视频格式字符串列(如 "mp4"、"mov"),配合 video_binaries 使用。 |
| output_basenames | 输出文件基础名称列(不含扩展名),用于自定义输出文件名。 |
输出
| 输出 | 含义 |
|---|---|
| result | 模糊处理后的视频路径列。 |
参数
| 参数名称 | 类型 | 默认值 | 描述 |
|---|---|---|---|
| output_dir | str | '' | 将模糊处理后的视频保存到该目录中,目前支持上传到 BOS 或本地目录。 格式:"bos://bucket/path/" 或 "/local/path/" 默认值:"" |
| model_path | str | '/opt/aihc/models' | 人脸检测模型的基础目录路径,用于 InsightFace 模型加载。 默认值:"/opt/aihc/models"。 |
| model_name | str | 'insightface' | InsightFace 模型子目录名称,用于拼接实际模型路径 model_path/model_name。 默认值:"insightface"。 |
| blur_type | str | 'gaussian' | 模糊方式。 可选值:["mean", "box", "gaussian"] - "mean": 使用均值模糊(ImageFilter.BLUR) - "box": 使用盒式模糊(ImageFilter.BoxBlur) - "gaussian": 使用高斯模糊(ImageFilter.GaussianBlur) 默认值:"gaussian" |
| radius | float | 10.0 | 模糊半径(盒式/高斯模糊生效)。 要求:radius >= 0,建议:根据模糊效果调整,一般 5-20 之间即可。 默认值:10.0 |
| det_thresh | float | 0.5 | 人脸检测置信度阈值。隐私打码(宁可杀错不可放过):建议设低一点,例如 0.3 - 0.4。防止漏掉人脸导致隐私泄露。精细修图:建议设高一点,例如 0.6 - 0.7,只处理正脸。 默认值:0.5 |
| det_size | tuple[int, int] | (640, 640) | 人脸检测输入尺寸 (width, height)。普通网络视频/电影:(640, 640) 是性价比最高的默认值。监控录像/广场全景(人脸很小):必须调大,建议 (1280, 1280) 甚至更高,否则远处的人脸会漏检。 默认值:(640, 640) |
调用示例
Python
1from __future__ import annotations
2
3import os
4
5import daft
6from daft import col
7
8from daft.aihc.common.udf import aihc_udf
9from daft.aihc.functions.video.video_face_blur import VideoFaceBlur
10
11if __name__ == "__main__":
12 if os.getenv("DAFT_RUNNER", "native") == "ray":
13 import ray
14 ray.init(dashboard_host="0.0.0.0", ignore_reinit_error=True)
15 daft.set_runner_ray()
16 daft.set_execution_config(actor_udf_ready_timeout=6000, min_cpu_per_task=0)
17
18 # TODO: 根据实际场景准备样本数据
19 samples = {
20 "video_paths": ["bos://bucket/test/aihc/test_data/test_video.mp4"],
21 }
22 ds = daft.from_pydict(samples)
23 constructor_kwargs = {
24 "output_dir": '',
25 "model_path": '/opt/aihc/models',
26 "model_name": 'insightface',
27 "blur_type": 'gaussian',
28 "radius": 10.0,
29 }
30 ds = ds.with_column(
31 "result",
32 aihc_udf(
33 VideoFaceBlur,
34 construct_args=constructor_kwargs,
35 num_cpus=1,
36 concurrency=4,
37 batch_size=8,
38 )(col("video_paths"), col("video_binaries"), col("video_formats")),
39 )
40 ds.show()
评价此篇文章
