前言
本文主要介绍我最近开发的一个个人实战项目,“基于深度学习的人脸门禁+ IPC 智能安防监控系统”,全程满帧流畅运行。这个项目我目前全网搜了一圈,还没发现有相关类型的开源项目。这个项目只要稍微改进下,就可以变成市面上目前流行的三款产品,人脸识别门禁系统、IPC 安防和 NVR。在最下面会有视频演示。
本项目适用于瑞芯微 Rockchip 系列的板端,如果本篇文章点赞超过 100,我将整理后开源~
功能
人脸门禁系统
- 人靠近自动亮屏,人走自动息屏
- 支持人脸识别
- 支持录入人脸,并进行人脸配对(极速配对 < 0.2S)
IPC 智能安防监控系统
- 支持通过 onvif 实时查看摄像头画面
- 支持实时目标检测(支持高达80种物体检测)
- 支持录像
- 支持检测到人时自动录像
- 支持检测到人时自动报警
用到的硬件
- 野火鲁班猫4 RK3588S2
- IMX415 800W 4k 摄像头
- RTL8822CE Wifi+BT
- mipi LCD RGB 7寸 1024×600 触摸屏
- 人体红外检测 SR501:通过 GPIO 读取相应数值,用于判断是否有人靠近
- 128×32 OLED屏:通过 I2C 通信显示画面内容,用于显示人脸检测结果
- 蓝牙音箱
用到的深度学习模型
- yolo11:用于实时目标检测
- retinaFace:用于人脸检测
- facenet:用于人脸特征提取
模型需要经过转换和量化,并且进行精度评估,如果不知道如何在 Rockchip 平台进行模型转换的同学,可以参考我这篇文章:《瑞芯微 Rockchip 系列 RK3588 主流深度学习框架模型转成 rknn 模型教程》
用到的技术栈
- C++
- RKNN:用于在 Rockchip 上进行 NPU 推理
- FFmpeg:用于音视频编解码,使用了 ffmpeg-rockchip 库进行 MPP 硬件编解码,提高编解码速度
- Opencv:用于视频帧处理
- LVGL:流行的 GUI 框架
- Bluez-Alsa:用于连接蓝牙音箱并播放音频
- Onvif:一个流行的 IP 摄像头协议标准,支持在电脑端直接查看摄像头画面,操作摄像头云台等等
线程架构图
这个项目涉及的线程较多,其中包含推理线程池、渲染线程、处理线程等待,使用了原子操作、锁、条件变量等解决了线程同步问题。
线程架构如下图所示:
如果不理解线程池概念的同学,可以参考我这篇文章:《C++ 线程池浅析》
项目演示
项目改进
由于是个人项目且时间有限,因此还存在很多可优化空间。
比如在人脸门禁系统中,可以有如下改进:
- 加入 IR 摄像头,进行活体检测
- 为人脸门禁系统加入 NFC 模块,支持通过 NFC 解锁
- 为人脸门禁系统加入指纹模块,支持通过指纹解锁
- 添加 mysql 数据库,将姓名、年龄、工号、人脸特征进行存储
- …
而在 IPC 安防摄像头系统中,可以有如下改进:
- 加入舵机云台,完善 onvif,支持远程控制云台转动
- 对 yolo11 模型进行微调,加入摔倒识别、火焰识别、打架识别等等
- 加入 IRCUT 滤光片,添加 IR 灯,实现日夜切换功能
- 加入 webrtc,实现实时对话功能
- …