全文鏈接:http:///?p=28031作者:Yuling Zhang我們運用Python 3.8.1版本,爬取網(wǎng)絡(luò)數(shù)據(jù),基于卷積神經(jīng)網(wǎng)絡(luò)(CNN)的圖像處理原理,搭建口罩識別技術(shù)訓(xùn)練集,構(gòu)建人臉識別系統(tǒng),最終建立高校師生行蹤查詢管理系統(tǒng)。 相關(guān)視頻 數(shù)據(jù)來源及環(huán)境準(zhǔn)備通過網(wǎng)絡(luò)搜集,得到3073張不同性別、年齡以及不同場景中的人佩戴口罩的照片,而未佩戴口罩的人臉圖片從中選取了3249張圖片(查看文末了解數(shù)據(jù)獲取方式)。以此作為本次研究的數(shù)據(jù)集,通過對數(shù)據(jù)集進行預(yù)處理,來訓(xùn)練人臉口罩檢測的模型。 圖1 確定人臉及口罩識別整體操作流程 具體流程(1)對數(shù)據(jù)集中的人臉進行檢測和對齊 由于有的照片中臉和口罩的比例比較小,其他部位比如手、肩膀等占據(jù)了很大的空間,這些對于模型來說都是噪音,會增加CPU的計算量并且會干擾模型。所以我們需要對獲取到的照片進行處理,將人臉裁剪出來。我們利用OpenCv和dlib對數(shù)據(jù)集進行了人臉的檢測和對齊,以便后續(xù)對模型進行訓(xùn)練。人臉檢測是指將一張圖片中的人臉圈出來,即找到人臉?biāo)幍奈恢?,人臉對齊則是基于已經(jīng)檢測到的人臉,自動找到臉輪廓和眼睛鼻子嘴等標(biāo)志性特征位置。我們使用dlib對數(shù)據(jù)集進行了人臉68個特征點的檢測,并將人臉進行對齊,最后將每張照片上的人臉數(shù)和對齊的人臉數(shù)打印出來。
圖2 檢測人臉68個特征點 點擊標(biāo)題查閱往期內(nèi)容 PYTHON TENSORFLOW 2二維卷積神經(jīng)網(wǎng)絡(luò)CNN對圖像物體識別混淆矩陣評估|數(shù)據(jù)分享 左右滑動查看更多 01 02 03 04 圖3 人臉數(shù)及對齊人臉數(shù) 因為識別有一定的誤差,所以需要對裁剪后的照片進行篩選,將極少數(shù)對齊不準(zhǔn)確的照片手動刪除,并將數(shù)據(jù)集的照片進行重命名,便于后續(xù)數(shù)據(jù)集路徑的創(chuàng)建。最后得到戴口罩的照片1010張,作為該模型的正樣本,未戴口罩的照片3030張,作為該模型的負樣本,正負樣本的比例為1:3。
圖4 裁剪后的正負樣本集 (2)正負樣本數(shù)據(jù)集灰度處理及像素處理 對數(shù)據(jù)集進行灰度處理可以增強圖像對比度,增大圖片的動態(tài)范圍,讓圖像更清晰,特征更明顯,能夠更好的對模型進行訓(xùn)練。除此之外,還需要將正負樣本各自的照片像素設(shè)為相同的值,正樣本數(shù)據(jù)集的像素最佳設(shè)為20x20,這樣的模型訓(xùn)練精度更高,而負樣本數(shù)據(jù)集像素則應(yīng)不低于50x50,如此可以加快模型訓(xùn)練的速度,此處我們將負樣本的數(shù)據(jù)集像素調(diào)節(jié)為80 x80。最后通過cmd命令分別生成佩戴有口罩和未佩戴口罩的圖片路徑的txt文件。
圖5 灰度、像素處理后的正負樣本 (3) 訓(xùn)練人臉口罩數(shù)據(jù)集模型 訓(xùn)練級聯(lián)分類器時使用的是opencv3.4.1版中的opencv\_createsamples.exe和opencv\_traincascade.exe兩個程序。opencv\_traincascade 支持不僅支持 Haar特征也支持 LBP特征,同時還可以增強其他的特征。在檢測時上述兩種特征的準(zhǔn)確率都依賴于訓(xùn)練時的訓(xùn)練參數(shù)以及訓(xùn)練數(shù)據(jù)的質(zhì)量。此次我們在訓(xùn)練口罩識別模型時提取了Haar特征,其最主要的優(yōu)勢在于它的計算較為迅速??梢杂胦pencv\_createsamples來準(zhǔn)備用于訓(xùn)練的測試數(shù)據(jù)和正樣本數(shù)據(jù), 這些數(shù)據(jù)能夠被opencv_traincascade 程序支持。 在測試時,我們還加入了對人臉鼻子的識別,即當(dāng)識別到人臉時若還識別到鼻子,則顯示為未佩戴口罩,能夠更加有效地對口罩佩戴是否規(guī)范。 圖6 口罩識別系統(tǒng)實踐效果圖 (4)口罩識別訓(xùn)練模型評價 訓(xùn)練集運行結(jié)果如下: ===== TRAINING 4-stage ===== 如圖所示,執(zhí)行該命令時,一些參數(shù)信息被終端首先輸出。然后輸出級聯(lián)分類器中每級強分類器的訓(xùn)練信息,我們設(shè)置的numStages為10,于是一共有10個強分類器:0-stage至9-stage。圖中是第4級強分類器的信息。我們分別分析這些信息如下所示: ===== TRAINING 4-stage =====<BEGIN 表示開始訓(xùn)練第4級強分類器。 【POS count : consumed800: 813】 在訓(xùn)練本級強分類器時,能夠使用的800個正樣本圖像是從813個正樣本圖像集中選取出來的,說明此時沒有被識別出來的正樣本有13個。此時的識別率為98.4%(800/813=0.984). 【NEG count : acceptanceRatio 2600 : 0.00584079】 可用2600個負樣本圖像訓(xùn)練本級強分類器,該數(shù)是opencv_traincascade.exe命令中參數(shù)numNeg指定的數(shù)量,后面的0.00584079表示當(dāng)前級聯(lián)分類器預(yù)測的這些被預(yù)測為正樣本而實際為負樣本的2600幅圖像是從多少個負樣本圖像中得到的。當(dāng)前已得到了4個強分類器:O-stage、1-stage、2-stage、3-stage。當(dāng)即將訓(xùn)練的第5個強分類器4-stage運行結(jié)束后,這5個強分類器構(gòu)成的級聯(lián)分類器的最大錯誤率為:0.25x0.25x0.25x0.25=0.000976,已經(jīng)滿足了要求,無需繼續(xù)訓(xùn)練,系統(tǒng)會停止運行。 【Precalculation time: 25.945】 這表示,在沒有構(gòu)建強分類器之前,我們計算好了一部分特征值,這時預(yù)先計算的特征值所消耗的時間。該值由opencv_traincascade.exe命令中的參數(shù)precalcValBufSize和precalcldxBufSize決定,如果我們在此設(shè)置了更大的內(nèi)存,就能存儲更多特征值,與此同時所花費的時間就越長。 表示此時該級的強分類器已經(jīng)得到,因為識別率和錯誤率都滿足了要求,所以此級強分類器的訓(xùn)練結(jié)束。 【Training until now has taken 0 days 0 hours 39 minutes 53 seconds】 表示到目前為止,訓(xùn)練級聯(lián)分類器共用時39分53秒。此時,就訓(xùn)練得到了我們需要的級聯(lián)分類器數(shù)據(jù),我們利用它就可以識別出人臉。 本項目的主要工作可以概括為以下幾點: 一、基于卷積神經(jīng)網(wǎng)絡(luò)的人臉識別。達到以下效果: 1、從視頻中識別人臉,并實時標(biāo)出面部特征點。2、建cv2攝像頭對象,我們使用電腦自帶攝像頭(若安裝外部攝像頭,則自動切換到外部攝像頭)。3、針對高清視頻的多幀連續(xù)對照識別、對監(jiān)控設(shè)備的視頻數(shù)據(jù)進行解碼,并分離數(shù)據(jù)幀、形成每幀視頻的圖像數(shù)據(jù),從而將人臉識別率呈指數(shù)級大幅提升。4、設(shè)置每幀數(shù)據(jù)延時為1ms,使用人臉檢測器檢測每一幀圖像中的人臉做灰度處理,并輸出人臉數(shù)。5、對每個人臉定位畫出方框,顯示識別結(jié)果。6、添加快捷功能并在識別頁面添加按鍵說明:按下s鍵截圖保存,按下q鍵退出。 二、口罩識別 基于卷積神經(jīng)網(wǎng)絡(luò)的口罩識別。對于檢測到的三類情況:①戴口罩(捂住口鼻)②戴口罩(未捂住口鼻)③未戴口罩做出了no mask ;no mask; have mask的判斷。 三、搭建了師生端疫情防控平臺,實時查詢個人進出校內(nèi)公共場所及進出校內(nèi)外情況。提供了一個核查與監(jiān)督的平臺。 關(guān)于作者在此對Yuling Zhang對本文所作的貢獻表示誠摯感謝,她專長深度學(xué)習(xí)、數(shù)據(jù)采集、回歸預(yù)測。 數(shù)據(jù)獲取 在下面公眾號后臺回復(fù)“口罩數(shù)據(jù)”,可獲取完整數(shù)據(jù)。 點擊文末“閱讀原文” 獲取全文完整資料。 本文選自《Python卷積神經(jīng)網(wǎng)絡(luò)CNN身份識別圖像處理在疫情防控下口罩識別、人臉識別》。 點擊標(biāo)題查閱往期內(nèi)容 |
|
來自: 拓端數(shù)據(jù) > 《待分類》