做隐私处理工具时碰到的核心问题:自动追踪如何在复杂场景里保持稳定、不丢标。
多轨叠加素材是重灾区。手动一个关键帧插一个标签,赶工时还能对付,但遇到转场就崩------硬切后人物已经离场,追踪器还在按惯性外推;渐变转场时像素变化平缓,灰度直方图检测不到边界。更麻烦的是目标刚入画的那十几帧和快速运动时的瞬时遮挡,漏了就是隐私数据暴露。
我们试过用单模型+卡尔曼滤波的方案:YOLO做检测、BoT-SORT负责帧间关联、丢检后靠外推撑住。效果是追丢了就停------阈值设低了误判切掉整段,设高了又穿帮。实测一张被追踪4.6秒的脸,最终一段遮罩都没输出。原因是追踪器重启时ID从1重新编号,老轨只从活跃列表里删、没销毁数据行,新tid=1进来就把旧记录覆盖了。
后来改成「安置」而非「合并」的策略:被顶下来的老轨换个不会冲突的新key继续保留,下游按时间二分插值取位。追踪和外推彻底拆开------追踪只在置信度低于阈值时重新跑检测,丢检后用短期软判据决定是否外推,这个判据独立于转场逻辑,阈值用多路投票而不是单一指标。
工程层面踩的另一个坑是macOS上setCurrentItem同时触发异步AVFoundation加载和同步回调等待,锁死了主线程。后台线程里QImage(numpy.data, ...)持的是numpy缓冲区的裸指针------数组离开作用域就成了悬垂指针,必须cv2.cvtColor().copy()再QImage(...).copy()。
识别不是完美的:人脸角度大于60度、遮挡严重、或画面里同时出现十几张脸时,漏检概率明显上升。但把追踪稳定性问题和ID冲突都解决掉之后,一条视频的标注时间从两小时缩短到十五分钟以内。