================================訓練分類器==============================
樣本準備
1: 正負樣本
如:window下
a. 在正樣本目錄下 dir /b > pos.txt? ,將生成的 摘要文件pos.txt 進行后綴替換,加上 1 0 0 19 19,
注意后面的去掉名字表示圖片在 (0,0)到(19, 19 )的矩形區域里
b. 對負樣本目錄下 dir /b >neg.txt? 備注負樣本目錄文件只需要去掉文件名字就好,不需要替換,后面的數字
2: 下載windows 的安裝包,并安裝,同時記錄安裝目錄,假如是: openCV_path
https://sourceforge.net/projects/opencvlibrary/files/opencv-win/3.3.0/opencv-3.3.0-vc14.exe/download
opencv-3.3.0-vc14.exe
3: 找到openCV_path 目錄下面的
創建opencv可以識別的數據
E:\NDK\Opencv\opencv\build\x64\vc14\bin\opencv_createsamples.exe
訓練
E:\NDK\Opencv\opencv\build\x64\vc14\bin\opencv_traincascade.exe
:E:\NDK\Opencv\opencv\build\x64\vc14\bin
中的兩個文件:
opencv_createsamples.exe
opencv_traincascade.exe
4:
4.1 就是加工樣本數據,使用opencv_createsamples
備注配置環境變量
使用命令行:
opencv_createsamples -vec pos.vec -info face\pos.txt -bg non-face\neg.txt -w 19 -h 19 -num 472
-vec pos.vec? 用pos.vec 保存執行結果
-info face\pos.txt 用于指向正樣本的路徑
-bg neg.txt 負樣本的路徑(這么寫經常報錯,再目錄文件直接寫對應的文件目錄就好)
-w 19 -h 19? ? 這個是正樣本中圖片中頭像的寬高
-num 472? ? ? 正樣本的數量
執行這個命令生成 pos.vec
4.2 運用? opencv_traincascade 訓練樣本,得到分類器
執行命令前,我們要在當前目錄創建一個data 文件夾
執行命令:opencv_traincascade -data data -vec pos.vec -bg face\neg.txt -numPos 468 -numNeg 23573 -numStages 9 -w 19 -h 19 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -mode ALL
-data data 文件夾: 用于保存訓練結果和中間產物
-vec pos.vec : 4.1 的結果
-bg face\neg.txt:? 負樣本的路徑
-numPos 468 正樣本的數量 數量不能高于正樣本數,注意事項,數據要注意 數量不能隨便取 網上查找
vec文件中的正樣本數目<= numpos+(numStages - 1)(1 - minHitRate) numpos+ s
-numNeg 23573? 負樣本的數量
-numStages 9? ? 這個數字是,我們訓練的層級
-w 19 -h 19
-minHitRate 0.999 -maxFalseAlarmRate 0.5 -mode ALL
備注:
可能報錯:
Train dataset for temp stage can not be filled. Branch training terminated.
Cascade classifier can't be trained. Check the used training parameters.
把命令改為 將neg.txt copy 到喝pos.vec 統一級別,將里面的文件都加上文件頭
比如non-face/cmu_9972.pgm 這樣他就能找到文件了
opencv_traincascade -data data -vec pos.vec -bg neg.txt -numPos 468 -numNeg 23573 -numStages 9 -w 19 -h 19 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -mode ALL
說明路徑問題