本项目属于职务型作品,由本人历时三年独立完成。本作品主要解决油田物资系统油田管材的人工计数繁琐问题,采用分层模块化双线程架构,通过FFmpeg视频解码、MNN端侧模型推理、自研优化ByteTrack跟踪算法,实现视频目标检测、轨迹跟踪与精准去重计数功能。系统创新设计帧队列时序制衡机制,解决了双线程速率失衡、视频播放时序紊乱、跟踪ID跳变、计数不准等行业工程难题,具备低功耗、高稳定、时序精准的落地优势,适配移动端长短时间视频智能分析场景。
一、整体架构与设计思路
系统采用Native双线程异步流水线架构,彻底分离视频解码与AI推理流程,解决传统单线程串行卡顿、时序失控问题。整体分为三层:视频解码层、帧队列调度层、AI推理跟踪层。视频由独立解码线程持续读帧、预处理、入队;推理线程异步取帧、模型推理、目标跟踪与计数;最终通过JNI回调结果至Android上层。核心设计思想为解耦并行、限流防堆积、时序精准对齐、稳定去重计数,在移动端有限算力下实现稳定、匀速、高精度视频智能分析。
二、各模块技术栈
1. 视频解码模块:FFmpeg软解码,支持任意角度视频旋转解析与矫正,兼容手机录制视频元数据。
2. 图像预处理模块:SWS图像缩放、RGBA色彩空间转换、等比例缩放+YOLO标准填充、坐标逆映射还原。
3. AI推理模块:MNN端侧推理框架,部署YOLOv11量化模型,实现轻量高速移动端推理。
4. 多目标跟踪模块:基于ByteTrack优化,自研稳定状态机与永久序列号计数逻辑。
5. 线程调度模块:C++多线程、条件变量阻塞队列、原子变量启停控制。
6. 跨端交互模块:JNI全局引用管理、跳帧回调优化,实现Native与Java稳定通信。
三、核心工程难点、踩坑及自研解决方案
1. 难点:双线程速度不匹配,视频播放忽快忽慢、帧堆积、时序错乱
解决方案:设计有限容量阻塞队列制衡双线程速率,解码受队列限流不超速,推理动态补时对齐视频原生帧率,实现视频全程匀速、无加速、无拖慢。
2. 难点:目标遮挡、短暂消失导致TrackID频繁切换,统计重复、计数不准
解决方案:自研轨迹稳定状态机,设置连续帧生效阈值与容错丢失帧,业务序列号永久固化,不随ID跳转重置,彻底解决重复计数。
3. 难点:视频旋转角度复杂导致检测框坐标错位
解决方案:双模式读取旋转元数据,在RGBA原图层面旋转矫正后再缩放,配套完整坐标逆映射,保证检测坐标精准。
4. 难点:单一阈值易引入噪声框,造成轨迹漂移
解决方案:采用检测、跟踪双层置信度阈值分离策略,结合最小尺寸过滤与NMS,大幅提升跟踪稳定性。
5. 难点:JNI长时任务易内存泄漏、线程卡死、APP崩溃
解决方案:统一全局引用管理、线程安全启停、SO卸载资源回收,实现Native任务全生命周期安全管控。