使用opencv2.2.0的Haar算法訓練人臉xml文檔

1、在D盤或者其他盤根目錄下新建一個文件夾,我新建的文件夾取名爲“test”,在test中新建兩個子文件夾分別爲neg和pos,neg中存放不含人臉的負樣本圖片,pos中存放正樣本。(我只是做實驗,所以正負樣本數量都選的較少,負樣本10個,正樣本5個,這裏樣本數量越多,訓練時間越久!但是分類器效果更好)


2、分別生成neg.dat文檔和pos.dat文檔。

cmd進入DOS命令界面。輸入d: 回車,輸入cd  test\neg 回車,進入neg目錄,輸入  dir /b > neg.dat


test\neg目錄中最後一行可以看到neg.dat文檔,使用記事本打開,將文檔最後一行的neg.dat刪除,保存文檔。

同樣的方法生成pos.dat文檔:cmd進入DOS命令界面。輸入如下圖:

test\pos目錄中最後一行可以看到pos.dat文檔,使用記事本打開

(1)將文檔最後一行的neg.dat刪除;

(2)使用記事本的編輯-替換功能,將文檔全選,把jpg換成jpg 1 0 0 36 36

說明:1代表此圖片出現的目標個數 後面的 0 0 36 36代表目標矩形框(0,0)到(36,36),可以根據自身需要調整數值。


3、生成pos.vec文件

(1)在opencv2.2.0安裝文件夾(即解壓文件夾)中的bin文件夾中,找到opencv_createsamples.exe和opencv_haartraining.exe這兩個程序,複製到D:\test目錄下。(因爲我的opencv2.2.0和vs2008配置在一起了,所以我的這兩個程序在D:\OpenCV-2.2.0\vs2008\bin目錄下找到,程序的命名最後多了一個字母d,複製過去後如下圖:)


(2)cmd進入DOS命令界面。輸入如下圖:


點擊回車,結果如下:


此時回到D:\test目錄下,看到pos.vec文件已經生成。

以上參數的含義如下:

-vec <vec_file_name>
訓練好的正樣本的輸出文件名。
-img<image_file_name>
源目標圖片(例如:一個公司圖標)
-bg<background_file_name>
背景描述文件。
-num<number_of_samples>
要產生的正樣本的數量,和正樣本圖片數目相同。
-bgcolor<background_color>
背景色(假定當前圖片爲灰度圖)。背景色制定了透明色。對於壓縮圖片,顏色方差量由bgthresh
參數來指定。則在bgcolor-bgthresh 和bgcolor+bgthresh 中間的像素被認爲是透明的。
-bgthresh<background_color_threshold>
-inv
如果指定,顏色會反色
-randinv
如果指定,顏色會任意反色
-maxidev<max_intensity_deviation>
背景色最大的偏離度。
-maxangel<max_x_rotation_angle>
-maxangle<max_y_rotation_angle>,
-maxzangle<max_x_rotation_angle>
最大旋轉角度,以弧度爲單位。
-show
如果指定,每個樣本會被顯示出來,按下"esc"會關閉這一開關,即不顯示樣本圖片,而創建過程
繼續。這是個有用的debug 選項。
-w<sample_width>
輸出樣本的寬度(以像素爲單位)
-h《sample_height》
輸出樣本的高度,以像素爲單位。

4、生成xml文件

(1)cmd進入DOS命令界面。輸入如下圖:


點擊回車,等待。。如果樣本數量1000以上,等待的時間得5個小時以上。。。(因爲我用的樣本很少,正樣本5個,負樣本10個,所以幾秒鐘就出來了結果)最後面的結果如下圖:


最後出現Cascade performance這一項就完成了XML文件的生成。

Haartraining 的命令行參數如下:
-data<dir_name>
存放訓練好的分類器的路徑名。
-vec<vec_file_name>
正樣本文件名(由trainingssamples 程序或者由其他的方法創建的)
-bg<background_file_name>
背景描述文件。
-npos<number_of_positive_samples>,
-nneg<number_of_negative_samples>
用來訓練每一個分類器階段的正/負樣本。合理的值是:nPos = 7000;nNeg = 3000
-nstages<number_of_stages>
訓練的階段數。
-nsplits<number_of_splits>
決定用於階段分類器的弱分類器。如果1,則一個簡單的stump classifier 被使用。如果是2 或者更
多,則帶有number_of_splits 個內部節點的CART 分類器被使用。
-mem<memory_in_MB>
預先計算的以MB 爲單位的可用內存。內存越大則訓練的速度越快。

-sym(default)
-nonsym
指定訓練的目標對象是否垂直對稱。垂直對稱提高目標的訓練速度。例如,正面部是垂直對稱的。
-minhitrate《min_hit_rate》
每個階段分類器需要的最小的命中率。總的命中率爲min_hit_rate 的number_of_stages 次方。
-maxfalsealarm<max_false_alarm_rate>
沒有階段分類器的最大錯誤報警率。總的錯誤警告率爲max_false_alarm_rate 的
number_of_stages 次方。
-weighttrimming<weight_trimming>
指定是否使用權修正和使用多大的權修正。一個基本的選擇是0.9
-eqw
-mode<basic(default)|core|all>
選擇用來訓練的haar 特徵集的種類。basic 僅僅使用垂直特徵。all 使用垂直和45 度角旋轉特徵。
-w《sample_width》
-h《sample_height》
訓練樣本的尺寸,(以像素爲單位)。必須和訓練樣本創建的尺寸相同


(2)回到D:\test目錄下,就可以看到多了一個xml文件夾和一個xml類型的文檔:


至此我們就完成了xml文檔的訓練。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章