基於AdaBoost的人臉檢測


人臉檢測和人臉識別都是屬於典型的機器學習的方法,但是他們使用的方法卻相差很大。

對於人臉檢測而言,目前最有效的方法仍然是基於Adaboost的方法。在網上可以找到很多關於Adaboost方法的資料,但基本上是千篇一律,沒有任何新意。給初學者帶了很多不便。建議初學者只需要認真閱讀:北京大學 趙楠 的本科畢業論文 :基於 AdaBoost算法的人臉檢測 這篇畢業論文就夠了。作者詳細分析了Adaboost算法在人臉檢測中的具體執行過程,尤其是關於弱分類器的Haar特征選取過程,描述的相當清晰。

 

至於人臉檢測的代碼,網上基本上是關於如何用openCV去做人臉檢測的代碼。如果不需要對性能做更高的要求的話,直接用openCV就可以了。

根據對openCV代碼的理解,我重新提取了openCV人臉檢測的代碼,采用純C語言實現了人臉檢測,與openCV的代碼項目相比,有一下幾點不同:

1. 使用內存少。

    1.1 原始openCV在檢測初始化的時候分配一個很大的buffer,在人臉檢測當中使用這個buffer,這個是由openCV的內存管理機制決定的。但在很多時候,圖像大小一般都沒有想象的那么大,這個大buffer只使用了其中的一小部分,內存空閑很大。在我的人臉檢測中,根據圖像大小分配2張圖片大小內存,分別存放積分圖和平方積分圖。其它的內存是結構體占用的內存,一般比較小。

   1.2 原始openCv分類器文件是XML文本文件,而在我的人臉檢測之中是二進制文件。所以分類器文件比openCV小至少5倍以上。

2.   運行效率高

      刪除了Canny邊緣檢測的代碼,針對具體的應用重新修改了算法執行中的部分參數。由於分類器是基於openCv改的,所以對人臉檢測的准確率沒有任何下降。

目前算法的代碼雖然是純C語言,但還沒有做定點優化。目前的性能在iPod4上面,對於640x480的圖片,檢測單張人臉的時間是60ms左右。

如果對adaBoost算法本身感興趣,除了可以閱讀openCv中的代碼之外,還有一個官方的代碼,實現了各種AdaBoost算法。

 

部分人臉檢測圖片的結果如下:

 

 

另外一張圖片:

 

測試圖片來自網絡,如涉及到版權問題,請告知!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM