基于OpenCV的人臉識別設計方案_第1頁
基于OpenCV的人臉識別設計方案_第2頁
基于OpenCV的人臉識別設計方案_第3頁
基于OpenCV的人臉識別設計方案_第4頁
基于OpenCV的人臉識別設計方案_第5頁
免費預覽已結束,剩余1頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、百度文庫-讓每個人平等地提升自我基于OpenCV的人臉識別設計方案圖(2012/7/12 13:34 )人臉識別的研究可以追溯到上個世紀六、七十年代,經(jīng)過幾十年的曲折發(fā)展已日趨成 熟,構建人臉識別系統(tǒng)需要用到一系列相關技術,包括人臉圖像采集、人臉定位、人臉識 別預處理、身份確認以及身份查找等.而人臉識別在基于內(nèi)容的檢索、數(shù)字視頻處理、視 頻檢測等方面有著重要的應用價值,可廣泛應用于各類監(jiān)控場合,因此具有廣泛的應用前 景。OpenCV是公司支持的開源視覺庫。它輕量級而且高效-由一系列C函數(shù)和少量 C+類構成,實現(xiàn)了圖像處理和計算機視覺方面的很多通用算法,作為一個基本的計算 機視覺、圖像處理和模式

2、識別的開源項目,OpenCV可以直接應用于很多領域,其中就包 括很多可以應用于人臉識別的算法實現(xiàn),是作為第二次開發(fā)的理想工具。1系統(tǒng)組成本文的人臉識別系統(tǒng)在Linux操作系統(tǒng)下利用QT庫來開發(fā)圖形界而,以OpenCV圖 像處理庫為基礎,利用庫中提供的相關功能函數(shù)進行各種處理:通過相機對圖像數(shù)據(jù)進行 采集,人臉檢測主要是調(diào)用已訓練好的Haar分類器來對采集的圖像進行模式匹配,檢測 結果利用PCA算法可進行人臉圖像訓練與身份識別,而人臉表情識別則利用了 Camshift 跟蹤算法和Lucas-Kanade光流算法。2搭建開發(fā)環(huán)境采用德國Basler acA640-100gc相機,PC機上的操作系統(tǒng)

3、是Fedora 10,并安裝編 譯器,QT和軟件工具包,為了處理視頻,編譯OpenCV前需編譯FFmpeg,而FFmpeg 還依賴于Xvid庫和X264庫。3應用系統(tǒng)開發(fā)程序主要流程如圖1所示。圖1程序流程(visio)圖像采集圖像采集模塊可以通過cvCaptureFromAVI ()從本地保存的圖像文件或 c vCa pt u re From Ca m ()從相機得到圖像,cvSetCaptureProperty ()可以對返 回的結構進行設置:Ipllmage *frame;CvCapture* cAMEra = 0;camera = cvCaptureFromCAM ( 0 ):cvSe

4、tCaptureProperty (camera,CV CAP PROP FRAME WIDTH, 320 );cvSetCaptureProperty (camera,CV CAP PROP FRAME HEIGHT, 240 );然后利用start ()函數(shù)開啟QTimer定時器,每隔一段時間發(fā)送信號調(diào)用自定義的 槽函數(shù),該槽函數(shù)用cvGmbFrame ()從視頻流中抓取一幀圖像放入緩存,再利用 CvRetrieveFrame ()從內(nèi)部緩存中將幀圖像讀出用于接下來的處理與顯示。在qt中顯 示之前,需將Ipllmage* source轉換為QPixmap類型。uchar *qImageBu

