陳建宇,堯千桂,林權(quán),王楚楚,唐嘉偉,盧新祥
(紹興文理學(xué)院 數(shù)理信息學(xué)院,浙江紹興, 312000)
新冠疫情爆發(fā)以來,各地政府充分利用數(shù)字化,積極開展大數(shù)據(jù)分析管理,建立“一碼通行”的精確防控機(jī)制,為疫情防控貢獻(xiàn)了重大力量。在網(wǎng)格化、精細(xì)化的疫情防控下,健康碼成了出入公共場所必需的電子通行證,但是有時(shí)候人們掏出手機(jī)打開健康碼的時(shí)間過長,甚至不配合工作人員的工作,無視配合出示健康碼的要求,導(dǎo)致商場、醫(yī)院、超市等公共設(shè)施建筑的門口排隊(duì)過長,容易形成擁堵影響通行效率,可能增加交叉感染的風(fēng)險(xiǎn)。另一方面,傳統(tǒng)的打開手機(jī)出示健康碼、體溫測量等操作難以照顧到所有人員,尤其是兒童和老人等特殊群體,沒有手機(jī)或者不會(huì)操作,因此研究開發(fā)簡捷方便的通關(guān)驗(yàn)證系統(tǒng)具有重要意義和必要性。
本文提出了一種基于人臉識(shí)別和紅外測溫的健康碼核驗(yàn)閘機(jī)設(shè)計(jì),以樹莓派作為硬件平臺(tái),識(shí)別算法為核心,用于進(jìn)出需要健康碼核驗(yàn)以及溫度測量的公共場所,當(dāng)核驗(yàn)通過時(shí)閘機(jī)打開閘門使人通行,并使用了PyQt5設(shè)計(jì)作為GUI實(shí)現(xiàn),用于顯示人臉和健康碼的識(shí)別結(jié)果,可以方便用戶實(shí)時(shí)觀察篩查通行人員,有效提高通行效率。
本文將人臉識(shí)別、健康碼核驗(yàn)與紅外測溫相結(jié)合,提出一種基于人臉識(shí)別和紅外測溫的健康碼核驗(yàn)閘機(jī)設(shè)計(jì),旨在完成健康碼智能核驗(yàn)、體溫測量、語音播報(bào)等功能,提高健康碼核驗(yàn)的通行效率。
該設(shè)計(jì)以Python作為開發(fā)語言,樹莓派作為硬件平臺(tái)。當(dāng)攝像頭檢測到人員接近時(shí),使用基于OpenCV的Haar級(jí)聯(lián)與Dlib庫進(jìn)行人臉檢測及實(shí)時(shí)跟蹤,并通過LBPH算法將檢測得到的人臉數(shù)據(jù)與SQLite數(shù)據(jù)庫存放的人臉數(shù)據(jù)進(jìn)行對(duì)比識(shí)別,調(diào)用該人臉信息對(duì)應(yīng)的健康碼狀態(tài),同時(shí)紅外測溫傳感器對(duì)當(dāng)前人員進(jìn)行體溫測量;系統(tǒng)將體溫測量結(jié)果與健康碼狀態(tài)結(jié)果返回到GUI界面由顯示屏顯示,若核驗(yàn)結(jié)果正常,語音播報(bào)識(shí)別結(jié)果且閘機(jī)開放通行。
本閘機(jī)的硬件主要包括有五個(gè)部分:主控板、檢測模塊、舵機(jī)、顯示屏、語言播報(bào)模塊。主控板與識(shí)別模塊通過I2C總線進(jìn)行數(shù)據(jù)傳輸,閘機(jī)與語音播報(bào)模塊通過GPIO口與樹莓派進(jìn)行通信,顯示屏和樹莓派之間使用HDMI接口進(jìn)行視頻流的傳輸。

圖1 閘機(jī)硬件組成
該系統(tǒng)選用樹莓派4B作為主控板,它是一塊基于ARM Cortex-A72的微型電腦主板,搭載四核處理器,1.5GHz CPU和4GB RAM,使用SD卡或者M(jìn)icro SD卡作為硬盤,主板配套有一個(gè)網(wǎng)線接口和4個(gè)USB接口,擁有HDMI接口和視頻模擬信號(hào)輸出接口,可連接顯示器,鼠標(biāo)、鍵盤等外設(shè),滿足PC端的基本功能,可當(dāng)作PC端使用,并且還有40個(gè)GPIO口。適合于本項(xiàng)目使用基于OpenCV的LBPH算法,完成健康碼識(shí)別、紅外測溫、閘機(jī)開門和語音播報(bào)的功能實(shí)現(xiàn)。
檢測模塊由高清攝像頭和MLX90614紅外測溫傳感器兩部分組成。
MLX90614紅外測溫傳感器采用I2C的SMBUS協(xié)議與樹莓派通信,數(shù)據(jù)通信格式如圖2所示,通過上拉電阻將傳感器上的SDA,SCL與樹莓派的SDA.1和SCL.1引腳相連,工作溫度范圍為-40.00℃~125.00℃,分辨率為0.02℃,精度可達(dá)±1.00℃,檢測實(shí)時(shí)性強(qiáng),滿足用于人體溫度的檢測的性能需求。

