郭中華 苑俊英 伍馮潔 楊 智 連億東(.中山大學南方學院;.廣州大學實驗中心;.中山大學;4.深圳市廣天川科技有限公司)
基于OpenCV的人臉識別系統的研究
郭中華1,4苑俊英1伍馮潔2楊智3連億東1(1.中山大學南方學院;2.廣州大學實驗中心;3.中山大學;4.深圳市廣天川科技有限公司)
利用人臉的生物特征,對人的身份進行識別,將是未來社區安全管理的一種方式。本文在tiny210平臺上,利用opencv圖像處理庫和QT作為系統界面框架,實現了人臉的識別。其中人臉檢測采用adaboost算法,人臉識別采用pca算法。系統經過測試,人臉識別率較高能夠進行身份識別。
opencv;人臉檢測;人臉識別
人臉識別技術是指根據人臉的面部特征,對人臉進行識別,通過人臉識別技術進行身份識別,是一種方便有效的方式,跟其他身份識別方式相比,具有方便,不宜復制等優點。因此可以廣泛用于門禁識別,安防監控等領域。本文正是基于這種需要,提出了將人臉識別技術應用到小區的安防監控之中。
本文設計的用于智能社區的人臉識別系統主要由人臉圖像采集模塊,人臉預處理模塊,人臉檢測模塊,人臉特征提取與識別模塊組成。其系統結構框圖如圖1所示:

