范書鋒 吳宇環(huán) 譚永輝 閆云熙 謝慷慷
(黃河科技學(xué)院,河南 鄭州 450000)
學(xué)校實(shí)驗(yàn)室對(duì)學(xué)生自由開放后,采用紙質(zhì)方式進(jìn)行出入信息記錄,管理工作較煩瑣,出錯(cuò)率較高,因此,對(duì)學(xué)生自主進(jìn)出實(shí)驗(yàn)室采用智能化管理十分有必要[1]。且在當(dāng)今新冠肺炎疫情形勢(shì)下,本系統(tǒng)加入了口罩檢測(cè)功能,即可無人值班也能規(guī)范進(jìn)出者的一些行為。
本系統(tǒng)包括兩大部分,分別是STC51控制端和Python核心端。STC51硬件模塊主要通過內(nèi)部接入的定時(shí)程序進(jìn)行測(cè)距命令驅(qū)動(dòng)超聲波模塊進(jìn)行測(cè)距,并將STC51通過UART與上位機(jī)連接,實(shí)現(xiàn)Python與STC51的信息交互[2]。Python核心系統(tǒng)通過檢測(cè)來自單片機(jī)的信號(hào),識(shí)別是否為驅(qū)動(dòng)OpenCV的指令,當(dāng)OpenCV開啟攝像頭則立即進(jìn)行口罩檢測(cè)與人臉識(shí)別功能,并通過GUI界面顯示出來,最終系統(tǒng)根據(jù)識(shí)別結(jié)果判別是否向單片機(jī)下達(dá)電機(jī)驅(qū)動(dòng)指令??傮w結(jié)構(gòu)如圖1所示。
圖1 系統(tǒng)總體設(shè)計(jì)框圖
STC51輔助系統(tǒng)主要包括超聲波測(cè)距模塊、步進(jìn)機(jī)驅(qū)動(dòng)模塊和蜂鳴器提示模塊。
超聲波測(cè)距采用HY-SRF05型號(hào),此模塊可向外界發(fā)送一定頻率的聲波,且其精確測(cè)量2~450 cm傳感距離,精度可達(dá)3 mm。當(dāng)檢測(cè)到前方有遮擋物時(shí),聲波就會(huì)被反射回來,被模塊接受后,開始計(jì)時(shí),記錄高電平時(shí)間,由時(shí)間數(shù)據(jù)可計(jì)算出距離[3]。
步進(jìn)機(jī)驅(qū)動(dòng)模塊采用28BYJ-48的型號(hào),其是4相永磁式減速步進(jìn)電機(jī),采用的轉(zhuǎn)動(dòng)方式是八拍模式,而齒輪內(nèi)部有8個(gè)定子,每8個(gè)節(jié)拍為一循環(huán),轉(zhuǎn)子一圈需要64節(jié)拍,由齒輪的減速比1∶64可得,每64節(jié)拍轉(zhuǎn)動(dòng)5.625°,通過計(jì)算算出90°需要1 024節(jié)拍,在程序中設(shè)置轉(zhuǎn)動(dòng)的正反方向,每個(gè)方向都轉(zhuǎn)動(dòng)1 024節(jié)拍,并設(shè)置標(biāo)志位和延時(shí)[4],一旦轉(zhuǎn)動(dòng)90°時(shí)就會(huì)停止轉(zhuǎn)動(dòng),一段時(shí)間后進(jìn)行反轉(zhuǎn),以此達(dá)到門禁作用[5]。
蜂鳴器提示模塊采用無源蜂鳴器,單片機(jī)加以0.5~4.5 kHz的頻率可驅(qū)動(dòng)內(nèi)部蜂鳴器發(fā)出特定音頻,即只要對(duì)蜂鳴器設(shè)置一定的工作頻率,讓蜂鳴器以設(shè)定的頻率工作,就會(huì)發(fā)出特定的提示音。
Python控制系統(tǒng)主要包括基于pySerial與單片機(jī)進(jìn)行串口通信的模塊、基于OpenCV的攝像頭觸發(fā)和人臉標(biāo)識(shí)、基于CNN的口罩檢測(cè)和人臉識(shí)別。其Python控制系統(tǒng)流程圖如圖2所示。
當(dāng)單片機(jī)測(cè)距成功后,單片機(jī)通過UART串口把數(shù)據(jù)通過pySerial告知Python,使之調(diào)用openCV打開攝像頭進(jìn)行人臉標(biāo)識(shí),人臉標(biāo)記成功之后再通過卷積神經(jīng)網(wǎng)絡(luò)對(duì)其進(jìn)行口罩檢測(cè)和人臉識(shí)別[6],最后把識(shí)別的結(jié)果與MySQL中的數(shù)據(jù)進(jìn)行比對(duì),然后通過PYQT界面展示出來,最后也可以把人員識(shí)別的信息記錄在數(shù)據(jù)庫,方便管理員查詢。
為提高系統(tǒng)的可靠性,應(yīng)首先進(jìn)行圖像預(yù)處理,這里使用OpenCV中自帶的基于Haar特征的級(jí)聯(lián)分類器進(jìn)行面部檢測(cè)[7]。其庫具有級(jí)聯(lián)人臉分類器,庫中包含人臉識(shí)別模塊。僅通過加載級(jí)聯(lián)文檔,即可檢測(cè)動(dòng)態(tài)或靜態(tài)圖像中的面部。文檔格式為XML,文件名為haarcascade_frontalface_default.xml。首先,根據(jù)攝像機(jī)代碼從計(jì)算機(jī)攝像機(jī)調(diào)用VideoCapture函數(shù),然后使用cap.read()方法在攝像機(jī)中讀取圖像。之后,使用captureFrame()函數(shù)從輸入圖像中檢索邊框,并檢索框架,并使用detectMultiScale()函數(shù)完成人臉識(shí)別。Python控制系統(tǒng)如圖2所示。
圖2 Python控制系統(tǒng)
通過構(gòu)建TensorFlow+Keras+OpenCV的模型來進(jìn)行口罩檢測(cè),此模型的數(shù)據(jù)集來源于網(wǎng)絡(luò),包括2000幅戴口罩圖片,580幅無口罩的人臉。然后將這些圖像鏈接于用TensorFlow框架構(gòu)成的CNN模型,最后通過系統(tǒng)的攝像頭來檢測(cè)人們是否佩戴口罩。首先,對(duì)上述的兩類圖像進(jìn)行是否戴口罩的分類,然后通過旋轉(zhuǎn)、拉伸等辦法改變圖像,使數(shù)據(jù)增強(qiáng);之后再將增強(qiáng)后的數(shù)據(jù)分為訓(xùn)練集和檢驗(yàn)集[8],通過CNN建立模型,再對(duì)模型進(jìn)行預(yù)訓(xùn)練和訓(xùn)練,之后導(dǎo)入檢測(cè)程序,最后把是否檢測(cè)到口罩的信息通過GUI界面顯示出來[9]。
人臉識(shí)別通過CNN實(shí)現(xiàn)。CNN由卷積層、池化層、連接層組成。通過卷積層對(duì)由OpenCV檢測(cè)后的圖像進(jìn)行特征提取,小部分的層進(jìn)行邊緣、線等低級(jí)特征提取,更多的層迭代此低級(jí)特征以提取更復(fù)雜的特征。后用池化層對(duì)卷積層訓(xùn)練的特征圖進(jìn)行二次采樣。最后,形成卷積層+合并層的復(fù)合層,應(yīng)用于模型任務(wù)。同時(shí),將所有特征圖重新形成為1×N矢量,然后連接復(fù)合層進(jìn)行模型訓(xùn)練[10],之后導(dǎo)入識(shí)別程序可完成。
為提高用戶體驗(yàn),本系統(tǒng)設(shè)計(jì)了一套GUI界面。其可分為識(shí)別界面和管理界面(如圖3所示)。用戶可在識(shí)別界面內(nèi)看到自己的基本信息及出入時(shí)間,也用于未戴口罩提醒及戴口罩顯示的功能。管理員可進(jìn)入管理界面,進(jìn)行人臉信息注冊(cè)、模型訓(xùn)練、刪改學(xué)生信息等操作[11]。
圖3 GUI界面流程圖
本系統(tǒng)采用PyQT5的QThread來實(shí)現(xiàn)自動(dòng)檢測(cè)與識(shí)別,其流程圖如圖4所示。主線程顯示主界面,線程1負(fù)責(zé)與單片機(jī)進(jìn)行通信檢測(cè)是否有人到來。檢測(cè)到人到來時(shí),線程2在識(shí)別界面上更新相機(jī)捕捉的人臉,根據(jù)余暉效應(yīng)實(shí)現(xiàn)人臉的動(dòng)態(tài)顯示。延遲幾秒后,通過線程3進(jìn)行口罩檢測(cè)。檢測(cè)后,通過線程4進(jìn)行人臉識(shí)別。人臉識(shí)別成功后,通過線程5與單片機(jī)進(jìn)行通信,打開門禁。
圖4 線程流程圖
本系統(tǒng)選定在白天的室外環(huán)境下,以20名學(xué)生為對(duì)象進(jìn)行了人臉識(shí)別的測(cè)試,根據(jù)光照強(qiáng)弱及超聲波檢測(cè)距離的不同而得到不同的結(jié)果,所形成的數(shù)據(jù)見表1和表2。由表中數(shù)據(jù)可以看出,當(dāng)人員檢測(cè)距離攝像頭為20~60cm時(shí),人臉識(shí)別成功率為97%,口罩檢測(cè)成功率為100%;經(jīng)過對(duì)系統(tǒng)測(cè)試的數(shù)據(jù)分析,發(fā)現(xiàn)在距離攝像頭50 cm進(jìn)行對(duì)象檢測(cè)的時(shí)候,誤別率和誤報(bào)率均在2%,人臉識(shí)別成功率為98%,識(shí)別時(shí)間2 s,效果最佳。
表1 口罩檢測(cè)結(jié)果
表2 人臉識(shí)別結(jié)果
本文采用人臉識(shí)別技術(shù)對(duì)高校實(shí)驗(yàn)室進(jìn)行信息化管理,對(duì)于在系統(tǒng)注冊(cè)過的人員經(jīng)人臉識(shí)別通過后可進(jìn)入實(shí)驗(yàn)室,并記錄人員信息,同時(shí)也便于管理人員統(tǒng)計(jì)進(jìn)出者信息。此外,在新冠肺炎疫情防控的形式下,系統(tǒng)還具有檢測(cè)佩戴口罩的功能,提高了實(shí)驗(yàn)室使用的安全性。在此基礎(chǔ)上,系統(tǒng)優(yōu)化了人臉識(shí)別算法,使誤識(shí)率和誤報(bào)率進(jìn)一步減??;另外對(duì)于人員進(jìn)出情況的信息,可將其導(dǎo)出到數(shù)據(jù)庫,方便管理員實(shí)時(shí)隨地查看數(shù)據(jù)。