法务部门发来一段客户纠纷监控素材,要求在3小时内出脱敏版提交保险理赔。原始素材里人脸、车牌、发票号码密集出现,逐帧手动遮挡耗时且容易遗漏。
工程上的核心问题不在识别本身,而在多目标追踪在场景切换时的行为控制。具体表现有三个:
转场后遮罩活到新画面------人物离场加硬切后,遮罩还盖在新画面上约1.3秒。根因是转场检测阈值过高导致硬切判据从未触发,追踪器继续外推。处理流程里除了原有的灰度直方图(阈值0.4)和HSV(阈值0.72),需要加一道低阈值的软判据做投票确认:
python
scene_score = 0.12 * luminance + 0.20 * color_dist + 0.10 * frame_diff
if scene_score >= threshold: # 默认取投票多数
clear_track()
ID撞号导致整段不输出------追踪器重启后track id从1重新编号,老轨还在段数据里。新tid=1复活时一行赋值把老tid=1的整段冲掉。解决办法不是合并两轨,而是给被顶的老轨换一个不会冲突的新key继续保留。
隐私窗口期------遮罩淡入期间(建轨首帧alpha只有1/3),加上按fps抽样(25fps素材每80ms采一帧),人脸露出后约130~160ms没被完全覆盖。对检测次数≥6的扎实轨迹事后回填头部缺失帧,段起点往前延一个采样步。
另外导出环节容易被忽略:源音频channel_layout=unknown时ffmpeg滤镜可能拼出非法布局导致无声成片。按声道数推默认布局(6→5.1、8→7.1),优先-c:a copy。
检查清单:导出前确认遮挡层时间范围覆盖全部检测轨,验证音频通道数量与原始素材一致,转场区域手动复核遮罩是否干净。
本文来自抹影的开发笔记。