圖2 SMBus讀數(shù)據(jù)格式(上)和SMBus寫數(shù)據(jù)格式(下)
圖中白色部分代表數(shù)據(jù)由主器件發(fā)送到從器件,陰影部分代表數(shù)據(jù)由從器件發(fā)送到主器件,其中S為起始位,SlaveAddress為從器件地址,Wr為寫標(biāo)志位,Rd為讀標(biāo)志位,A為應(yīng)答位,Command為命令字節(jié),Sr為重復(fù)起始位,PEC為校驗(yàn)數(shù)據(jù)包,P為停止位[1]。
高清攝像頭用于拍攝并采集人臉圖像,可直接通過USB連接到樹莓派,使用UVC標(biāo)準(zhǔn)協(xié)議,操作方便,規(guī)格選用1080p像素,成像素質(zhì)更好,不會(huì)產(chǎn)生畸變,用于拍攝人臉圖像,可使樹莓派進(jìn)行人臉檢測的圖像處理效果更好,提高識(shí)別算法的準(zhǔn)確率。
SG90舵機(jī)是模擬舵機(jī),它的力矩1.5kg/cm,工作電壓為4.2~6V,采用脈沖寬度是0.5~2.5ms,周期為20ms的PWM信號(hào)作為控制信號(hào),對(duì)應(yīng)的角度為0~180度,因?yàn)樗鼈兊膶?duì)應(yīng)關(guān)系呈線性變化[2],因此只需外部輸入一個(gè)脈寬信號(hào),舵機(jī)就會(huì)轉(zhuǎn)動(dòng)到一個(gè)對(duì)應(yīng)的角度,舵機(jī)的轉(zhuǎn)動(dòng)角度與輸入脈寬的關(guān)系如表1所示。

表1 舵機(jī)的轉(zhuǎn)動(dòng)角度與輸入脈寬關(guān)系表
舵機(jī)內(nèi)部帶有基準(zhǔn)電路和比較器,基準(zhǔn)電路可產(chǎn)生一個(gè)占空比為7.5%的基準(zhǔn)信號(hào)與外加信號(hào)相比較,判斷出舵機(jī)轉(zhuǎn)動(dòng)的大小和方向,產(chǎn)生電機(jī)的轉(zhuǎn)動(dòng)信號(hào)。由此樹莓派只需要給舵機(jī)一個(gè)周期為20ms的脈沖信號(hào),改變脈沖的占空比,便可以控制舵機(jī)轉(zhuǎn)動(dòng)的角度,從而達(dá)到閘機(jī)開門的目的。
顯示屏采用的是一塊7寸的ISP屏,使用HDMI接口,用于顯示基于PyQt5的GUI設(shè)計(jì)界面和健康碼識(shí)別結(jié)果以及體溫測量結(jié)果。
該模塊采用的是樹莓派使用百度云的語音合成接口,將需要提示的文本信息進(jìn)行語音合成,通過音響進(jìn)行語音播報(bào)。
為了提高CPU資源的利用率,加快系統(tǒng)的運(yùn)行反應(yīng)速度,程序采用多線程的設(shè)計(jì)模式,同時(shí)執(zhí)行UI線程和OpenCV線程。
UI線程用于實(shí)現(xiàn)攝像頭的拍攝畫面,以及將健康碼識(shí)別結(jié)果和體溫測量結(jié)果顯示在拍攝畫面上,實(shí)現(xiàn)人機(jī)交互。
OpenCV線程用于人臉檢測和健康碼識(shí)別算法,當(dāng)攝像頭抓取到人臉后對(duì)其進(jìn)行跟蹤識(shí)別并從SQLite數(shù)據(jù)庫獲取識(shí)別人臉的健康碼信息。在識(shí)別過程進(jìn)行的時(shí)候,紅外測溫傳感器同時(shí)對(duì)人體的溫度進(jìn)行測量,并將測溫結(jié)果與健康碼識(shí)別結(jié)果一起顯示在屏幕上,且結(jié)果會(huì)通過語音播報(bào)模塊進(jìn)行播報(bào);當(dāng)無人員通過時(shí),系統(tǒng)會(huì)進(jìn)入低功耗待機(jī)狀態(tài),直到攝像頭檢測到有人員通行,閘機(jī)恢復(fù)工作狀態(tài)。當(dāng)健康碼異常或體溫異常時(shí),閘機(jī)報(bào)警發(fā)聲,并通過語音播報(bào)模塊指引相關(guān)人員去指定地點(diǎn)接受管控。
軟件設(shè)計(jì)流程如圖3所示。

圖3 系統(tǒng)程序設(shè)計(jì)流程
人臉檢測算法需要先進(jìn)行人臉跟蹤,定位人臉信息。采用Haar級(jí)聯(lián)分類器,通過篩選式級(jí)聯(lián)把強(qiáng)分類器連接到一起,能夠使人臉檢測更加精確。Haar級(jí)聯(lián)算法提供了通過以下三種關(guān)鍵步驟完成的人臉檢測:定義Haar-like特征、利用積分圖加速運(yùn)算、通過AdaBoost訓(xùn)練的強(qiáng)分類器級(jí)聯(lián)。
常見的Haar-like特征如圖4所示,黑色代表圖像顏色較深的部分,白色代表圖像顏色較淺的部分,可通過運(yùn)算得到反應(yīng)圖像的灰度變換情況。

圖4 Haar—like特征分類
為了緩減特征值計(jì)算壓力,通過構(gòu)造積分圖提高計(jì)算速率[3]。積分圖定義如下:

式中,i(k,l)表示圖像在(x,y)位置的像素值。根據(jù)n個(gè)正樣本和負(fù)樣本的圖像中的某個(gè)固定特征計(jì)算出每張圖像該特征的特征值后,再使用Adaboost分類器得到最優(yōu)的弱分類器,再通過算法訓(xùn)練出該特征的強(qiáng)分類器,最終將若干個(gè)分類器用級(jí)聯(lián)的方式連接在一起,獲得Haar級(jí)聯(lián)分類器。
本系統(tǒng)識(shí)別算法選用了LBPH特征提取算法。將一張圖像均勻分割成幾塊區(qū)域,并提取每塊區(qū)域的直方圖,將各區(qū)域的直方圖依次連接,形成具有LBP特征的統(tǒng)計(jì)直方圖,用于描述圖像的局部特征。首先LBPH算法對(duì)面部圖像進(jìn)行灰度化處理,然后使用LBP算子來處理這些圖像,得到相對(duì)應(yīng)的灰度圖像的LBP值,系統(tǒng)通過LBP值可以進(jìn)行繪制出具有人臉特征信息的LBP統(tǒng)計(jì)直方圖,最后把訓(xùn)練集統(tǒng)計(jì)直方圖和測試集統(tǒng)計(jì)直方圖進(jìn)行比較,若得到的結(jié)果和測試的訓(xùn)練樣本非常相似,那么該測試的訓(xùn)練樣本就是人臉識(shí)別的結(jié)果。
LBPH算法具有計(jì)算量較小,時(shí)效性較高的優(yōu)點(diǎn),其光照不變性、灰度不變性和旋轉(zhuǎn)不變性能夠保證不同條件下的人臉識(shí)別的準(zhǔn)確率[4]。
SQLite是一款遵守ACID的關(guān)系型的輕型數(shù)據(jù)庫。與PostgreSQL和Mysql這兩款數(shù)據(jù)庫相比,它的處理速度較快。綜合考慮選用SQLite數(shù)據(jù)庫作為人臉數(shù)據(jù)的存儲(chǔ)。
SQLite的整體架構(gòu)可以分成兩大部分,內(nèi)核和后端,核心部分是內(nèi)核,內(nèi)核中的SQL命令處理還分為三部分,分別是詞法分析、解析和代碼生成,負(fù)責(zé)用戶對(duì)數(shù)據(jù)庫的預(yù)處理和高效快速地生成代碼供虛擬機(jī)使用。后端內(nèi)是經(jīng)過優(yōu)化的B樹,這樣有助于運(yùn)行在可調(diào)整的頁面緩沖上時(shí),減少對(duì)磁盤的無效查找,再往下是頁面緩存,它在OS的抽象層之上發(fā)揮作用,這樣的體系結(jié)構(gòu)使數(shù)據(jù)庫的可移植性提供了一種可能。
在進(jìn)行數(shù)據(jù)庫的建立時(shí),采用了身份證號(hào)、姓名、健康碼信息等作為數(shù)據(jù)庫存儲(chǔ)的對(duì)象,當(dāng)系統(tǒng)對(duì)人臉進(jìn)行預(yù)采樣會(huì)自動(dòng)生成編號(hào)并通過卷積神經(jīng)網(wǎng)絡(luò)對(duì)采樣信息進(jìn)行訓(xùn)練,除此之外,工作人員還可以根據(jù)需求對(duì)數(shù)據(jù)庫進(jìn)行增刪改查等操作,對(duì)信息的管理更加方便。
對(duì)于顯示界面的設(shè)計(jì),采用基于PyQT5的GUI界面設(shè)計(jì),它擁有幾百個(gè)類,包含千種函數(shù)和方法,主要分為QtCore模塊、QtGui模塊和QtWidget模塊,分別包含核心的非GUI功能、窗口系統(tǒng)集成、事件處理、基本空間等內(nèi)容,提供了一整套豐富的窗口控件庫,并且PyQt5是Python語言對(duì)Qt框架的實(shí)現(xiàn),因此在運(yùn)行調(diào)用方面十分方便,可以直接在Python中直接聲明為Qt的子類,避免了繁雜的開發(fā)流程,提高了系統(tǒng)的運(yùn)行效率。
在設(shè)計(jì)過程中,本項(xiàng)目使用了與之配套的軟件Qt Designer,作為一款用于輔助GUI設(shè)計(jì)的工具,它可以大大減輕在設(shè)計(jì)過程中的工作量,主要設(shè)計(jì)了攝像頭拍攝畫面窗口、系統(tǒng)日志窗口、健康碼結(jié)果窗口和溫度測量結(jié)果窗口,有了這些窗口,可以使篩查通行人員的工作更加方便快捷。
通過圖5,對(duì)閘機(jī)系統(tǒng)進(jìn)行多次實(shí)驗(yàn),并進(jìn)行結(jié)果分析。

