付蓮蓮,丁鑫圣,王映龍
(江西農(nóng)業(yè)大學(xué)計算機與信息工程學(xué)院,江西南昌 330045)
自2020年2月來,新冠肺炎病毒在全球爆發(fā),確診病例已過億,死亡人數(shù)超過二百余萬。造成如今的嚴(yán)重現(xiàn)象,完全是群眾不按照國家指示,不佩戴口罩,在公眾場合人群繁雜等復(fù)雜環(huán)境下不僅會對自己而且對他人也會造成極大的風(fēng)險隱患。
國內(nèi)百度公司為了早日戰(zhàn)勝疫情,通過了一項為了集人類智慧和方案,將“口罩人臉識別”預(yù)訓(xùn)練模型免費提供給社會的決定。百度這模型不僅解決了復(fù)雜環(huán)境識別困難的同時,還可對多人進行檢測,并且能將具體的人是否佩戴口罩進行提醒。還有一些文章將YOLO算法改進,加入了注意力機制,優(yōu)化了神經(jīng)網(wǎng)絡(luò)和損失函數(shù),也較好地實現(xiàn)了口罩識別,但需要提前訓(xùn)練模型,有一定的誤判率,且對計算機的要求較高,資源消耗也較大,對微小型設(shè)備不適用[1]。美國的研究團隊則提出了一種在手術(shù)室特定環(huán)境下,簡易地識別醫(yī)生是否佩戴口罩的算法,但是有一定的幾率會將假人臉佩戴口罩視為真人佩戴口罩,在實際應(yīng)用中容易以假亂真,逃避檢測,這也表明此方法欠佳[3]。按照國內(nèi)外的研究現(xiàn)狀,百度的方法簡單直接,輸入待預(yù)測數(shù)據(jù),加載預(yù)訓(xùn)練模型,調(diào)用module的相應(yīng)預(yù)測API,完成預(yù)測功能。并且可移植性很強,對于一些運算力低的設(shè)備也能很好地適配;國外的研究團體同時對于兩個面部檢測器進行預(yù)測,面部和口罩,此方法運算量較大,移植性未知,魯棒性亦不足。
上述方法為佩戴口罩識別提供了思路和技術(shù)支持,但也存在有待進一步完善的地方。首先部分方法識別過程復(fù)雜,需要提前訓(xùn)練模型,參數(shù)過多,存在大量冗余數(shù)據(jù),導(dǎo)致程序任務(wù)處理量繁重,識別速度緩慢;其次特征提取難把控,識別率較低,有較大的誤判率,魯棒性較差。為此,提出一種基于幀間差分法的口罩佩戴檢測算法。通過對輸入圖像進行高斯降噪、灰度處理、二值化、膨脹與腐蝕,大幅減少數(shù)據(jù)的處理量,加快計算速度,根據(jù)前背景的動靜態(tài)差異,利用幀間差分法分離出前景,使得集中于臉部。根據(jù)皮膚與口罩的色調(diào)有較大的差異的特點,利用OpenCV識別出眼部和口部,對兩區(qū)域的膚色通道單獨提取,并統(tǒng)計兩區(qū)域的膚色面積,進行比較,并引入霍夫直線檢測對參數(shù)空間轉(zhuǎn)換輔助檢測,得出結(jié)果。相比其它方法,此算法簡潔高效,資源消耗少,識別效率更高,魯棒性更佳。流程由圖1可知。
圖1 算法流程圖
將電腦的攝像頭對圖形進行采集,為了解決電腦前置攝像頭成像素質(zhì)不高的問題,必須將噪點消除,使圖像更易處理,文章采用以下方法進行圖像預(yù)處理,減少程序的計算量,加快識別速度。
一般分布在物體邊緣的噪聲多為高頻,過濾掉高頻信號,達到去除高頻噪聲和平滑邊緣的目的。文章采用高斯濾波,其在通常情況下可對圖像的平滑,也可以對圖像進行模糊處理。高斯低通濾波是指只允許低頻率的信號通過,過濾中高頻率的信號。以二維高斯濾波為例,由式(1)可知。
(1)
經(jīng)過公式的運算,各點得到不同的權(quán)重。由圖2可知。高斯濾波的原理為將圖像上周圍八個點的像素值通過加權(quán)平均的方式計算出像素值,用計算出的像素值去代替該點的像素值。然后去遍歷每一個像素點,依次得到新的像素值[4]。
圖2 坐標(biāo)經(jīng)公式計算后的權(quán)重
將圖像灰度處理,圖像的數(shù)據(jù)量大幅減少,可提高運算速度。將圖像中彩色的RGB三個通道轉(zhuǎn)換為一個通道,即令這三個彩色分量相等,則變成了灰色。轉(zhuǎn)換為一個通道后,且各點都有了0-255的灰度值。
將上文得到的像素值,自定義某一閾值,如果灰度值大于該閾值,則該像素點重置為255,即為黑色;如果灰度值小于該閾值,則重置為0,即為白色。文章采用的是60,如果灰度值大于60,則該像素點重置為黑色;如果灰度值小于60重置為白色。由式(2)可知,其中x為該點的像素值。
(2)
膨脹,將原圖像上的相距較近的物體融合;結(jié)構(gòu)圖像在圖像邊緣進行遍歷,原圖像與結(jié)構(gòu)圖像部分重合時,該部分的黑塊保留;不重合的部分涂黑;得到額外的黑塊。
腐蝕,將原圖像上的相距相近的物體區(qū)分。當(dāng)錨點在圖像上時,原圖像與結(jié)構(gòu)圖像完全重合時,保留該點黑塊;不完全重合的部分,舍去該點黑塊。
采用邊緣檢測,確定好邊緣,對前后背景的差分提供便利,一般有以下步驟。非極大值抑制,查找圖像的強度梯度,獲得像素點的梯度大小和方向。如果是非極大值,則抑制。如果不是,則繼續(xù)遍歷。如此去除不構(gòu)成邊緣的像素。去除多余的像素點,對實時處理能力有一定的增強,也減少了瞬時的存儲量。但有一定的幾率去除真正的邊緣。因為圖像中的邊緣可指向任何方向,所以邊緣檢測可返回水平和垂直方向的導(dǎo)數(shù),便可計算出像素點的梯度大小和方向。由式(3)、(4)可知。
(3)
θ=arctan(Gy/Gx)
(4)
其中G代表梯度強度,θ代表梯度方向。以Sobel算子為例,簡易地實現(xiàn)該過程。在以下的例子中,Sx代表x方向的Sobel算子,用于檢測y方向的邊緣;Sy代表y方向的Sobel算子,用于檢測x方向的邊緣。圖像出現(xiàn)一個3X3的窗口為A,設(shè)要計算中心點e的梯度大小和方向,則應(yīng)該與Sobel算子進行卷積。
經(jīng)過非極大值抑制步驟后,可能會誤將真正的邊緣去除。應(yīng)用磁滯閾值這一步驟則是為了防止誤操作,決定真正的邊緣。首先設(shè)定兩個閾值,最小閾值和最大閾值。強度梯度大于最大閾值的邊緣一定是邊緣,保留。而小于最小閾值的邊緣必定是假邊緣,將其去除。而處于中間值的像素,如果它們與已確定的邊緣像素有接觸,則視為邊緣像素。反之,則視之為非邊緣。從圖3可看出,A邊緣的強度梯度大于最大閾值,認定為邊緣。而處于兩閾值中間的C邊緣,因為與A邊緣有接觸,則也認定為邊緣。但是同處于中間的B點,因未和任意邊緣有接觸,視為非邊緣。此方法的好處是避免中間點誤判為邊緣的情況,確定真正的邊緣。
圖3 雙閾值檢測
通過幀間差分法,差分連續(xù)兩幀獲得運動目標(biāo)區(qū)域。當(dāng)圖像序列中出現(xiàn)運動目標(biāo)時,背景靜止,前景運動,兩幀之間出現(xiàn)較明顯的變化。兩幀做差得到差分圖像,差分圖像再通過設(shè)定的閾值進行判斷,進行圖像二值化,確定圖像序列中有無運動目標(biāo)[5]。通過式(5)可知,第k幀圖像PK(x,y)和第k-1幀圖像PK-1(x,y)相減,得到差分圖像EK(x,y)。
Ek(x,y)=|Pk(x,y)-Pk-1(x,y)|
(5)
然后根據(jù)式(6)對差分圖像EK(x,y)的像素值與給定的閾值比較,對差分圖像二值化。其中T為給定閾值,1代表運動目標(biāo)區(qū)域,0代表背景區(qū)域。
(6)
由式(6)可知,大于T為前景,反之,為背景。
算法采用了OpenCV分類器,將人臉和非人臉進行分類[9]。利用了OpenCV庫提供的基于Haar特征的Adaboost的訓(xùn)練文件,對臉部各個重點部位的進行檢測。
Haar分類器算法有以下步驟:
1)Haar-like特征模板對人臉擬合;
2)利用積分圖對此部位進行計算;
3)通過Adaboost算法對真人臉和假人臉訓(xùn)練,反復(fù)訓(xùn)練出兩極分化的分類器;
4)將一個強分類器視為判定條件,多個強分類器組合,可提高識別率。
Haar-like特征一般分為三類:邊緣特征、線性特征、對角線特征。特征模板內(nèi)有黑白矩形,這兩種矩形模擬人臉膚色的深淺。設(shè)定該模板的特征值為白色矩形像素和與黑色矩形像素和相減。使用的積分圖計算法,比起傳統(tǒng)方法,每遍歷一次,都需要計算矩形的像素值的繁瑣過程,積分圖計算法只需計算一次,減少了重復(fù)計算過程,減輕了程序的負擔(dān),進一步加快了算法識別速度。
該模型采用的結(jié)構(gòu)是樹型結(jié)構(gòu),把每一個分類器當(dāng)作樹的一個分支,當(dāng)檢測個體時,將臉部分為不同的特征,分別計數(shù)。把不同的特征送入不同的分類器,例如特征1送入下一分支檢測判斷,符合標(biāo)準(zhǔn),再將特征2送入下一分支檢測判斷,如果其中有一個特征不符合,則拒絕檢測,判定識別失敗。由圖4可知。
圖4 級聯(lián)分類器
每一個強分類器的構(gòu)成都是通過級聯(lián)的方式,由數(shù)個弱分類器組建的。由圖5可知。而整個Haar分類器則是通過多個強分類器的級聯(lián)組建的。
圖5 強弱分類器關(guān)系圖
由于人類皮膚的色調(diào)和口罩的色調(diào)差異較大,通過HSV中的H(色調(diào))通道提取膚色,再定位到眼部和口部,分別檢測眼部和口部并計算這兩部分在這一范圍的膚色面積,比較大小。如果眼部區(qū)域的膚色面積大于口部的膚色面積,則視為佩戴口罩;反之,則視為未佩戴口罩。
考慮到異物遮擋口部,此時眼部膚色面積依然大于口部膚色面積,導(dǎo)致算法依然識別為佩戴口罩。為避免此誤判,特此加入了霍夫直線檢測,重點檢測口罩帶,如此可大幅減少誤判的幾率。
由圖6可看出,在同一條直線的三個點(X1,Y1)、(p,q)、(X2,Y2)。
圖6 示意圖
在此將極坐標(biāo)作為參數(shù)空間,所以:
(p,q)=(rcosθ,rsinθ)
原直線與x軸的夾角為90+θ,則其斜率為:
(7)
設(shè)直線上的任意一點為(x,y),則斜率為:
(8)
由上面(7-8)兩式可得:r=xcosθ+ysinθ。
同理:r=x1cosθ+y1sinθ,r=x2cosθ+y2sinθ
依上述推導(dǎo)可知,參數(shù)空間采用極坐標(biāo)系,參數(shù)空間的每個點都對應(yīng)了圖像空間的一條直線,這樣就可以在參數(shù)空間表示原始空間的所有直線?;舴蛑本€檢測就是把圖像空間中的直線變換到參數(shù)空間中的點,通過統(tǒng)計特性解決檢測問題。一幅圖像中的像素構(gòu)成一條直線,那么這些像素坐標(biāo)值(x,y)在參數(shù)空間對應(yīng)的曲線一定相交于一個點,只需要將圖像中的所有像素點變換成參數(shù)空間的曲線,并在參數(shù)空間檢測曲線交點可確定直線。由圖7、8可知。
圖7 直角坐標(biāo)示例圖
根據(jù)上述推導(dǎo),將二維三個點轉(zhuǎn)換為以極坐標(biāo)的霍夫空間的曲線。
r1=cosθ
r2=3cosθ+3sinθ
r3=5cosθ+6sinθ
經(jīng)過上述的轉(zhuǎn)換,三個點在霍夫空間的交點如圖8所示。
圖8 霍夫空間轉(zhuǎn)換圖
經(jīng)測試,該算法識別率較高,且識別速度較快,基本做到了無感識別。測試效果對比,由圖9、10可看出。其中No Mask代表未佩戴口罩,Have Mask代表佩戴口罩。
圖9 未佩戴口罩 圖10 佩戴口罩
此外,文章還測試了幀間差分算法對光照和年齡的依賴性。為測試該算法在不同光照環(huán)境的性能,分別選擇中午和傍晚兩個光照條件相差較大的時間段,實驗表明在良好的光照條件下,可達到較高的識別率,識別速度較快。但在昏暗的條件下,識別效果略微下降。由表1所示。
表1 不同光照條件下性能表現(xiàn)
另外挑選不同年齡層的人,測試算法的性能,實驗表明算法對任何人群都適用,識別率和識別速度沒有受到年齡對臉部的影響,依然符合要求。由表2所示。
表2 不同年齡層性能表現(xiàn)
以上實驗,分別測試10次,得到統(tǒng)計結(jié),再計算平均值。綜上可知,幀間差分算法對光照有依賴性,光照好的環(huán)境下,識別率和識別速度較快;算法的識別率和速度不隨著年齡的變化而改變。
文章提出基于幀間差分法的口罩佩戴檢測算法,經(jīng)過一系列預(yù)處理后,減少大量冗余的計算數(shù)據(jù),再利用背景的靜態(tài)不變性差分連續(xù)兩幀提取前景,解決前背景分離難的問題,通過OpenCV提供的基于Haar特征的Adaboost的訓(xùn)練文件,利用決策樹和級聯(lián)器識別出眼部和口部,并根據(jù)色調(diào)差異,提取色調(diào)單一通道,計算區(qū)域內(nèi)處于膚色色調(diào)范圍的面積,輔以霍夫直線檢測加強魯棒性,完成口罩檢測。實驗結(jié)果表明,①幀間差分法分離前景成功率高,Haar特征選取準(zhǔn)確,使得所提方法識別率較高,在光照條件良好下識別率可達100%,識別速度快,僅需0.3s;②經(jīng)高斯降噪、灰度處理后,即使在弱光條件下,主要性能指標(biāo)依舊良好,未出現(xiàn)明顯下降,識別率可達90%,識別速度僅下降0.1s,算法的性能指標(biāo)對年齡無依賴性;③算法設(shè)計不復(fù)雜,計算便捷,適用于微型計算機,適配性和移植性良好;④應(yīng)用場景廣,人流量大的場景尤佳,更具實用價值。