范書鋒 吳宇環 譚永輝 閆云熙 謝慷慷
(黃河科技學院,河南 鄭州 450000)
學校實驗室對學生自由開放后,采用紙質方式進行出入信息記錄,管理工作較煩瑣,出錯率較高,因此,對學生自主進出實驗室采用智能化管理十分有必要[1]。且在當今新冠肺炎疫情形勢下,本系統加入了口罩檢測功能,即可無人值班也能規范進出者的一些行為。
本系統包括兩大部分,分別是STC51控制端和Python核心端。STC51硬件模塊主要通過內部接入的定時程序進行測距命令驅動超聲波模塊進行測距,并將STC51通過UART與上位機連接,實現Python與STC51的信息交互[2]。Python核心系統通過檢測來自單片機的信號,識別是否為驅動OpenCV的指令,當OpenCV開啟攝像頭則立即進行口罩檢測與人臉識別功能,并通過GUI界面顯示出來,最終系統根據識別結果判別是否向單片機下達電機驅動指令。總體結構如圖1所示。

圖1 系統總體設計框圖
STC51輔助系統主要包括超聲波測距模塊、步進機驅動模塊和蜂鳴器提示模塊。
超聲波測距采用HY-SRF05型號,此模塊可向外界發送一定頻率的聲波,且其精確測量2~450 cm傳感距離,精度可達3 mm。當檢測到前方有遮擋物時,聲波就會被反射回來,被模塊接受后,開始計時,記錄高電平時間,由時間數據可計算出距離[3]。
步進機驅動模塊采用28BYJ-48的型號,其是4相永磁式減速步進電機,采用的轉動方式是八拍模式,而齒輪內部有8個定子,每8個節拍為一循環,轉子一圈需要64節拍,由齒輪的減速比1∶64可得,每64節拍轉動5.625°,通過計算算出90°需要1 024節拍,在程序中設置轉動的正反方向,每個方向都轉動1 024節拍,并設置標志位和延時[4],一旦轉動90°時就會停止轉動,一段時間后進行反轉,以此達到門禁作用[5]。
蜂鳴器提示模塊采用無源蜂鳴器,單片機加以0.5~4.5 kHz的頻率可驅動內部蜂鳴器發出特定音頻,即只要對蜂鳴器設置一定的工作頻率,讓蜂鳴器以設定的頻率工作,就會發出特定的提示音。
Python控制系統主要包括基于pySerial與單片機進行串口通信的模塊、基于OpenCV的攝像頭觸發和人臉標識、基于CNN的口罩檢測和人臉識別。其Python控制系統流程圖如圖2所示。
當單片機測距成功后,單片機通過UART串口把數據通過pySerial告知Python,使之調用openCV打開攝像頭進行人臉標識,人臉標記成功之后再通過卷積神經網絡對其進行口罩檢測和人臉識別[6],最后把識別的結果與MySQL中的數據進行比對,然后通過PYQT界面展示出來,最后也可以把人員識別的信息記錄在數據庫,方便管理員查詢。
為提高系統的可靠性,應首先進行圖像預處理,這里使用OpenCV中自帶的基于Haar特征的級聯分類器進行面部檢測[7]。其庫具有級聯人臉分類器,庫中包含人臉識別模塊。僅通過加載級聯文檔,即可檢測動態或靜態圖像中的面部。文檔格式為XML,文件名為haarcascade_frontalface_default.xml。首先,根據攝像機代碼從計算機攝像機調用VideoCapture函數,然后使用cap.read()方法在攝像機中讀取圖像。之后,使用captureFrame()函數從輸入圖像中檢索邊框,并檢索框架,并使用detectMultiScale()函數完成人臉識別。Python控制系統如圖2所示。

圖2 Python控制系統
通過構建TensorFlow+Keras+OpenCV的模型來進行口罩檢測,此模型的數據集來源于網絡,包括2000幅戴口罩圖片,580幅無口罩的人臉。然后將這些圖像鏈接于用TensorFlow框架構成的CNN模型,最后通過系統的攝像頭來檢測人們是否佩戴口罩。首先,對上述的兩類圖像進行是否戴口罩的分類,然后通過旋轉、拉伸等辦法改變圖像,使數據增強;之后再將增強后的數據分為訓練集和檢驗集[8],通過CNN建立模型,再對模型進行預訓練和訓練,之后導入檢測程序,最后把是否檢測到口罩的信息通過GUI界面顯示出來[9]。
人臉識別通過CNN實現。CNN由卷積層、池化層、連接層組成。通過卷積層對由OpenCV檢測后的圖像進行特征提取,小部分的層進行邊緣、線等低級特征提取,更多的層迭代此低級特征以提取更復雜的特征。后用池化層對卷積層訓練的特征圖進行二次采樣。最后,形成卷積層+合并層的復合層,應用于模型任務。同時,將所有特征圖重新形成為1×N矢量,然后連接復合層進行模型訓練[10],之后導入識別程序可完成。
為提高用戶體驗,本系統設計了一套GUI界面。其可分為識別界面和管理界面(如圖3所示)。用戶可在識別界面內看到自己的基本信息及出入時間,也用于未戴口罩提醒及戴口罩顯示的功能。管理員可進入管理界面,進行人臉信息注冊、模型訓練、刪改學生信息等操作[11]。

圖3 GUI界面流程圖
本系統采用PyQT5的QThread來實現自動檢測與識別,其流程圖如圖4所示。主線程顯示主界面,線程1負責與單片機進行通信檢測是否有人到來。檢測到人到來時,線程2在識別界面上更新相機捕捉的人臉,根據余暉效應實現人臉的動態顯示。延遲幾秒后,通過線程3進行口罩檢測。檢測后,通過線程4進行人臉識別。人臉識別成功后,通過線程5與單片機進行通信,打開門禁。

圖4 線程流程圖
本系統選定在白天的室外環境下,以20名學生為對象進行了人臉識別的測試,根據光照強弱及超聲波檢測距離的不同而得到不同的結果,所形成的數據見表1和表2。由表中數據可以看出,當人員檢測距離攝像頭為20~60cm時,人臉識別成功率為97%,口罩檢測成功率為100%;經過對系統測試的數據分析,發現在距離攝像頭50 cm進行對象檢測的時候,誤別率和誤報率均在2%,人臉識別成功率為98%,識別時間2 s,效果最佳。

表1 口罩檢測結果

表2 人臉識別結果
本文采用人臉識別技術對高校實驗室進行信息化管理,對于在系統注冊過的人員經人臉識別通過后可進入實驗室,并記錄人員信息,同時也便于管理人員統計進出者信息。此外,在新冠肺炎疫情防控的形式下,系統還具有檢測佩戴口罩的功能,提高了實驗室使用的安全性。在此基礎上,系統優化了人臉識別算法,使誤識率和誤報率進一步減小;另外對于人員進出情況的信息,可將其導出到數據庫,方便管理員實時隨地查看數據。