圖5 系統(tǒng)實(shí)驗(yàn)流程圖
根據(jù)攝像頭拍攝采集到的圖像數(shù)據(jù)與數(shù)據(jù)庫中的圖像數(shù)據(jù)對(duì)比,系統(tǒng)會(huì)給一個(gè)滿足條件的閾值,當(dāng)計(jì)算值超過系統(tǒng)預(yù)設(shè)的閾值,證明數(shù)據(jù)庫的人臉圖像與檢測的人臉圖像是一個(gè)人,即識(shí)別出當(dāng)前檢測人臉的身份和健康碼信息。
我們隨機(jī)抽取了100位人員作為樣本進(jìn)行健康碼核驗(yàn),以20人為一組,通過多組實(shí)驗(yàn),得到表2的健康碼核驗(yàn)的準(zhǔn)確率的關(guān)系[5]。

表2 健康碼核驗(yàn)的準(zhǔn)確率
如表可以看出,其平均準(zhǔn)確率約為95.4%。
將MLX90614與樹莓派的I2C接口進(jìn)行連接通信,通過不斷改變傳感器與人的額頭的距離,對(duì)人的額溫進(jìn)行測量,并采用一種通過最小二乘法進(jìn)行多項(xiàng)式擬合進(jìn)行溫度補(bǔ)償[6~7],減小誤差。
補(bǔ)償前后的溫度曲線,如圖6所示。

圖6 補(bǔ)償前后的溫度曲線
實(shí)驗(yàn)證明,通過溫度補(bǔ)償后,平均誤差0.027℃,相對(duì)誤差為0.98%符合實(shí)驗(yàn)預(yù)期,滿足人體測溫精度需求。
本文研究并設(shè)計(jì)了一種基于人臉識(shí)別和紅外測溫的健康碼閘機(jī)系統(tǒng),詳細(xì)介紹了該系統(tǒng)的軟硬件設(shè)計(jì),并對(duì)閘機(jī)系統(tǒng)進(jìn)行了進(jìn)一步的運(yùn)行測試。根據(jù)實(shí)驗(yàn)數(shù)據(jù)結(jié)果來看,基于LBPH人臉識(shí)別算法的識(shí)別準(zhǔn)確率較高,通過溫度補(bǔ)償后的MLX90614紅外測溫傳感器的測溫精度也得到了較大提升,驗(yàn)證了系統(tǒng)的正確性和完整性。相比目前的人工核驗(yàn)方式更加智能化,高效化,符合產(chǎn)業(yè)需求,具有現(xiàn)實(shí)意義。
但作為測試樣機(jī),還存在一些不足的地方,目前系統(tǒng)需要預(yù)先錄入人臉和健康碼信息,工程量較大,只能服務(wù)于小區(qū)域內(nèi)人群,例如公司、小區(qū)等地。未來可接入國家衛(wèi)生部門管理的健康碼信息數(shù)據(jù)庫,實(shí)現(xiàn)全國覆蓋。