賀鵬遠,楊義濤,羅 媛,鄧 磊,索美霞
近年來,無論是在國內還是在發(fā)達的歐美國家,對人臉識別的研究工作從未停止過,本作品是基于OpenCv 的人臉識別系統(tǒng),人臉識別的優(yōu)勢在于其自然性和不被被測個體察覺的特點。
本文基于調研、分析和研究實現(xiàn)人臉識別功能的原理,思考人臉識別系統(tǒng)可能出現(xiàn)的問題與障礙,對人臉識別系統(tǒng)進行設計,主要步驟可概括為:數(shù)據(jù)收集和預處理、訓練模型、人臉識別3個部分,應用的主要技術為:OpenCv,這是一種用C++語言編寫、主要接口為C++的跨平臺計算機視覺庫。
本系統(tǒng)的創(chuàng)新點可歸納為如下5點:
1)具有非強制性:用戶不需要專門配合人臉采集設備,幾乎可以在無意識的狀態(tài)下就可獲取人臉圖像,這樣的取樣方式?jīng)]有“強制性”;
2)具有非接觸性:用戶不需要和設備直接接觸就能獲取人臉圖像;
3)具有并發(fā)性:在實際應用場景下可以進行多個人臉的分揀、判斷及識別;
4)符合視覺特性:“以貌識人”的特性;
5)還具備操作簡單、結果直觀、隱蔽性好等特點。
本系統(tǒng)的運行流程為:當程序運行時樹莓派將本地照片中的面部圖像發(fā)送至云端服務進行分析,識別出的人臉會給出face_token,用于后續(xù)的人臉比對等操作。觸摸傳感器觸發(fā)主函數(shù)實時拍照并發(fā)送至云服務調用Search API 在Faceset 中找出與目標人臉最相似的一張或多張人臉。將比對結果發(fā)送到樹莓派本地終端,提取返回結果并將其顯示在樹莓派終端。
當觸摸開關被按下LED 閃爍,接著進行一張人臉的采集。并將此照片與已經(jīng)上傳的三張照片做對比。判斷出相似的人臉。當相似度大于70%,則開門(電機正轉開門、停止并發(fā)出警報聲、電機反轉關門)。
本文采用樹莓派人臉識別系統(tǒng),主要硬件包括:樹莓派3B、電源模塊、轉5V 降壓模塊、觸摸感應傳感器模塊、聲光報警模塊和驅動模塊。
硬件各部分的功能概述:
1)主控模塊。在本設計中主要起到集中分配的作用,不僅需要即時采集人臉圖像,調用API處理圖像,同時還要提供攝像頭檢測、驅動芯片、顯示屏等數(shù)字器件的工作信號。具有超強GPU、Adreno505,識別率極高,達99.6%以上。
2)觸發(fā)模塊。系統(tǒng)的輸入部分,實現(xiàn)人機交互。通過接收觸控按鍵的電平信息,使得樹莓派接收到數(shù)據(jù)。
3)檢測模塊。對人臉進行采集攝像的模塊,提供最原始的圖片信息。
4)驅動模塊。開閉的過程控制的控制元件。
本文系統(tǒng)設計分為7個部分,其設計流程如圖1。
圖1 軟件流程圖
人臉識別的最基礎任務是人臉檢測。必須首先捕捉人臉(第1階段)才能在未來與捕捉到的新人臉對比時(第3階段)識別它。最常見的人臉檢測方式是使用Haar 級聯(lián)分類器。使用基于Haar 特征的級聯(lián)分類器的目標檢測是Paul Viola 和Michael Jones 2001年在論文《Rapid Object Detection using a Boosted Cascade of Simple Features》中提出的一種高效目標檢測方法。這種機器學習方法基于大量正面、負面圖像訓練級聯(lián)函數(shù),然后用于檢測其他圖像中的對象。這里,本文將用它進行人臉識別。最初,該算法需要大量正類圖像(人臉圖像)和負類圖像(不帶人臉的圖像)來訓練分類器和從中提取特征。好消息是 OpenCV 具備訓練器和檢測器。如果想要訓練自己的對象分類器,如汽車、飛機等,可以使用 OpenCV 進行創(chuàng)建。
在循環(huán)內部調用攝像頭,并以grayscale 模式加載我們的輸入視頻?,F(xiàn)在,調用分類器函數(shù),向其輸入一些非常重要的參數(shù),如比例因子、鄰近數(shù)和人臉檢測的最小尺寸。
用上述函數(shù)檢測完圖像中的人臉后,對圖像中的人臉進行標記,比如用藍色矩形。除此之外,還可以加入諸如眼睛檢測甚至微笑檢測這樣的檢測器。在那些用例中,只需要把分類器函數(shù)和矩形框內加入原有的面部識別區(qū)域中,因為在區(qū)域外進行識別沒有意義。
注意,在樹莓派上,分類方法(Haar Cascades)會消耗大量算力,所以在同一代碼中使用多個分類器將會顯著減慢處理速度。在臺式機上運行這些算法則非常容易。
創(chuàng)建一個簡單的數(shù)據(jù)集,該數(shù)據(jù)集將儲存每張人臉的 ID 和一組用于人臉檢測的灰度圖。通過運行代碼,可以從每一個ID 捕捉30個樣本,我們能在最后一個條件語句中修改抽取的樣本數(shù),當然也可以通過運行程序,來識別新的用戶或修改已存在用戶的相片。
在第二階段中,需要從數(shù)據(jù)集中抽取所有的用戶數(shù)據(jù),并訓練OpenCV 識別器,這一過程可由特定的OpenCV 函數(shù)直接完成。這一步將在trainer目錄中保存為.yml 文件。
在第三階段中,通過攝像頭捕捉一個新人臉,如果這個人的面孔之前被捕捉和訓練過,識別器將會返回其預測的id 和索引,并展示識別器對于該判斷有多大的信心。
通過第二章節(jié)軟件部分的論述,本系統(tǒng)通過調試樹莓派系統(tǒng)、測試攝像頭、對人臉進行檢測和標記、對數(shù)據(jù)進行收集、訓練,最終能實現(xiàn)識別功能。具體實現(xiàn)功能如下:當程序運行時樹莓派將本地照片中的面部圖像發(fā)送至云端服務進行分析,識別出的人臉會給出face_token,用于后續(xù)的人臉比對等操作。觸摸傳感器觸發(fā)主函數(shù)實時拍照并發(fā)送至云服務調用Search API 在Faceset 中找出與目標人臉最相似的一張或多張人臉。將比對結果發(fā)送到樹莓派本地終端,提取返回結果并將其顯示在樹莓派終端。當觸摸開關被按下LED 閃爍,接著進行一張人臉的采集。并將此照片與已經(jīng)上傳的三張照片做對比。判斷出相似的人臉。當相似度大于70%,則開門(電機正轉開門、停止并發(fā)出警報聲、電機反轉關門)。