過 怡,詹鵬彥,任義超
(蘇州市職業大學 計算機工程學院,江蘇 蘇州 215104)
現有的使用人臉識別進行門禁管理的系統,大都采用模型在服務器上訓練和存儲以及計算資源聯網工作的方式,適用于計算量大、模型存儲量大的應用場合[1]。這種人臉識別系統通常基于云計算技術,終端采集的圖片通過網絡傳輸到服務器端,使用GPU等專用計算設備進行特征提取識別,識別準確率高,但是上傳數據會受到網絡帶寬影響,存在一定的時間延遲,同時識別設備只有在聯網時才能進行工作,造成采集的數據有泄露危險。
高校實驗室門禁系統的管理人員通常固定為某位教師,使用人員數量有限且相對固定,因此,本系統設計的人臉識別系統算量和模型都較小,適合直接部署在邊緣終端設備上,以離線和本地存儲的方式進行人臉的識別操作。
實驗室門禁系統總體結構如圖1所示,首先由攝像頭拍攝采集人臉圖片,在系統初始化階段,主控模塊對人臉圖片進行特征提取并存儲到數據庫中,完成實驗室人員的人臉注冊;初始化完成后,系統進入人員識別階段,主控模塊對采集的人臉圖片進行特征提取后與數據庫中的數據進行比對,比對成功開啟門禁,比對失敗發出警報。實驗室管理員可以對系統進行數據管理,包括新成員注冊、離開人員刪除。

圖1 實驗室門禁系統總體結構框圖
系統硬件主控板采用EAIDK-610開發板,主芯片采用瑞芯RK3399,擴展性高,CPU為四核Cortex-A53+雙核Cortex-A72和獨立NEON協處理器,GPU為ARM四核圖像處理器Mail-T860。主頻1.8 GHz,運行內存采用雙通道LPDDR3(64-bit)4 GB,支持HDMI、MIPI、EDP顯示接口,Ethernet 10/100/1 000 Mb/s,WIFI 802.11ac/a/b/g/n,BT 4.2網絡。操作系統支持Fedora、Android和Ubuntu,搭載深度學習推理框架Tengine,以及輕量級CV加速庫BladeCV。
EAIDK-610開發板擁有2路MIPI Camera接口,可以外接2個OV9750攝像頭,組成雙MIPI Camera同步顯示和前后攝像模式。OV9750主攝像頭和主機采用MIPI CSI接口,分辨率為1 920×1 080。
Tengine是由OPEN AI LAB公司推出的一款嵌入式開源前端AI推理框架,Tengine支持目前市場上各種主流的模型框架,如 TensorFlow、Caffe和MXNet,并且通過ONNX模型實現了對PyTorch和PaddlePaddle的支持,讓開發者能更自由地選擇訓練框架,降低了面對不同硬件和場景而遷移平臺的成本[2]。
3.1.1 操作系統固件安裝
EAIDK-610開發板默認安裝的操作系統是Fedora28,桌面環境是LXDE,同時在EAIDK官方FTP服務器上提供了Android8.1、Ubuntu的固件安裝包。本系統采用Fedora的EAI610-P0-ReleaseV0.4.1固件,在PC機上使用瑞芯驅動助手安裝USB驅動,將下載的固件壓縮包解壓縮,使用Type-C線連接PC機和EAIDK-610開發板,先后按下開發板上reset和update按鍵后重啟開發板,直到開發板系統進入Loader模式,使用EAIDK燒寫工具將固件燒寫到開發板上。
3.1.2 編譯工具安裝

3.1.3 Tengine編譯
從Github網站下載Tengine源碼保存到開發板的新建文件夾下,進入源碼的Tengine-Lite文件夾,新建build文件夾執行編譯命令,在build/install/lib下編譯生成libtegine-lite.so庫文件。在系統中配置生成的庫文件和其他依賴庫并使其生效,后期就可以順利使用Tengine工作了。
系統開發使用了Python庫、OpenCV庫、FaceRecognition庫、dlib庫,在軟件開發之前必須安裝配置上述軟件庫。開發板默認安裝了Python3.6.5。
安裝OpenCV庫,通過dnf包管理器命令從服務器下載安裝依賴包opencv-devel:sudo dnf istall opencv opencv-devel。
由于dlib庫需要內存資源較多,可以從開發板官方FTP服務器上下載壓縮包快速安裝。
軟件系統包括UI界面模塊、人員注冊模塊、人員識別模塊和數據管理模塊。
UI界面模塊使用Qt的Python界面開發工具PyQt進行設計。
人員注冊模塊可采用拍照注冊和照片文件批量注冊兩種方式,拍照注冊通過OpenCV調用攝像頭拍攝人臉圖片,調用FaceRecognition庫的face_locations方法標記人臉位置和大小,該方法默認采用方向梯度直方圖進行人臉定位。對截取的人臉進行光線補償、灰度處理、直方圖均衡等圖像預處理。對經過處理的人臉調用FaceRecognition庫的face_encodings方法進行人臉特征提取,獲得每張人臉的128維特征向量[3],并將注冊人員的姓名和特征向量保存到數據庫中。批量注冊與拍照注冊只是獲得圖片的方式不同,批量注冊收集實驗室人員包含個人清晰人臉的照片圖片,對圖片進行逐個讀取后進行人臉檢測定位、預處理、特征提取和數據庫存儲。人員注冊程序流程如圖2所示。

圖2 人員注冊程序流程


圖3 人員識別程序流程
數據管理模塊實現個別臨時入住實驗室人員的人臉注冊、離開實驗室人員的數據庫數據刪除。人員刪除可以單個刪除,也可以批量刪除。
由于Tengine支持目前市場上各種主流的模型框架,如果實驗室的人員較多,為了獲得良好的識別效率,可以在服務器端使用主流框架,使用MobileNet[4]模型或者MobileFaceNets模型進行人臉識別模型訓練。訓練生成的模型使用convert_tool命令轉換成Tengine支持的模型格式,部署到開發板上進行人臉的識別。
實驗室30名人員參與系統測試,識別率為100%,平均識別時間小于250 ms。40人參與系統測試,識別率為100%,平均識別時間小于280 ms。50名人員參與系統測試,識別率為98%,平均識別時間小于300 ms。
在邊緣設備上實現離線的人臉識別功能,成本低,安裝調試靈活,穩定性好,識別速度快,同時不受網絡帶寬的影響,避免了人臉圖像數據泄露的風險,很好地實現了人員數量較少情況下的實驗室門禁系統管理。本系統無法進行活體識別,后期將針對這一問題對其進行進一步改進。