1. 程式人生 > >opencv訓練自己的分類器

opencv訓練自己的分類器

注意

這個哥們寫的非常詳細(http://blog.csdn.net/liuqz2009/article/details/62222597)

點1.建立正負樣本的時候,負樣本需要一起歸一化,灰度處理而且負樣本是正樣本1.2到1.5倍比較好,這裡自己寫了一個程式統一批量處理(需要可以聯絡)

點2.正負樣本的描述檔案,先將正樣本放在一個資料夾內通過命令提示符cd進正樣本的資料夾內 dir/b>positive.txt positive。txt是生成的檔案,(不需要手動建立,但是要記得刪除最後一行)然後修改。txt檔案刪除最後一行,並且將最後一個單詞例如。jpg全部替換成jpg 1 0 0 20 20 (檔案數,起始座標,終點座標)負樣本描述檔案不需要進行這樣的操作

點3.生成vec檔案


成功的話會有done created num samples 

cd到opencv_createsamples.exe所在的檔案位置

-vec 生成的vec檔案的名字和檔案所在的位置

-info 正樣本描述檔案的名字和位置 

-bg 負樣本描述檔案的名字和位置

-h 高

-w寬

-num正樣本描述檔案的

opencv_createsamples.exe -vec svm/hands.vec -info pospic/positive.txt -bg negpic/negtive.txt -w 20 -h 20 -num 12

生成xml檔案


vec-file has to contain >= (numPos + (numStages-1) * (1 - minHitRate) * numPos) + S

opencv_traincascade.exe -data data -vec vec/hands.vec -bg negpic/negtive.txt -npos 115 -nneg 100 -nstages 20 -nsplits 2  -minHitRate 0.999 -w 20 -h 20

這個語句是錯誤的會報can not get new positive sample的錯誤


觀察了一下npos和neg的值沒有發生改變

說以應該要寫成

opencv_traincascade.exe -data data -vec vec/hands.vec -bg negpic/negtive.txt -numPos 115 -numNeg 100 -numStages 20 -numSplits 2  -minHitRate 0.999 -w 20 -h 20


沒有縮寫的

numPos is bert 0.9*vec num

點4.

然後遇到了Train dataset for temp stage can not be filled


這邊一些詳細的問題都有描述  

負描述檔案絕對路徑問題:

把負樣本描述檔案重新編寫,新增一個絕對路徑(照片所在資料夾)


最終:訓練完成是這個樣子:有個end