项目概述
面向区域门禁的边缘侧视觉安防系统,防止异常访客进入。在 RK3588 上完成视频编解码、多模型 NPU 推理、视频推流的系统集成,实现「识别 → 比对 → 开门」的任务闭环,同时保证库内人脸识别准确度。
系统链路
解码、推理、推流之间采用生产者-消费者队列隔离,端到端延迟 < 200ms,长时间连续运行无内存泄漏。
关键技术点
- 多媒体采集处理:FFmpeg 实现 4 路 RTSP 视频流拉流;Rockchip MPP 完成 H.264 硬件解码;共享缓冲区保证帧数据的线程安全;解码后封装 H.264 经 RTMP 推流供远程查看
- 多模型 NPU 推理调度:RKNN-Toolkit2 完成三模型 INT8 量化部署——YOLO11(人体检测)、RetinaFace(人脸检测)、FaceNet(人脸识别);量化精度分析后对敏感层做混合量化提升精度,单帧 NPU 推理耗时 < 35ms
- 工程优化:解码零拷贝输出 Buffer 直入 RGA 做图像预处理,显著降低 CPU 负载
- 人脸识别管理:本地人脸库管理,SQLite 存储 5000+ 人脸特征,库内验证命中率 > 98%;编写 GPIO 子系统驱动门禁继电器,识别通过到开门 < 1s
核心模块与接口设计
多媒体链路模块
| 模块 | 接口 | 职责 |
|---|---|---|
stream_loader | FFmpeg avformat_open_input / av_read_frame | 4 路 RTSP 拉流接入 |
mpp_decoder | Rockchip MPP 硬解接口 | H.264 → NV12,1080p@30fps |
rga_func | imresize / imcvtcolor(零拷贝 DMA) | 缩放与色彩空间转换 |
mpp_encoder + streaming_manager | H.264 编码 + RTMP 封装推流 | 远程实时查看 |
detection_fusion_manager | 多模型结果融合 | 检测/识别结果汇总 |
三级级联推理(RKNN C API)
人体 → 人脸 → 特征三级模型逐级过滤,只有命中上一级的候选才进入下一级,显著降低 NPU 平均负载:
| |
| 级联 | 模型 | 输出 |
|---|---|---|
| 1 | YOLO11(INT8) | 人体检测框 |
| 2 | RetinaFace(INT8) | 人脸框 + 关键点 |
| 3 | FaceNet(INT8,敏感层混合量化) | 人脸特征向量 |
人脸比对接口
特征比对走 SQLite 特征库 + 余弦相似度:sqlite3_prepare / step 逐条读取库内 5000+ 人脸特征,与现场提取的特征做余弦相似度计算,超过阈值即判定命中——库内验证命中率 > 98%。命中后经 GPIO 子系统写寄存器拉起门禁继电器,识别通过到开门 < 1s。
线程与队列模型
解码、推理、推流三个环节以生产者-消费者队列隔离:共享缓冲区 + 互斥锁/条件变量保证帧数据线程安全,单路阻塞不拖垮全局链路,端到端延迟 < 200ms,长时间运行无内存泄漏。
项目状态
系统已完成集成与闭环联调,各项指标(识别耗时、端到端延迟、命中率、开门时延)均达标。