過 怡,詹鵬彥,任義超
(蘇州市職業(yè)大學(xué) 計算機(jī)工程學(xué)院,江蘇 蘇州 215104)
現(xiàn)有的使用人臉識別進(jìn)行門禁管理的系統(tǒng),大都采用模型在服務(wù)器上訓(xùn)練和存儲以及計算資源聯(lián)網(wǎng)工作的方式,適用于計算量大、模型存儲量大的應(yīng)用場合[1]。這種人臉識別系統(tǒng)通常基于云計算技術(shù),終端采集的圖片通過網(wǎng)絡(luò)傳輸?shù)椒?wù)器端,使用GPU等專用計算設(shè)備進(jìn)行特征提取識別,識別準(zhǔn)確率高,但是上傳數(shù)據(jù)會受到網(wǎng)絡(luò)帶寬影響,存在一定的時間延遲,同時識別設(shè)備只有在聯(lián)網(wǎng)時才能進(jìn)行工作,造成采集的數(shù)據(jù)有泄露危險。
高校實(shí)驗(yàn)室門禁系統(tǒng)的管理人員通常固定為某位教師,使用人員數(shù)量有限且相對固定,因此,本系統(tǒng)設(shè)計的人臉識別系統(tǒng)算量和模型都較小,適合直接部署在邊緣終端設(shè)備上,以離線和本地存儲的方式進(jìn)行人臉的識別操作。
實(shí)驗(yàn)室門禁系統(tǒng)總體結(jié)構(gòu)如圖1所示,首先由攝像頭拍攝采集人臉圖片,在系統(tǒng)初始化階段,主控模塊對人臉圖片進(jìn)行特征提取并存儲到數(shù)據(jù)庫中,完成實(shí)驗(yàn)室人員的人臉注冊;初始化完成后,系統(tǒng)進(jìn)入人員識別階段,主控模塊對采集的人臉圖片進(jìn)行特征提取后與數(shù)據(jù)庫中的數(shù)據(jù)進(jìn)行比對,比對成功開啟門禁,比對失敗發(fā)出警報。實(shí)驗(yàn)室管理員可以對系統(tǒng)進(jìn)行數(shù)據(jù)管理,包括新成員注冊、離開人員刪除。
圖1 實(shí)驗(yàn)室門禁系統(tǒng)總體結(jié)構(gòu)框圖
系統(tǒng)硬件主控板采用EAIDK-610開發(fā)板,主芯片采用瑞芯RK3399,擴(kuò)展性高,CPU為四核Cortex-A53+雙核Cortex-A72和獨(dú)立NEON協(xié)處理器,GPU為ARM四核圖像處理器Mail-T860。主頻1.8 GHz,運(yùn)行內(nèi)存采用雙通道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網(wǎng)絡(luò)。操作系統(tǒng)支持Fedora、Android和Ubuntu,搭載深度學(xué)習(xí)推理框架Tengine,以及輕量級CV加速庫BladeCV。
EAIDK-610開發(fā)板擁有2路MIPI Camera接口,可以外接2個OV9750攝像頭,組成雙MIPI Camera同步顯示和前后攝像模式。OV9750主攝像頭和主機(jī)采用MIPI CSI接口,分辨率為1 920×1 080。
Tengine是由OPEN AI LAB公司推出的一款嵌入式開源前端AI推理框架,Tengine支持目前市場上各種主流的模型框架,如 TensorFlow、Caffe和MXNet,并且通過ONNX模型實(shí)現(xiàn)了對PyTorch和PaddlePaddle的支持,讓開發(fā)者能更自由地選擇訓(xùn)練框架,降低了面對不同硬件和場景而遷移平臺的成本[2]。
3.1.1 操作系統(tǒng)固件安裝
EAIDK-610開發(fā)板默認(rèn)安裝的操作系統(tǒng)是Fedora28,桌面環(huán)境是LXDE,同時在EAIDK官方FTP服務(wù)器上提供了Android8.1、Ubuntu的固件安裝包。本系統(tǒng)采用Fedora的EAI610-P0-ReleaseV0.4.1固件,在PC機(jī)上使用瑞芯驅(qū)動助手安裝USB驅(qū)動,將下載的固件壓縮包解壓縮,使用Type-C線連接PC機(jī)和EAIDK-610開發(fā)板,先后按下開發(fā)板上reset和update按鍵后重啟開發(fā)板,直到開發(fā)板系統(tǒng)進(jìn)入Loader模式,使用EAIDK燒寫工具將固件燒寫到開發(fā)板上。
3.1.2 編譯工具安裝
3.1.3 Tengine編譯
從Github網(wǎng)站下載Tengine源碼保存到開發(fā)板的新建文件夾下,進(jìn)入源碼的Tengine-Lite文件夾,新建build文件夾執(zhí)行編譯命令,在build/install/lib下編譯生成libtegine-lite.so庫文件。在系統(tǒng)中配置生成的庫文件和其他依賴庫并使其生效,后期就可以順利使用Tengine工作了。
系統(tǒng)開發(fā)使用了Python庫、OpenCV庫、FaceRecognition庫、dlib庫,在軟件開發(fā)之前必須安裝配置上述軟件庫。開發(fā)板默認(rèn)安裝了Python3.6.5。
安裝OpenCV庫,通過dnf包管理器命令從服務(wù)器下載安裝依賴包opencv-devel:sudo dnf istall opencv opencv-devel。
由于dlib庫需要內(nèi)存資源較多,可以從開發(fā)板官方FTP服務(wù)器上下載壓縮包快速安裝。
軟件系統(tǒng)包括UI界面模塊、人員注冊模塊、人員識別模塊和數(shù)據(jù)管理模塊。
UI界面模塊使用Qt的Python界面開發(fā)工具PyQt進(jìn)行設(shè)計。
人員注冊模塊可采用拍照注冊和照片文件批量注冊兩種方式,拍照注冊通過OpenCV調(diào)用攝像頭拍攝人臉圖片,調(diào)用FaceRecognition庫的face_locations方法標(biāo)記人臉位置和大小,該方法默認(rèn)采用方向梯度直方圖進(jìn)行人臉定位。對截取的人臉進(jìn)行光線補(bǔ)償、灰度處理、直方圖均衡等圖像預(yù)處理。對經(jīng)過處理的人臉調(diào)用FaceRecognition庫的face_encodings方法進(jìn)行人臉特征提取,獲得每張人臉的128維特征向量[3],并將注冊人員的姓名和特征向量保存到數(shù)據(jù)庫中。批量注冊與拍照注冊只是獲得圖片的方式不同,批量注冊收集實(shí)驗(yàn)室人員包含個人清晰人臉的照片圖片,對圖片進(jìn)行逐個讀取后進(jìn)行人臉檢測定位、預(yù)處理、特征提取和數(shù)據(jù)庫存儲。人員注冊程序流程如圖2所示。
圖2 人員注冊程序流程
圖3 人員識別程序流程
數(shù)據(jù)管理模塊實(shí)現(xiàn)個別臨時入住實(shí)驗(yàn)室人員的人臉注冊、離開實(shí)驗(yàn)室人員的數(shù)據(jù)庫數(shù)據(jù)刪除。人員刪除可以單個刪除,也可以批量刪除。
由于Tengine支持目前市場上各種主流的模型框架,如果實(shí)驗(yàn)室的人員較多,為了獲得良好的識別效率,可以在服務(wù)器端使用主流框架,使用MobileNet[4]模型或者M(jìn)obileFaceNets模型進(jìn)行人臉識別模型訓(xùn)練。訓(xùn)練生成的模型使用convert_tool命令轉(zhuǎn)換成Tengine支持的模型格式,部署到開發(fā)板上進(jìn)行人臉的識別。
實(shí)驗(yàn)室30名人員參與系統(tǒng)測試,識別率為100%,平均識別時間小于250 ms。40人參與系統(tǒng)測試,識別率為100%,平均識別時間小于280 ms。50名人員參與系統(tǒng)測試,識別率為98%,平均識別時間小于300 ms。
在邊緣設(shè)備上實(shí)現(xiàn)離線的人臉識別功能,成本低,安裝調(diào)試靈活,穩(wěn)定性好,識別速度快,同時不受網(wǎng)絡(luò)帶寬的影響,避免了人臉圖像數(shù)據(jù)泄露的風(fēng)險,很好地實(shí)現(xiàn)了人員數(shù)量較少情況下的實(shí)驗(yàn)室門禁系統(tǒng)管理。本系統(tǒng)無法進(jìn)行活體識別,后期將針對這一問題對其進(jìn)行進(jìn)一步改進(jìn)。