5、ffer = NULL;/*根據(jù)圖像大小分配緩沖區(qū)*/qlmageBuffer = (uchar*) malloc (source->width *source->height * 4 * sizeof (uchar):/*將緩沖區(qū)指針拷貝到存取Qimage的指針中*/uchar *QImagePtr = qlmageBuffer;/*獲取源圖像內(nèi)存指針*/Const uchar*iplImagePtr=reinterpret_cast (source->imageData):/*通過循環(huán)將源圖像數(shù)據(jù)拷貝入緩沖區(qū)內(nèi)*/for (int y = 0; y < source

6、->height; +y) for (int x = 0; x < source->width; +x) QImagePtr0 = iplImagePtr0;QImagePtrl = iplImagePtrl;QImagePtr2 = iplImagePtr2;QImagePtr3 = 0;QlmagePtr += 4;iplImagePtr += 3; iplImagePtr+=source->widthStep-3*source->width; /*將 Qimage 轉換為 Qpixmap*/QPixmap local =QPixmap:fromlmage (

7、Qimage (qImageBuffer,source->width,source->height, Qimage:Format_RGB32);/*釋放緩沖區(qū)*/free (qlmageBuffer):最后利用QLabel的setPixmap ()函數(shù)進行顯示.圖像預處理3百度文庫-讓每個人平等地提升白我由于大部分的臉部檢測算法對光照,臉部大小,位置表情等非常敏感,當檢測到臉部 后需利用cvCvtcolor ()轉化為灰度圖像,利用cvEqualizeHist ()進行直方圖歸一化 處理。臉部檢測方法OpenCV采用一種叫做Haar cascade classifier的人臉檢測器

8、,他利用保存在XML 文件中的數(shù)據(jù)來確定每一個局部搜索圖像的位置,先用“Load ()從文件中加載 CvHaarClassifierCascade 變量,然后利用 cvHaarDetectObjects ()來進行檢測, 函數(shù)使用針對某目標物體訓練的級聯(lián)分類器在圖像中找到包含目標物體的矩形區(qū)域,并且 將這些區(qū)域作為一序列的矩形框返回,最終檢測結果保存在cvRect變量中。臉部識別方法識別步驟及所需函數(shù)如圖2所示。圖2識別步驟(visio)PCA方法(即特征臉方法)是和在文獻中提出的,該方法的基本思想是將圖像向量經(jīng) 過K-L變換后由高維向量轉換為低維向量,并形成低維線性向量空間,即特征子空間,然

9、 后將人臉投影到該低維空間,用所得到的投影系數(shù)作為識別的特征向量。識別人臉時,只 需將待識別樣本的投影系數(shù)與數(shù)據(jù)庫中目標樣本集的投影系數(shù)進行比對,以確定與哪一類 最近。PCA算法分為兩步:核心臉數(shù)據(jù)庫生成階段,即訓練階段以及識別階段。訓練階段主要需要經(jīng)過如下的幾步:(1)需要一個訓練人臉照片集。(2)在訓練人臉照片集上計算特征臉,即計算特征值,保存最大特征值所對應的的 M張圖片。這M張圖片定義了”特征臉空間”(原空間的一個子空間)。當有新的人臉添 加進來時,這個特征臉可以進行更新和重新計算得到。(3)在“特征臉空間”上,將要識別的各個個體圖片投影到各個軸(特征臉)上,計 算得到一個M維的權重向

10、量。簡單而言,就是計算得到各個個體所對應于M維權重空間 的坐標值。OpenCV實現(xiàn)為:cvLoadlmage ()載入圖片并利用cvCvtcolor ()轉換為灰 度圖片,建立自定義的迭代標準CvTermCriter調(diào)用cvCalcEigenObjects ()進行 PCA操作,計算出的曰genface都存放在向量組成的數(shù)組中,利用cvEigenDecomposite ()將每一個訓練圖片投影在PCA子空間(eigenspace)上,結 果保存在矩陣數(shù)組中,用“Write將訓練結果保存至XML文件中。下面圖3為訓練得到 的部分特征臉圖像。身份識別階段在識別新的人臉圖片時,具體的操作方法流程如下

11、:(1)基于前面得到的M個特征臉,將新采集的圖片投影到各個特征臉,計算得到一 個權重集合(權重向量)。(2)判斷新圖片是否是一幅人臉圖像,即通過判斷圖像是否足夠靠近人臉空間。(3)如果是人臉圖像,則根據(jù)前而計算的權重集合(權重向量),利用權重模式將 這個人臉分類劃歸到初始時計算得到的各個個體或者是成為一個新的個體照片。簡單而 言,就是計算新權重到原來各個個體權重的距離,選擇最近的,認為是識別成這個個體: 如果最近的距離超出閾值,則認為是一個新的個體。(4)更新特征臉或者是權重模式。(5)如果一個未知的人臉,出現(xiàn)了很多次,也就意味著,對這個人臉沒有記錄,那 么計算它的特征權重(向量),然后將其添

12、加到已知人臉中6.OpenCV實現(xiàn)調(diào)用cvRead加載訓練結果XML文件,調(diào)cvEigenDecomposite () 將采集圖片映射至PCA子空間,利用最近距離匹配方法SquaredEuclidean Distance, 計算要識別圖片同每一個訓練結果的距離,找出距離最近的即可。臉部表情識別臉部運動跟蹤利用了 Camshift算法,該算法利用目標的顏色直方圖模型將圖像轉換 為顏色概率分布圖,初始化一個搜索窗的大小和位置,并根據(jù)上一幀得到的結果自適應調(diào) 整搜索窗口的位置和大小,從而定位出當前圖像中目標的中心位置。Camshift能有效解決目標變形和遮擋的問題,對系統(tǒng)資源要求不高,時間復雜度低,

13、 在簡單背景下能夠取得良好的跟蹤效果。Camshift的OpenCV實現(xiàn)分以下幾步:(1)調(diào)用cvCvtColor ()將色彩空間轉化到HSI空間,調(diào)用cvSplit ()獲得其中 的H分量。(2)調(diào)用cvCreateHist ()計算H分量的直方圖,即1D直方圖。(3)調(diào)用 cvCalcBackProject ()計算 Back Projection.(4)調(diào)用cvCamShift ()輸出新的Search Window的位置和面積。我們利用光流算法評估了兩幀圖像的之間的變化,Lucas-Kanade光流算法是一種兩 幀差分的光流估計算法。它計算兩幀在時間t到t+bt之間每個每個像素點位置的

14、。是基 于圖像信號的泰勒級數(shù),就是對于空間和時間坐標使用偏導數(shù)。首先要用到shi-Tomasi算法,該算法主要用于提取特征點,即圖中哪些是我們感興 趣需要跟蹤的點,對應函數(shù)為cvGoodFeaturesToTrack (),可以自定義第一幀特征點 的數(shù)目,函數(shù)將輸出所找到特征值。接下來是cvCalcOptica舊owPyrLK函數(shù),實現(xiàn)了 金字塔中Lucas-Kanade光流計算的稀疏迭代版本。它根據(jù)給出的前一幀特征點坐標計 算當前視頻幀上的特征點坐標。輸入?yún)?shù)包括跟蹤圖像的前一幀和當前幀,以及上面函數(shù) 輸出的前一幀圖像特征值,自定義的迭代標準,輸出所找到的當前幀的特征值點。這些點 可以確定面部局部區(qū)域的特征如眼部,鼻子高度與寬度,嘴部兩側與底部的夾角等等,利 用與前一幀的

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論