基于人脸识别的视觉门禁系统(RK3588)

4 路 RTSP 视频接入、MPP 硬解码、YOLO/RetinaFace/FaceNet 多模型 NPU 推理、RTMP 推流与 GPIO 门禁闭环的边缘安防系统。

项目概述

面向区域门禁的边缘侧视觉安防系统,防止异常访客进入。在 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_loaderFFmpeg avformat_open_input / av_read_frame4 路 RTSP 拉流接入
mpp_decoderRockchip MPP 硬解接口H.264 → NV12,1080p@30fps
rga_funcimresize / imcvtcolor(零拷贝 DMA)缩放与色彩空间转换
mpp_encoder + streaming_managerH.264 编码 + RTMP 封装推流远程实时查看
detection_fusion_manager多模型结果融合检测/识别结果汇总

三级级联推理(RKNN C API)

人体 → 人脸 → 特征三级模型逐级过滤,只有命中上一级的候选才进入下一级,显著降低 NPU 平均负载:

1
2
3
4
rknn_init(&ctx, model_data, model_size, 0, nullptr);   // 加载 INT8 量化 .rknn 模型
rknn_inputs_set(ctx, 1, &in);                          // 送入 RGA 预处理后的帧
rknn_run(ctx, nullptr);
rknn_outputs_get(ctx, 1, &out, nullptr);               // 检测框 / 人脸特征输出
级联模型输出
1YOLO11(INT8)人体检测框
2RetinaFace(INT8)人脸框 + 关键点
3FaceNet(INT8,敏感层混合量化)人脸特征向量

人脸比对接口

特征比对走 SQLite 特征库 + 余弦相似度:sqlite3_prepare / step 逐条读取库内 5000+ 人脸特征,与现场提取的特征做余弦相似度计算,超过阈值即判定命中——库内验证命中率 > 98%。命中后经 GPIO 子系统写寄存器拉起门禁继电器,识别通过到开门 < 1s。

线程与队列模型

解码、推理、推流三个环节以生产者-消费者队列隔离:共享缓冲区 + 互斥锁/条件变量保证帧数据线程安全,单路阻塞不拖垮全局链路,端到端延迟 < 200ms,长时间运行无内存泄漏。

项目状态

系统已完成集成与闭环联调,各项指标(识别耗时、端到端延迟、命中率、开门时延)均达标。

使用 Hugo 构建
主题 Stack 由 Jimmy 设计