高亮海,于世龍,趙少坤,廖通海,喬建華
(太原科技大學(xué) 電子信息工程學(xué)院,山西 太原 030024)
日??记谑墙M織管理的基本方式,人臉識(shí)別的考勤方式因具有直觀、方便、無(wú)接觸的優(yōu)點(diǎn)已被廣泛應(yīng)用[1-3]?,F(xiàn)有的人臉識(shí)別考勤設(shè)備存在成本高、體積大、僅本地查看、錄入復(fù)雜等問(wèn)題。隨著深度學(xué)習(xí)基本理論的發(fā)展,以及專門(mén)為嵌入式設(shè)備和深度神經(jīng)網(wǎng)絡(luò)加速而設(shè)計(jì)的新型片上系統(tǒng)的發(fā)布,通過(guò)小型廉價(jià)設(shè)備實(shí)現(xiàn)實(shí)時(shí)圖像識(shí)別成為可能[4-5]。同時(shí),應(yīng)用物聯(lián)網(wǎng)技術(shù)還可以將邊緣節(jié)點(diǎn)的感知數(shù)據(jù)通過(guò)通信模塊發(fā)送至云端服務(wù)器,利用終端設(shè)備即可實(shí)現(xiàn)數(shù)據(jù)的集中管理和遠(yuǎn)程監(jiān)測(cè)[6-8]。本文在基于MQTT(Message Queuing Telemetry Transport)的物聯(lián)網(wǎng)架構(gòu)下設(shè)計(jì)了基于K210 和ESP32 的嵌入式人臉識(shí)別考勤和遠(yuǎn)程報(bào)備系統(tǒng),通過(guò)K210實(shí)時(shí)識(shí)別人臉,配合ESP32 將信息上傳至物聯(lián)網(wǎng)云端服務(wù)器;通過(guò)手機(jī)APP 可聯(lián)網(wǎng)查看簽到消息、進(jìn)行錄入和修改,還具有云端信息保存、歷史分析、消息交互傳輸?shù)裙δ?,適用于絕大多數(shù)的人臉識(shí)別考勤場(chǎng)景。
本文采用的主芯片K210 是RISC-V 架構(gòu)的高性能微控制器,配備了神經(jīng)網(wǎng)絡(luò)處理器(KPU),KPU 內(nèi)置卷積、批歸一化、激活和池化運(yùn)算單元,可用于加速卷積神經(jīng)網(wǎng)絡(luò)算法。
在執(zhí)行人臉識(shí)別任務(wù)前,先將人臉模型燒錄至FLASH存儲(chǔ)器,以便于KPU 進(jìn)行調(diào)用。人臉識(shí)別的總體流程是先獲取當(dāng)前的攝像頭圖像,KPU 加載人臉模型后推理當(dāng)前的圖像中有無(wú)人臉,若有人臉則對(duì)兩眼、鼻子、嘴巴的位置進(jìn)行定位,并且采集當(dāng)前人臉的特征值。比對(duì)當(dāng)前人臉特征和已記錄的人臉特征,若相似度超過(guò)一定比率,則判定為同一個(gè)人,若相似度比率低則無(wú)法判定。人臉識(shí)別流程如圖1 所示。
圖1 人臉識(shí)別流程
1.2.1 網(wǎng)絡(luò)通信總體結(jié)構(gòu)
網(wǎng)絡(luò)通信總體結(jié)構(gòu)由ESP32、巴法云服務(wù)器、手機(jī)APP端及網(wǎng)絡(luò)數(shù)據(jù)庫(kù)四部分構(gòu)成。其中的數(shù)據(jù)通信均采用JSON格式,方便不同模塊的信息傳遞和解析??傮w結(jié)構(gòu)如圖2所示。
圖2 網(wǎng)絡(luò)通信總體結(jié)構(gòu)
1.2.2 MQTT 協(xié)議
MQTT 是一個(gè)采用發(fā)布/訂閱(Publish/Subscribe)模型的輕量級(jí)通信協(xié)定,構(gòu)建于TCP/IP 協(xié)議之上。MQTT 的主要優(yōu)點(diǎn)是能夠以很少的代碼和有限的帶寬,為遠(yuǎn)程終端帶來(lái)及時(shí)可靠的消息服務(wù)質(zhì)量[9]。作為一個(gè)低費(fèi)用、低帶寬需求的即時(shí)通信協(xié)議,MQTT 在物聯(lián)網(wǎng)、小型終端、移動(dòng)應(yīng)用等領(lǐng)域有著廣泛的應(yīng)用。因此,本系統(tǒng)采用MQTT 協(xié)議進(jìn)行網(wǎng)絡(luò)通信。
MQTT 分為broker(代理)和client(客戶端)。client從角色上可以分為publisher(發(fā)布者)和subscriber(訂閱者),client 之間通過(guò)中間媒介broker 通信。client 要訂閱的消息類型由topic(主題)來(lái)決定。當(dāng)一個(gè)publisher發(fā)布了一個(gè)消息時(shí),broker就把這條消息通知給訂閱了這個(gè)topic的subscriber[10]。在本系統(tǒng)中,巴法云服務(wù)器作為MQTT 的broker,ESP32和手機(jī)APP 均作為client。ESP32 和手機(jī)APP 首先需要訂閱一個(gè)在巴法云服務(wù)器中創(chuàng)建的topic;然后,ESP32 作為publisher 發(fā)出消息,服務(wù)器接收了消息之后在同一topic 下向所有client 都發(fā)出消息,因而手機(jī)APP 作為client 就收到ESP32 發(fā)送的消息。同理,手機(jī)APP 端也用同樣的方式發(fā)送消息至ESP32 端。數(shù)據(jù)的格式采用JSON 字符串格式,方便解析和發(fā)送,JSON 字符串格式如下:
1.2.3 巴法云物聯(lián)網(wǎng)平臺(tái)
巴法云物聯(lián)網(wǎng)平臺(tái)是一種利用前后端口隔離的設(shè)計(jì)理念,具有支持發(fā)布/訂閱模式、提供遺囑機(jī)制的輕量級(jí)物聯(lián)網(wǎng)端服務(wù)器。巴法云物聯(lián)網(wǎng)平臺(tái)支持多模型的數(shù)據(jù)交換,并且已將協(xié)議標(biāo)準(zhǔn)化,與多個(gè)平臺(tái)服務(wù)完全兼容。本設(shè)計(jì)利用巴法云平臺(tái),保存考勤的各類數(shù)據(jù),連接ESP32 和手機(jī)APP。
本系統(tǒng)由K210 視覺(jué)識(shí)別模組、ESP32 最小系統(tǒng)板和手機(jī)端考勤系統(tǒng)APP 構(gòu)成。K210 作為主控芯片,ESP32 提供聯(lián)網(wǎng)功能,系統(tǒng)使用K210 配備的KPU 神經(jīng)網(wǎng)絡(luò)處理器進(jìn)行人臉識(shí)別,發(fā)送識(shí)別結(jié)果至ESP32,ESP32 使用MQTT 協(xié)議通過(guò)WiFi 發(fā)送信息至云服務(wù)器端,云服務(wù)器發(fā)送至手機(jī)APP,同樣手機(jī)APP 也發(fā)送信息至ESP32 端,同時(shí)在LCD上顯示攝像頭攝入的考勤人員人臉檢測(cè)和識(shí)別結(jié)果。系統(tǒng)總體結(jié)構(gòu)如圖3 所示。
圖3 系統(tǒng)總體結(jié)構(gòu)
采用K210 進(jìn)行人臉檢測(cè)與識(shí)別。首先利用人臉特征建模,對(duì)收集到的圖片進(jìn)行人臉檢測(cè);然后對(duì)目標(biāo)對(duì)象的五官進(jìn)行比對(duì),從中提取特征值并保存;最后與預(yù)先保存的大量特征值比對(duì)即可識(shí)別人臉,并得到匹配人臉的相關(guān)信息。同時(shí),使用SD 卡存儲(chǔ)人臉特征信息,可以實(shí)現(xiàn)信息的掉電保存。
ESP32 連接K210 和云服務(wù)端。ESP32 需要連接WiFi 獲取當(dāng)前的網(wǎng)絡(luò)時(shí)間并寫(xiě)入實(shí)時(shí)時(shí)鐘寄存器。K210 與ESP32經(jīng)串口通信,通過(guò)JSON 字符串傳輸人臉信息、姓名信息、工號(hào)信息和時(shí)間信息。ESP32 以云服務(wù)器為中轉(zhuǎn),通過(guò)MQTT 協(xié)議傳輸JSON 字符串信息,最終發(fā)送至手機(jī)APP。
通過(guò)手機(jī)考勤系統(tǒng)APP 實(shí)現(xiàn)信息的記錄、查詢等功能。如果要記錄新的人臉信息,需要輸入工號(hào)和姓名。手機(jī)端通過(guò)網(wǎng)絡(luò)云服務(wù)器發(fā)送工號(hào)和姓名信息至ESP32 端,ESP32進(jìn)行數(shù)據(jù)解析和判斷;然后通過(guò)串口發(fā)送到K210 模組中,K210 模組即開(kāi)始錄入人臉。如果ESP32 端收到報(bào)道信息,就把信息上傳至網(wǎng)絡(luò)數(shù)據(jù)庫(kù)中等待下次更新。手機(jī)APP 還提供了信息查詢功能,通過(guò)工號(hào)查找人員信息。
硬件部分主要由兩部分構(gòu)成:一部分是以K210 為核心的人臉識(shí)別模組;另一部分是以ESP32 為核心的WiFi 通信模組。兩者通過(guò)串口進(jìn)行數(shù)據(jù)交互。K210 攝像頭模組主要由下載電路、DC-DC 電源轉(zhuǎn)換電路、LCD 電路、OV5640 攝像頭電路和TF 卡電路構(gòu)成。ESP32 模組僅由一鍵下載電路和最小系統(tǒng)構(gòu)成。系統(tǒng)硬件結(jié)構(gòu)如圖4 所示。
圖4 系統(tǒng)硬件結(jié)構(gòu)
本文采用了Sipeed 的視覺(jué)處理模組MaixBit,該模組具有較小的體積和優(yōu)良的擴(kuò)展性。MaixBit 引腳如圖5 所示。
圖5 MaixBit 引腳圖
攝像頭模塊選用OV5640,顯示器使用LCD,通過(guò)FPC排線連接至K210。OV5640 通過(guò)DVP(Digital Video Port)端口和主控制器相連。LCD 使用8 bit 并口與K210 連接,原因在于要實(shí)時(shí)傳輸圖像信息,圖像數(shù)據(jù)量比較大,8 bit 并口可以提供更大的帶寬。
TF 卡模塊使用SPI 模式連接,原因在于K210 引腳資源有限,SPI 的連接方式僅需四根線,并且本系統(tǒng)中TF 卡存儲(chǔ)的數(shù)據(jù)量不大,不需要較大的傳輸速率。
ESP32 整合了2.4 GHz WiFi 與藍(lán)牙雙模技術(shù),擁有超高的射頻技術(shù)性能、穩(wěn)定性、通用性與可靠性,同時(shí)耗電量超低,且成本比較低。ESP32 及外圍的接口如圖6 所示。
圖6 ESP32 及外圍電路接口
ESP32 與K210 通 過(guò) 串 口 連 接 如 下:ESP32 RX2—K210 數(shù)字引腳7(K210TX);ESP32 TX2—K210 數(shù)字引腳8 (K210RX);ESP32 GND—K210 GND。
主控模塊K210 使用MaixPy 開(kāi)發(fā)環(huán)境,MaixPy 系統(tǒng)不僅支持MCU 常規(guī)運(yùn)算功能,而且整合了硬件加速的AI 機(jī)器視覺(jué)算法以及與麥克風(fēng)陣列相關(guān)的算法。使用micropython編程可以很方便地開(kāi)發(fā)K210,使其能夠做視覺(jué)相關(guān)的工作。MaixPy 還具有一鍵下載功能,方便下載和調(diào)試代碼。
K210 模塊需要完成人臉檢測(cè)和識(shí)別、接收和發(fā)送信息、確定是否錄入新的人臉,及發(fā)送給ESP32 端識(shí)別人臉的姓名、工號(hào)等信息。K210 程序流程如圖7 所示。首先K210 上電后先檢測(cè)TF 卡上有無(wú)人臉特征值記錄文件,如果存在人臉特征值記錄文件就把人臉的特征值讀取出來(lái)并且保存在一個(gè)人臉特征值列表中,針對(duì)名稱和工號(hào)的做法相同。之后從FLASH 中加載人臉模型,初始化UART、LCD、攝像頭模塊。
圖7 K210 程序流程
在程序的循環(huán)中,先從串口獲取ESP32 數(shù)據(jù),如果串口有數(shù)據(jù)發(fā)送過(guò)來(lái),進(jìn)行數(shù)據(jù)解析,數(shù)據(jù)的格式為“a 姓名,操作,工號(hào)a”,“a”作為判斷數(shù)據(jù)幀頭和幀尾的標(biāo)志,如果操作值為0,則把新錄入人員的標(biāo)志位置1。通過(guò)攝像頭采集圖像,使用KPU 執(zhí)行推理任務(wù)。如果在圖像中找到人臉,先把人臉大小固定為128*128,運(yùn)行臉部模型,分別為左眼、右眼、鼻子、左嘴部、右嘴部;然后計(jì)算人臉特征值向量。再把特征值列表中的每一個(gè)值與當(dāng)前值進(jìn)行比對(duì),若匹配度大于閾值,則判斷為同一個(gè)人,通過(guò)串口使用JSON 字符串把此人的工號(hào)、姓名、操作值打包發(fā)送給ESP32,并且在屏幕上顯示出相關(guān)信息。若當(dāng)前新錄入人員的標(biāo)志位為1,則把當(dāng)前人臉的特征值、工號(hào)、姓名以TXT 文件的形式保存至SD 卡中。最后刷新屏幕。
通信模塊ESP32 用于連接網(wǎng)絡(luò)云服務(wù)器發(fā)送信息、與K210 的通信、信息解析和邏輯判斷,以及完成系統(tǒng)中不同器件的通信。ESP32 的開(kāi)發(fā)環(huán)境是ESP-IDF,Visual Studio Code(VS Code)作為代碼編輯器。ESP32 程序流程如圖8所示。
圖8 ESP32 程序流程
ESP32 首先初始化串口1 和串口2,波特率為115 200,無(wú)校驗(yàn)位,8 位數(shù)據(jù)位,1 位停止位;然后把引腳0 配置為外部中斷上升沿觸發(fā)(按鍵),連接當(dāng)前的WiFi 成功后,通過(guò)阿里云NTP 服務(wù)器獲取時(shí)間信息,并把時(shí)間信息寫(xiě)入芯片的RTC 中;通過(guò)MQTT 連接巴法云服務(wù)器,訂閱一個(gè)主題,接著進(jìn)入主循環(huán),判斷當(dāng)前的MQTT 連接狀態(tài)是否正常,如果不正常則重新連接;把串口中獲得的考勤人員信息發(fā)送至網(wǎng)絡(luò)服務(wù)器,網(wǎng)絡(luò)服務(wù)器發(fā)送給APP 端顯示;通過(guò)解析串口和網(wǎng)絡(luò)服務(wù)器發(fā)送的數(shù)據(jù)來(lái)判斷當(dāng)前需要執(zhí)行的操作。如果是簽到狀態(tài)并且串口收到數(shù)據(jù),則向服務(wù)器發(fā)送更新簽到數(shù)據(jù)信息;如果是簽退狀態(tài)且串口收到數(shù)據(jù),則向服務(wù)器發(fā)送更新簽退數(shù)據(jù)信息。這之間的數(shù)據(jù)傳輸格式都采用JSON 字符串。
本設(shè)計(jì)的手機(jī)APP 使用APP Inventor 開(kāi)發(fā)。APP 軟件設(shè)計(jì)主要通過(guò)調(diào)用函數(shù)庫(kù)完成。首先有兩個(gè)頁(yè)面:管理員登錄頁(yè)面,數(shù)據(jù)查詢和錄入頁(yè)面。管理員登錄頁(yè)面判斷用戶名與密碼是否匹配,如果匹配則跳入下一個(gè)頁(yè)面,不匹配就提示錯(cuò)誤信息。針對(duì)數(shù)據(jù)查詢和錄入頁(yè)面,首先使用MQTT 模塊訂閱巴法云網(wǎng)絡(luò)服務(wù)器的同一個(gè)主題,之后按照輸入的工號(hào)和姓名發(fā)送消息。如果接收到消息,判斷接收消息的類型;若是更新消息,就把接收到消息的信息解析保存至網(wǎng)絡(luò)數(shù)據(jù)云中。錄入流程如圖9 所示。
圖9 錄入流程
數(shù)據(jù)庫(kù)使用的是網(wǎng)絡(luò)微數(shù)據(jù)庫(kù)系統(tǒng),可以通過(guò)手機(jī)端APP 進(jìn)行數(shù)據(jù)增添、刪改、查詢功能,每個(gè)數(shù)據(jù)由標(biāo)簽和值構(gòu)成,標(biāo)簽用來(lái)區(qū)分不同的信息,值通過(guò)JSON 字符串保存信息。
連接MaixPy 軟件和開(kāi)發(fā)板,運(yùn)行程序,在幀緩沖區(qū)可以實(shí)時(shí)觀察到圖像數(shù)據(jù),也可在LCD 屏幕上觀察。硬件連接如圖10 所示。
圖10 系統(tǒng)硬件
如果SD 卡內(nèi)沒(méi)有存儲(chǔ)數(shù)據(jù),則無(wú)法識(shí)別到人臉,并且只有在串口給出指令后才能錄入。人臉識(shí)別效果測(cè)試如圖11所示,沒(méi)有識(shí)別到人臉時(shí)LCD 會(huì)顯示“can’t recognize”,成功識(shí)別后會(huì)顯示“recognized”和工號(hào)。此時(shí),從串口端輸出的信息如圖12 所示。
圖11 人臉識(shí)別測(cè)試
圖12 識(shí)別到人臉后串口輸出信息
網(wǎng)絡(luò)通信測(cè)試主要包括聯(lián)網(wǎng)測(cè)試、時(shí)間獲取測(cè)試、串口調(diào)試和網(wǎng)絡(luò)云服務(wù)器測(cè)試。聯(lián)網(wǎng)測(cè)試需要通過(guò)WiFi連接網(wǎng)絡(luò),并查看是否正確獲得IP 地址。時(shí)間獲取測(cè)試是從服務(wù)器獲取網(wǎng)絡(luò)時(shí)間。網(wǎng)絡(luò)云服務(wù)器調(diào)試,則是選用巴法云服務(wù)器為平臺(tái),在網(wǎng)頁(yè)端查看收到和發(fā)送的消息。串口調(diào)試則是使用串口1 作為調(diào)試,串口2 連接K210,輸出接收到的網(wǎng)絡(luò)信息和收到的信息。圖13 ~圖15 即為網(wǎng)絡(luò)測(cè)試效果。
圖13 MQTT 聯(lián)網(wǎng)測(cè)試
圖14 JSON 字符串解析輸出
圖15 巴法云網(wǎng)絡(luò)通信測(cè)試
手機(jī)APP 端測(cè)試包含了巴法云服務(wù)器通信和云數(shù)據(jù)庫(kù)的操作。巴法云服務(wù)器的通信測(cè)試與ESP32 端類似,都是在網(wǎng)頁(yè)端查看服務(wù)器上的消息記錄是否正常;云數(shù)據(jù)庫(kù)的操作則是對(duì)收到的消息進(jìn)行提取和保存。查詢操作先輸入查詢關(guān)鍵字,然后點(diǎn)擊獲取數(shù)據(jù)按鈕,觀察從數(shù)據(jù)庫(kù)獲取的消息是否正確。測(cè)試效果如圖16 所示。
圖16 手機(jī)APP 測(cè)試
本文在MQTT 協(xié)議架構(gòu)下設(shè)計(jì)了基于K210 和ESP32 的人臉識(shí)別考勤和聯(lián)網(wǎng)報(bào)備系統(tǒng),利用卷積神經(jīng)網(wǎng)絡(luò)實(shí)現(xiàn)了嵌入式系統(tǒng)上人臉的實(shí)時(shí)識(shí)別,并能通過(guò)手機(jī)APP 查詢考勤人員信息及新錄入人員信息。該設(shè)計(jì)解決了串口通信格式、UTF-8 編碼轉(zhuǎn)化、MQTT 的調(diào)試、人臉識(shí)別數(shù)據(jù)存儲(chǔ)、手機(jī)APP 開(kāi)發(fā)等關(guān)鍵問(wèn)題。經(jīng)過(guò)大量測(cè)試,該系統(tǒng)具有較高識(shí)別精度,功能齊備,操作方便;同時(shí)本系統(tǒng)體積小,易于實(shí)施,很容易轉(zhuǎn)換為產(chǎn)品,滿足實(shí)際應(yīng)用的需求。
物聯(lián)網(wǎng)技術(shù)2023年10期