前言
本文主要介紹我最近開發的一個個人實戰項目,“基于深度學習的人臉門禁+ 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,實現實時對話功能
- …