圖1 人臉識別系統結構圖
本系統采用友善之臂的TINY210開發板,其處理器為S5PV210,主頻可達1GHz,內部集成powerVGSGX540高性能圖形引擎,適合圖像處理工作。圖像采集采用USB攝像頭(藍色妖姬),圖像顯示采用7寸LCD電容觸摸屏。在系統開始工作前,需要搭建系統工作環境。環境分為PC機開發環境和開發板環境。
2.1PC機環境
PC機上是在虛擬機vmwareplayer3.0上安裝的ubantu10,并在uabntu10安裝了qt4.7,opencv2.4.9。
2.2開發板環境
系統運行平臺采用友善之臂公司生產的tiny210v2,在其開發板上安裝了linux操作系統,其具體配置為:bootloader為superboot210;內核為linux3.0.8;文件系統為yaffs2,并移植了opencv,qt到開發板。
系統實現的具體流程分為2塊:一塊是在PC機上,一塊是開發板上,具體如下:
PC機上:通過攝像頭采集圖像信息,對所采集的圖像進行預處理,然后進行人臉檢測,將檢測到的人臉進行相應處理得到樣本訓練集,對所得樣本進行訓練,得到特征臉子空間。
開發板上:通過攝像頭采集要識別人的圖像信息,將檢測到的人臉圖片與訓練結果做比較,判斷該人臉是否存在與人臉庫。
3.1人臉圖像信息采集與顯示
為了通過開發板采集到視頻信息,開發板應安裝好相應usb攝像頭驅動程序,以及對攝像頭訪問的應用程序。本系統所安裝的linux內核中已提供了v4l2攝像頭驅動程序,在此只需要編寫對攝像頭的訪問程序即可。通過usb攝像頭所獲取的圖像信息的數據格式為YUV編碼格式,而opencv所支持的圖像信息顏色通道順序為BGR格式,在qt中對圖像操作的類是Qimage,Qimage支持的顏色通道順序是RGB,在opencv中實現顏色通道順序的轉換可使用函數cvCvtColor(const CvArr* src,CvArr* dst, int code)來實現。其人臉圖像采集與顯示具體步驟如下1-2:
1)在opencv中用cvCaptureFromCAM(int index)函數直接打開攝像頭,利用該函數可以直接將usb攝像頭輸出的數據格式轉換成opencv所需的BGR格式。
2)frame = cvQueryFrame(capture);在這里從視頻流中獲取一幀圖像,返回給IplImage指針,opencv中圖像存儲在IplImage。
3)將IplImage中圖像讀到QImage中,采集的圖像最終通過QT繪制的GUI界面顯示在lcd屏上,在此通過opencv提供的函數cvCvtColor(frame,frame,CV_BGR2RGB)實現顏色通道順序轉換,否則不能正常顯示顏色;然后通過QImage類讀取通過opencv獲取的圖像。
4)通過lable顯示圖像,通過QPixmap類可將圖像直接顯示在lable上。
5)連續圖像的顯示,通過定時器不斷刷新界面,即可獲取連續圖像。
3.2人臉預處理
在采集到人臉圖像后,需對圖像進行預處理工作,其目的是為了提高對人臉檢測的效率。具體做法為:
1)利用OpenCV提供的cvCvtColor(const CvArr* src, CvArr* dst, int code) 函數將采集到的彩色人臉圖像轉換成灰度圖,減少了計算量3。。。
2)為進一步減少計算量和方便后續的識別工作,對進行灰度處理過后的人臉圖像進一步縮小,在此利用opencv提供的函數cvResize(const CvArr* src, CvArr* dst,int interpolation CV_DEFAULT(CV_INTER_ LINEAR))完成尺寸縮小的工作。
3.3 人臉檢測
本系統人臉檢測采用目前比較受歡迎的adaboost算法,此算法使用了haar分類器,該分類器主要用到了特征矩形來表征人臉,采用積分圖的方法計算這些特征值,速度得到了提高。
adaboost算法的關鍵點在于Haar級聯人臉分類器的訓練與選擇[6],如何訓練和選擇適合本次設計使用的分類器,由于在本系統用在門禁系統中,因此人臉檢測采用的是opencv自帶的正臉分類器,分別是:haarcascade_frontalface_default.xml;haarcascade_frontalface_alt. xml;haarcascade_frontalface_alt2.xml;haarcascade_frontalface_alt_tree. xml,根據文獻[3]所得結論和筆者做過的大量測試,本系統中采用haarcascade_frontalface_alt2.xml作為此次人臉檢測所使用的分類器,測試結果表明人臉檢測識別率高。
3.4人臉識別
本系統采用人臉識別率相對較高的PCA算法,即主成份分析法,是掌握事物主要矛盾的一種統計方法。由Pentland在上世90年代將PCA方法引入到人臉識別領域[5]。其原理是利用K-L展開式,將高緯向量轉換為低緯向量,得到特征向量子空間,該特征向量子空間即為特征臉空間,當進行人臉識別時,將測試圖像投影到此空間,得到一組投影系數,然后將各個人臉與之比較進行識別。根據文獻資料得知,PCA算法在人臉識別的應用中受光線強弱的影響大,為了解決這一問題,本文在采集樣本和訓練階段對樣本進行了相關的預處理,在下文中有關于這方面的一些敘述。利用該特征臉進行人臉識別主要包括訓練和識別兩個階段。由于PCA算法主要是其主要過程如下。
訓練階段:
1)將人臉檢測得到的面部圖像自動截取并保存,并將人臉圖像與序號關聯起來,保存在一個.txt文檔中。
2)對所收集的人臉樣本進行圖像預處理,文中使用直方圖均衡化得到光照更加均勻的圖像,使用橢圓形掩碼得到背景一致的人臉樣本。
3)利用“loadFacelmgArray()”函數讀取文本文件(人臉樣本文件)的內容,將文本文件中的每一個路徑下的圖片加載到一個圖片數組faceImgArr[]中。
4)使用“cvCalcEigenObjects()”和“cvEigenDecomposite()” 函數對樣本進行PCA算法的訓練。訓練結束后得到:①平均人臉圖片“pAvgTrainlmg”;②包含特征臉圖片的數組“eigenVectArr[]”;③存放每張人臉特征臉比率的特征值矩陣”projectedTrainFaceMat”。如圖2為訓練之后得到的平均人臉,圖3為沒有去除背景的特征人臉,圖4為去除背景的特征人臉。

圖2 平均臉

圖3 沒去背景的特征臉

