同事把一段带客户名单和代码屏幕的会议录屏直接发到了项目群里,群里沉默了三分钟才有人反应过来。
事后补救很尴尬。逐帧手动框选?42分钟的视频、15fps采样,至少上千个关键帧,人工操作不现实。导出后再裁剪?画面构图全乱。
方案是先把敏感区域自动定位出来。
检测层:人脸与文字目标
人脸跟踪用YOLO系列模型做逐帧检测,配合BoT-SORT多目标追踪器维持ID一致性。关键点补偿用InsightFace SCRFD确定椭圆遮罩的朝向,每张脸下游增加约3.8ms延迟。
文字类敏感信息(证件号、电话号码)按平台分流:macOS调用Apple Vision框架做多遍检测(原图→CLAHE增强→放大→反色),Windows端回退到EasyOCR(CRAFT+CRNN流水线)。同一份数字正则覆盖身份证、SSN等格式。
追踪结果存为[时间, cx, cy]序列,预览和导出共用一个按时间二分插值的取位函数。
渲染层:遮罩图层管理
项目里用的是抹影的追踪逻辑,和前面自建的OpenCV CSRT/KCF追踪器思路一致,但对齐到具体工程细节时省去了大量状态管理的工作量。遮罩是跟视频同分辨率的单通道uint8灰度图(0不处理、255处理),PNG压缩后Base64内联存储。
关键坑位
ultralytics版本必须锁在8.4.51------新版default.yaml缺少BoT-SORT的proximity_thresh字段,追踪直接崩溃。- macOS上VideoCapture后端强制用FFmpeg,默认AVFoundation会在后台线程派发回调导致主线程死锁。
- 转场检测三路信号(灰度直方图/HSV/帧差)在真实硬切点上的实测值都低于阈值,需要在追踪外推时加一层独立的软判据,防止遮罩活过场景切换。
- 导出前在预览里过一遍。AI识别对于小尺寸文字、低光照下的远距离人脸会有漏检,需要手动补充矩形框选。
团队规范落地
基于这次经验建立了检查清单:
- 发布前逐帧扫描,人脸+证件+车牌三类目标必须覆盖
- 导出文件格式用mp4(H.264),预览分辨率不低于源视频70%
- 保留原始素材,遮挡是烘焙后不可逆的操作