網上能夠找到關于OpenCV人臉檢測的例子也比較多,大多也都是基于這個例程來更改,隻是多數使用的是OpenCV 1.0的版本,而OpenCV2.0以後由于子產品結構的更改,很多人并沒有将例程運作起來。如果是新版的OpenCV跑舊的例程,編譯運作出錯的話,需要確定:
#include "opencv2/objdetect/objdetect.hpp" 頭檔案被引用,老的頭檔案包含可能會提示找不到定義
libopencv_objdetect243.dll.a 庫需要加傳入連結接
之前找了幾個例程,不盡如人意,于是決定還是改自帶的例程更靠譜,更多的資訊,已經在程式中添加注釋,參見程式吧。
pro檔案的工程配置,具體路徑按照安裝路徑更改,Linux下也一樣。
下面整理下人臉檢測的相關知識。
人臉檢測從整體來看分為四個部分:
1、Face detection 人臉識别,即識别出這是人的臉,而不管他是誰的。
2、Face preprocessing 面部預處理,即提取出臉部圖像。
3、Collect and learn faces 臉部的特征采集和學習
4、Face recognition 臉部識别,找出最相近的相近臉部圖像。
“基于知識的方法主要利用先驗知識将人臉看作器官特征的組合,根據眼睛、眉毛、嘴巴、鼻子等器官的特征以及互相之間的幾何位置關系來檢測人臉。基于統計的方法則将人臉看作一個整體的模式——二維像素矩陣,從統計的觀點通過大量人臉圖像樣本構造人臉模式空間,根據相似度量來判斷人臉是否存在。在這兩種架構之下,發展了許多方法。目前随着各種方法的不斷提出和應用條件的變化,将知識模型與統計模型相結合的綜合系統将成為未來的研究趨勢。”(來自論文《基于Adaboost的人臉檢測方法及眼睛定位算法研究》)
人臉檢測算法的可靠性很大程度上依賴于分類器的設計,在2001年,Viola和Jones兩位大牛發表了經典的《Rapid Object Detection using a Boosted Cascade of Simple Features》【1】和《Robust Real-Time Face Detection》【2】,在AdaBoost算法的基礎上,使用Haar-like小波特征和積分圖方法進行人臉檢測,他倆不是最早使用提出小波特征的,但是他們設計了針對人臉檢測更有效的特征,并對AdaBoost訓練出的強分類器進行級聯。這可以說是人臉檢測史上裡程碑式的一筆了,也是以當時提出的這個算法被稱為Viola-Jones檢測器。又過了一段時間,Rainer Lienhart和Jochen Maydt兩位大牛将這個檢測器進行了擴充【3】,最終形成了OpenCV現在的Haar分類器。在OpenCV2.0中又擴充了基于LBP特征的人臉檢測器,某些情況下LBP特征比Haar來的更為快速。
在進行識别時首先通過大量的具有比較明顯的haar特征(矩形)的物體圖像用模式識别的方法訓練出分類器,分類器是個級聯的,每級都以大概相同的識别率保留進入下一級的具有物體特征的候選物體,而每一級的子分類器則由許多haar特征構成(由積分圖像計算得到,并儲存下位置),有水準的、豎直的、傾斜的,并且每個特征帶一個門檻值和兩個分支值,每級子分類器帶一個總的門檻值。識别物體的時候,同樣計算積分圖像為後面計算haar特征做準備,然後采用與訓練的時候有物體的視窗同樣大小的視窗周遊整幅圖像,以後逐漸放大視窗,同樣做周遊搜尋物體;每當視窗移動到一個位置,即計算該視窗内的haar特征,權重後與分類器中haar特征的門檻值比較進而選擇左或者右分支值,累加一個級的分支值與相應級的門檻值比較,大于該門檻值才可以通過進入下一輪篩選。當通過分類器所有級的時候說明這個物體以大機率被識别。
如果單純是對功能進行實作,有了官方自帶的例程做參考,移植實作并不是很難,幾乎不用費太大的功夫,自帶例程對照着OpenCV參考手冊還是比較好了解,這部分例程已經成功在Linux(Ubuntu和嵌入式Linux)以及Windows下實作,後面實驗室基于Qt設計的實驗軟體,也整合了進去。
程式參考本文後面給出的參考程式,當然最權威的還是軟體自帶例程,實作人臉檢測的另外一個關鍵就是訓練檔案,基于Haar和LBP特征的人臉檢測可以自動的對大量資料圖檔進行訓練,訓練結果存儲在XML檔案中以供使用,這些級聯分類器一般需要訓練上千幅人臉圖檔和上萬幅非人臉圖檔,這些訓練過程往往需要很長的時間(LBP特征需要幾個小時,Harr特征可能甚至需要一個星期)不過OpenCV已經提供了不同種類的訓練好的檔案,是以我們可以友善的通過載入這些訓練好的級聯分類器XML檔案來實作人臉、眼睛、鼻子等檢測。
OpenCV的訓練檔案在源碼目錄的data檔案夾下,裡面包含haarcascades、hogcascades、lbpcascades,在haarcascades檔案下包含大量的針對不同目标的訓練檔案,如下圖所示:

檔案名已經展現了檔案的功能,是以隻需要載入對應的檔案即可。
到這裡還隻是進行了一個非常初步的研究,下一步的學習和識别還需要多多積累。
根據自帶例程,将人臉檢測算法加入我所做的實驗軟體中,分别選擇不同的分類器進行實驗,下圖為實驗結果。
人臉檢測實驗
實作特定的器官檢測右眼、鼻子等檢測
主程式,具體地方都已經注釋。這裡是打開攝像頭讀取資料,同樣可以自己打開圖檔。
本文轉自emouse部落格園部落格,原文連結:http://www.cnblogs.com/emouse/archive/2013/04/23/3037234.html,如需轉載請自行聯系原作者