圖4 去背景的特征臉
5)以上訓練結果使用函數“storeTrainingData()”存放到一個.xml文件中,文件名取為:facedata.xml。
識別階段:
在對樣本進行訓練后,接下來進入識別階段。在這里采用歐式距離進行判斷,將待識別的人臉圖像投影到訓練階段得到的特征臉空間,得到待識別人臉的特征向量,通過計算訓練樣本與待識別人臉樣本之間的距離,來判斷該臉是否存在與人臉庫中。具體做法如下:
1)將待識別人臉投影到特征臉空間,得到一個特征比率。
2)根據歐式距離公式,計算出待識別人臉距離最近的人臉空間。
3)計算待識別人臉樣本與訓練樣本集中的相似度,在這里根據預設定的閥值進行判斷,當大于所設閥值則系統給出所識別人信息,若沒有識別出則提示請登記。
為驗證系統識別效果,現做了如下測試:
1)測試環境:
測試人員數目:4名(并對測試人員進行編號)
訓練樣本:每人取5個樣本,共計20張樣本
2)訓練和測試地點:教室,相同光照情況下
3)測試方法:
訓練樣本中的4個人分別進行20次識別;
4)測試結果:

表1 人臉識別測試效
通過上述系統測試,可發現利用PCA算法進行人臉識別,識別率較高,識別速度較高。但是在光照發生變化時,識別率有所下降。
隨著科學技術的發展,利用人的生物特征作為身份識別是現代人對生活的追求。本文利用人臉的生物特征,利用adaboost算法進行人臉檢測,pca算法進行人臉識別,使用opencv圖像處理庫,qt庫作為系統界面框架,在tiny210開發板上實現了人臉識別技術在智能社區的門禁系統中的應用,該系統有如下創新點:
1)人臉圖像在LCD屏顯示時,采用打開攝像頭獲得攝像頭信息后,直接讀取一幀圖像的方式,解決了圖像在LCD屏顯示卡的問題。
2)采用橢圓形掩碼得到高質量的樣本,提高了人臉識別率。
測試結果表明,在光線情況好的情況識別率較高。該系統具有一定應用價值,但是系統還存在很多不足,比如,光照變化大的情況下,識別率還有待進一步研究。
[1]潘超.基于Linux的人臉識別系統的設計與實現[D].西安:西安電子科技大學,2012:38-39.
[2]徐向前.基于Linux的USB攝像頭的探索使用和編程實現[J].科技創新導報,2009(36):13-14.
[3]陳鵬.基于ARM11的嵌入式人臉識別系統的設計和實現[D].鄭州大學,2013.
[4]郭中華,連億東,伍馮潔 等.基于嵌入式的人臉圖像采集顯示系統的制作[J].電腦與電信,2015(7):32-34.
[5]李明瑞.嵌入式人臉檢測與識別系統的研究與實現[D].長沙理工大學,2012:39-40.
[6]Matthew Turk,Alex Penfland. Eigenfaces for Recognition.Journal of Cognitive Neuroscieace,1991,3(1):71-86.
Research on Face Recognition Technology based on OpenCV
GUO Zhong-hua1,4,YUAN Jun-ying1,Wu Feng-jie2,Yang Zhi3,LIAN Yi-dong1
(1.Nanfang College of Sun Yat-sen University;2.Laboratory Center of Guangzhou University;3.Sun Yat-sen University;4.Shen Zhen GUANGTIANCHUAN Technology COl,LTD.)
Using the biological characteristics of human face,the identification of human identity,will be a way of future community safety management.In this paper,we use the opencv image processing library and QT as the system interface framework to realize the recognition of human faces on the tiny210 platform.Face detection using AdaBoost algorithm, face recognition using PCA algorithm.After the test,the face recognition rate is relatively high.
OpenCV;Face detection;Face Recognition
郭中華(1977—),女,碩士,講師,研究方向:嵌入式技術應用,圖像處理。
廣東省科技計劃項目(2013B090500067)。
苑俊英(1979—),女,碩士,副教授,研究方向:模式識別,數據挖據。