1. 程式人生 > >使用opencv3來訓練自己的人臉分類器

使用opencv3來訓練自己的人臉分類器

2.生成.vec檔案

vec檔案是為樣本訓練所使用的 

開啟cmd 切換到當前的工作目錄下,執行以下命令:

opencv_createsamples.exe -vec pos.vec -info posdata.txt -num 50 -w 20 -h 20

-info,指樣本說明檔案

-vec,樣本描述檔案的名字及路徑

-num,總共有多少張樣本圖

-w -h指明想讓樣本縮放到什麼尺寸。這裡的奧妙在於你不必另外去處理第1步中被矩形框出的圖片的尺寸,因為這個引數幫你統一縮放!(我們這裡準備的樣本都是20*20)

執行結束後,會在當前目錄生成一個pos.vec的檔案。

 

3. 訓練樣本

opencv_traincascade.exe -data xml -vec pos.vec -bg negdata.txt -numPos 45 -numNeg 300 -numStages 15 -w 20 -h 20 -mode ALL

這裡要注意大小寫。

-numStages,層級數

-numPos ,正樣本數

-numNeg ,負樣本數

-fmaxfalsealarm,最大誤檢率的值應該設定在0.4-0.5之間

 

訓練完成後在xml裡面會生成 cascade.xml (這就是我們所需要的分類器),等下拿這個檔案去檢測。

 

3.1 可能會出現的問題

問題一:Train dataset for temp stage can not be filled.Branch training terminated.

Cascade classifier can't be trained.Check the used training parameters.

解決: negdata.txt 檔案不要替換,儲存為以下格式就ok了。

negdata/1.jpg

negdata/10.jpg

negdata/100.jpg

negdata/101.jpg

negdata/102.jpg

問題二:Error :Bad argument (can not get new positive sample).The most possible reason is insufficient count of samples in given vec-file.

解決: 將命令列中的numPos改小一些,即可接著現有的層級訓練(減少50%左右即可)。

 

 

4.檢測效果

 

 

未完待續........