Opencv haar training-特徵訓練器

1.正樣本文件採集:html

須要使用到的工具:objectmarker編輯器

用於待識別對象的標註,並生成標註文件。須要注意的是,生成完標註文件以後(一般是info.txt文件),用編輯器打開文件,將全部路徑信息刪除,只保留文件名和其對應的標註信息,修改完成以後,將文件保存爲sample_pos.dat(注意,文件名字不要改變,不然之後會很坑,這個具體還沒去研究源碼,應該是程序的問題);工具

ps:若是已經有了圖像的標註信息,那就能夠跳過這一步了。ui

2.正樣本vec文件生成(sample文件)spa

工具:opencv_createsamples.exe.net

在工具所在目錄建立文件夾:pos,將採集到的正樣本,以及標註文件放入pos文件夾;命令行

使用cmd進入工具所在目錄,執行命令:xml

opencv_createsamples.exe -info ./pos/sample_pos.dat -vec ./pos/sample_pos.vec -num 17 -w 20 -h 20 -show YEShtm

ps:-num:正樣本個數對象

3.負樣本採集

建議正負樣本比例在1:3(具體還不知道,參考網上提供的數據)。負樣本在採集的時候尤爲須要注意,儘可能保持和正樣本環境類似,好比,正樣本圖像中包含要檢測的對象,負樣本圖像中最好剔除要檢測的對象,只保留背景。有條件的同窗能夠直接寫程序,對負樣本圖片進行切割,標準是40*40(由於咱們的正樣本採用的是20*20)。

負樣本採集完成以後,在pos目錄的統計目錄建立文件夾:neg,將負樣本拷貝至neg目錄,而後使用命令行進入neg目錄,執行命令:

dir /b > sample_neg.dat

用文本編輯器打開dat文件,刪除最後一行:sample_neg.dat,保存文件;

ps:文件名字不要改變,不然會出錯

4.訓練樣本

到此爲止,咱們要準備的文件都已經準備好,能夠進行訓練了。

使用的工具:opencv_haartraining.exe

進入工具所在目錄,先建立目錄:cascade,而後執行命令:

opencv_haartraining.exe -data ./cascade -vec ./pos/sample_pos.vec -bg ./neg/sample_neg.dat -nstage 20 -npos 100 -nneg 300 -mem 256 -mode ALL -w 20 -h 20
-nstage:要訓練多少層
-npos:每層的正樣本個數
-nneg:每層的負樣本個數

ps:在這一步常常會拋異常,一般都是負樣本文件不對,同時dat文件的名字必定要按照上面說的命名,不然會出錯;

5.合併xml文件

樣本訓練完成以後,cascade目錄下會生成多個子目錄,須要將這些目錄合併生成xml文件才能使用:

工具:c-example-convert_cascade.exe(ps:根據opencv的版本不一樣,這個工具的名字也可能不一樣)

執行命令:

c-example-convert_cascade.exe --size=20x20 ./cascade haar_adaboost.xml

到此,會在目錄中生成haar_adaboost.xml文件!

done!

說明:

1.全部的工具及其依賴文件建議統一放置在一個目錄中(好比:build);

2.除了負樣本描述文件的生成命令須要在neg目錄中執行,其餘命令所有在build(假設你也有這個目錄,以各自的實際目錄爲準)目錄中執行;

3.good luck!

參考:

1.http://www.cnblogs.com/wengzilin/p/3845271.html

2.http://blog.csdn.net/xuejiren/article/details/39493537

(Opencv Error: Assertion failed (elements_read==1))

相關文章
相關標籤/搜索