王增喜 張慶余 張蘇林 賈 通 邵寧華
(中汽數據有限公司,天津300304)
人臉識別在當今社會已經被廣泛應用,是一項高速發展與被研究的模式識別與圖像處理領域的技術。其廣義上指針對某一項人體生物特征提取和識別的技術,其目的在于區分不同生物身份或個體模式。目前廣義的人臉識別技術是指人臉識別系統構建所需要的一系列技術,包括人臉的圖像信息采集技術、人臉圖像定位技術和人臉識別信息處理技術等。本文采用單目攝像頭,基本ROS 平臺的集成計算機視覺庫OpenCV 實現人臉識別;人臉定位的步驟包括視頻數據實時獲取、人臉定位、人臉校驗、人臉輸出等[1-3]。
實驗的平臺為Ubuntu 14.04 系統下的ROS 操作系統,采用的版本為Indigo 版,其中集成了計算機視覺庫OpenCV 2.0,進行人臉定位與性別識別均需要調用OpenCV 庫,而且ROS 的該版本已完成了OpenCV 的配置。
利用ROS 進行人臉定位的首要任務是USB 攝像頭連接以及圖像顯示,然后通過C++程序訂閱image_raw主題實時獲取視頻圖像數據,逐幀進行處理,調用OpenCV 庫進行人臉定位。如圖1 所示為基于ROS 的人臉定位流程圖。

圖1 基于ROS 的人臉定位流程圖
人臉定位的步驟包括,視頻數據實時獲取、人臉定位、人臉校驗、人臉輸出。實際操作為運行log_haar_person_detection.launch。具體流程如圖2 所示:

圖2 人臉定位的流程
由以上可知usb_cam 發布了/usb_cam/image_raw 主題,只需訂閱該主題,即可實現視頻數據實時獲取。詳細方法請參看hog_haar_person_detection.cpp 文件。
本實驗采用的是基于Haar-like 特征的Adaboost 人臉識別,Adaboost 為一種分類器,需先經過大樣本長時間的特征提取以及訓練得到特征文件.xml 文件,然后對待檢測的圖像進行多尺度的檢測,包括特征提取與分類。最后得到被判定為人臉的區域。本實驗未經過訓練過程,而是采用OpenCV 已經訓練好的識別率較高的haarcascade_frontalface_alt2.xml 文件。只需利用該特征進行檢測即可。
3.2.1 Haar-like 特征提取與計算
對于一幅灰度圖像,Haar-like 特征利用白色和黑色矩形組合成特征模板,每一種特征都是黑色矩形內的像素值之和與白色矩形內的像素值之和的差值,而計算出來的這個差值就是提取到的Haar-like 特征的特征值。Haar-like 特征值反映的是圖像的灰度變化,但一般對線段、邊緣較為敏感[4-6]。
為了加快特征計算,Viola 和Jones 引入了積分圖。
3.2.2 Adaboost 分類器介紹
AdaBoost 是一種強學習算法,利用了迭代方法,核心思想是根據同一個訓練集訓練不同的弱分類器,一個弱分類器對應一個特征,將所有的弱分類器集合起來組成一個更強的分類器。算法是通過改變數據的分布實現的,算法統計每次訓練結束后每個樣本的分類的準確情況以及上次分類的總體分類的準確率,從而更新樣本的權重。將更新完權重的新的數據傳送至下一層分類器進行訓練,最后將訓練得到的所有分類器融合起來,作為最終的決策分類器。
簡單來說,AdaBoost 分類器通過最后的多個弱分類器來投票決定最終的分類結果,但每個弱分類器所占的權重不同。算法中包含權重的更新過程,如果一個訓練樣本在前一層分類器中被誤分,那么它的權重在下一層分類器中會被加重,同時,被正確分類的樣本的權重會降低,其目的是使下一層分類器會更重視被誤分的樣本,從而隨著新的分類器的不斷增加,誤識別率會隨之下降。AdaBoost 強分類器的訓練過程示意圖,輸入訓練樣本,通過k 次迭代生成k 個弱分類器,k 個弱分類器組合成一個強分類器。每個弱分類器對應一維特征,一個強分類器即對應多維級聯的特征。
3.2.3 人臉檢測
在檢測的最初,檢測窗口和樣本大小(20*20)一致,然后按照一定的尺度參數(即每次移動的像素個數,向左然后向下)進行移動,遍歷整個圖像,標出可能的人臉區域。遍歷完以后按照指定的放大的倍數參數放大檢測窗口,然后在進行一次圖像遍歷;這樣不停的放大檢測窗口對檢測圖像進行遍歷,直到檢測窗口超過原圖像的一半以后停止遍歷。在檢測窗口遍歷完一次圖像后,處理重疊的檢測到的人臉區域,進行合并等操作。
為了降低誤檢概率,得到更精確的檢測結果,需要對檢測結果進行校驗。本方法首先進行膚色校驗。如果存在一個誤檢區域,該種情況可以通過膚色校驗進行去除。
將利用Adaboost 檢測的人臉區域提取感興趣區域,獲得人臉圖像,對人臉圖像進行膚色檢測。首先統計人臉圖像內的像素點總數M,將人臉圖像由RGB 顏色空間轉到YCrCb 顏色空間,然后獲取Cr 與Cb 顏色通道的值,使得(Cb >77 and Cb <127) 且(Cr >133 and Cr <173),統計符合上述范圍的像素點的個數m,利用m/M 計算膚色占整個檢測區域的比例,若比例大于0.4,則進行下一步判斷,否則認為該區域為非人臉,進行去除。
完成膚色校驗后,可能仍然存在誤檢情況,圖中包括正確檢測的人臉,但還有一個膚色檢測后未去除的膚色非人臉區域,因此人眼校驗的目的是去除近膚色的誤檢區域。
人眼校驗原理類似于人臉定位,也是首先提取Haar-like 特征,利用Adaboost 分類器進行識別,利用OpenCV 提供的haarcascade_mcs_lefteye.xml 文件進行識別。根據人臉區域劃分圖,確定人眼的檢測范圍。
在陰影范圍內根據人臉定位的方法完成人眼定位,若該區域內檢測到人眼,則該區域對應的人臉區域為真人臉,否則,該人臉區域為誤檢。
本方法將兩次人臉校驗后得到的人臉確定為真人臉,并將其輸出,利用矩形框進行框定,并顯示在視頻中,完成人臉的定位。
在人工智能、智慧城市等領域的身份認證過程中人臉識別發揮著非常重要的作用。因此,目前社會對人臉識別技術的要求在不斷提高。為了加快社會的發展步伐,論文主要針對人臉檢測和識別技術的算法和程序流程進行研究。首先利用ROS 進行人臉定位的首要任務是USB 攝像頭連接以及圖像顯示,然后通過C++程序訂閱image_raw 主題實時獲取視頻圖像數據,逐幀進行處理,調用OpenCV 庫進行人臉定位;通過視頻數據實時獲取、人臉定位、人臉校驗、人臉輸出;最后通過膚色校驗、人眼校驗和人臉標定實現人臉識別。通過實驗驗證該算法研究人臉識別率高,識別準確性高。