摘 要:本論文以O(shè)penCV圖像處理庫為基礎(chǔ),采用QT作為圖形界面開發(fā),具有人臉采集,圖片訓(xùn)練,數(shù)據(jù)庫管理及人臉識別等功能,并且使用光線補(bǔ)償?shù)确绞教岣咦R別率。
關(guān)鍵詞:OpenCV QT 人臉檢測 人臉識別
中圖分類號:TP31 文獻(xiàn)標(biāo)識碼:A 文章編號:1672-3791(2013)07(b)-0004-02
近年來計算機(jī)視覺技術(shù)在視覺領(lǐng)域中取得了飛速的發(fā)展,并在其他領(lǐng)域中得到了廣泛的應(yīng)用,人臉識別在圖像處理與視頻檢索、視頻監(jiān)控、視頻顯示等方面占據(jù)著重要的位置。本文提出了基于OpenCV圖像處理庫的人臉檢測與識別系統(tǒng),通過分析人臉檢測與識別的原理及方法設(shè)計了人臉檢測與識別系統(tǒng),該系統(tǒng)具有人臉采集,圖片訓(xùn)練,數(shù)據(jù)庫管理及人臉識別等功能,并且使用了光線補(bǔ)償?shù)确绞礁玫倪M(jìn)行圖像的處理和后期的識別。
1 系統(tǒng)的運(yùn)行流程圖
該人臉檢測與識別系統(tǒng)的處理流程如圖1。
2 系統(tǒng)詳細(xì)設(shè)計及實(shí)現(xiàn)
2.1 人臉定位模塊
基于OpenCV的人臉檢測中,先進(jìn)行圖像的采集,然后建立自適應(yīng)模型并將該模型進(jìn)行訓(xùn)練,使用XML文件保存該訓(xùn)練模型數(shù)據(jù),有了這個模型后我們就可以從新使用新的模型來進(jìn)行圖片的對比,把當(dāng)前的圖片與該模型進(jìn)行匹配得出的結(jié)果使用矩形進(jìn)行標(biāo)記,并在QT界面上畫出該目標(biāo)區(qū)域。
2.2 人臉識別模塊
人臉識別的流程為,從攝像頭采集圖片后對圖片進(jìn)行灰度化處理,分配PCA存儲空間,再使用級聯(lián)分類檢測器對圖片進(jìn)行特征提取訓(xùn)練。提取出采集的人臉圖片的特征,保存數(shù)據(jù)到facedata.xml文件。人臉識別的具體實(shí)現(xiàn)步驟和函數(shù)如下。
(1)得到一個32位的浮動圖像。
IplImage* convertFloatImage ToUcharImage(const IplImage *srcImg)
(2)保存源圖片的所有特征向量。
void FaceRec::storeEigenfaceImages()
(3)下載需要訓(xùn)練的數(shù)據(jù),并將訓(xùn)練好的數(shù)據(jù)保存到xml文件中。
void FaceRec::learn()
{ szFileTrain = "40.txt"; //訓(xùn)練數(shù)據(jù)的路徑
doPCA(); //為人臉訓(xùn)練分配PCA空間
storeTrainingData(); //將訓(xùn)練好的數(shù)據(jù)保存到xml文件中
if (SAVE_EIGENFACE_IMAGES)
{storeEigenfaceImages(); //保存這些訓(xùn)練圖片為一張位圖 }
(4)從攝像頭中獲取一幀圖片。
int FaceRec::recFromFrame(IplImage *faceImage)
(5)從facedata.xml下載訓(xùn)練好的數(shù)據(jù)。
int FaceRec::loadTrainingData(CvMat ** pTrainPersonNumMat)
(6)為圖片分配PCA空間。
void FaceRec::doPCA()
2.3 光線補(bǔ)償?shù)哪K
從攝像頭對圖像進(jìn)行采集會受到設(shè)備的干擾及環(huán)境因素的影響,從而會使圖像的色彩向某個固定的方向移動,例如色彩偏黃、變藍(lán)、變黑等。系統(tǒng)為了消除圖像的色彩偏差,需要對圖像的RGB三個分量值進(jìn)行線性調(diào)整。使用檢測圖像中亮度在前10%的像素(參考白),按公式計算出調(diào)整值。整幅圖像的其他像素點(diǎn)的色彩值也都按這一調(diào)整尺度進(jìn)行交換,通過這種技術(shù)可以更好的進(jìn)行圖像的處理和后期的識別。
在QT下通過增加菜單欄,在其頂部添加一子目錄,將命名為“預(yù)處理”,并在其下方的屬性欄中命名為“彈出”菜單,右擊預(yù)處理則該選項會自動生成一個子菜單項,屬性名為“光線補(bǔ)償”,并在右下面的屬性中把ID號設(shè)置為ID_READY_LIG HTERGTHNSATE,對應(yīng)文件FaceDetect.Cpp中的函數(shù)recognize()實(shí)現(xiàn),并在recFromFrame(IplImage *faceImage)中添加如下代碼:
hDIBTempp = gDib.CopyHandle(hDIB);
gDib.LightingComper(hDIB);
GlobalUnlock(hDIB);
Invalidate();
光線補(bǔ)償通過對圖像的RGB進(jìn)行轉(zhuǎn)換而使圖片的光線變亮或變暗,函數(shù)LightingComper()是類facerecognize的一個目標(biāo)函數(shù)。
2.4 測試
3 結(jié)語
基于OpenCV圖像處理庫的人臉檢測與識別具有人臉采集,圖片訓(xùn)練,數(shù)據(jù)庫管理及人臉識別等功能,系統(tǒng)采用Linux作為開發(fā)工具,利用QT作為圖形界面開發(fā),使用面向?qū)ο蟮乃枷雭砭帉憟D像處理模塊,并把該模塊的各個功能進(jìn)行獨(dú)立出來,建立各個獨(dú)立的類,從而減少了程序之間的耦合性,增加了代碼的可重用性和可移植性,系統(tǒng)運(yùn)行流暢,有廣泛的使用前景。
參考文獻(xiàn)
[1] 張惠發(fā).人臉識別的關(guān)鍵問題研究[D].吉林大學(xué),2012.
[2]李友坤.BP神經(jīng)網(wǎng)絡(luò)的研究分析及改進(jìn)應(yīng)用[D].安徽理工大學(xué),2012.
[3]褚勤.基于小波分析和支持向量機(jī)的人臉識別方法研究[D].華南理工大學(xué), 2012.
[4]廖文軍.基于連續(xù)Adaboost算法的多角度人臉檢測技術(shù)研究與實(shí)現(xiàn)[D].南京郵電大學(xué),2012.
[5]趙曉輝.基于改進(jìn)的分塊LBP人臉識別算法研究[D].昆明理工大學(xué),2012.