【使用方法】主要是在cmd中使用命令行操做。打開文件夾D:\opencv349\x64\vc12\bin,能夠看到這三個exe文件。按住鍵盤shift+鼠標右鍵,在此處打開Powershell窗口。具體命令見黃色背景。html
【樣本】框選缺陷的尺寸比例與opencv_createsamples.exe(生成vec)的w、h比例一致(會自動縮放到指定的w、h)。負樣本尺寸≥w、h。git
【功能】github
以檢測缺陷爲例(目錄見下圖)。三個工具依次爲:標註缺陷——生成正樣本的vec文件——訓練樣本。shell
opencv_annotation.exe,用來標註缺陷,完成後獲得txt文件,內容以下。框選時框住缺陷便可。工具
opencv_createsamples.exe,生成vec文件。此工具能夠把框選的缺陷縮放到指定大小(默認24*24像素,注意負樣本尺寸≥此像素),即所謂的歸一化。測試
opencv_traincascade.exe,生成cascade.xml,保存了訓練獲得的模型參數,此文件用於測試。spa
【用法】.net
一、opencv_annotation.exe命令行
若圖片過大,不建議使用此工具來標註,不方便放大或縮小。通常用於小於屏幕尺寸的圖片。3d
若是圖片統一是等大的純缺陷圖(如20*20像素),那麼能夠不用此工具,直接仿照上圖在txt中添加內容便可(參考小技巧),個數、座標統一 1 0 0 20 20。
超過屏幕尺寸的大圖標註,能夠用https://github.com/tzutalin/labelImg/releases,獲得xml文件中的座標須要本身計算寬高,仿照上圖格式保存到txt中。
-a,生成的txt的路徑及txt名。-i,缺陷圖片的路徑。若是圖片高度>指定的m值,則縮小r倍顯示。
cmd中輸入:opencv_annotation -a=D:\data\NgImages\info.txt -i=D:\data\NgImages\
以後會遍歷展現D:\data\NgImages\中的缺陷圖,鼠標左鍵框選缺陷後,按鍵盤c鍵確認此框,d鍵放棄此框,n鍵下一幅圖,esc鍵退出。
完成後座標結果會保存到info.txt中(注意txt與圖片在同一文件夾中)。
二、opencv_createsamples.exe
刪除info.txt中D:\data\NgImages\,由於 -info D:\data\NgImages\info.txt中D:\data\NgImages\會補全圖片路徑。
cmd中輸入:opencv_createsamples -info D:\data\NgImages\info.txt -vec D:\data\ng.vec
依據正樣本info.txt中座標索引到真正框選的缺陷圖,將其特徵編譯爲二進制文件ng.vec
經常使用參數說明:注意-info -vec這兩個參數設置後,-bg失效,因此此處不列出。
-info 上一步中獲得的info.txt的路徑;
-vec 生成vec文件的路徑、vec文件名;
-num 生成的正樣本的最大數目,默認1000。若正樣本圖片數>設定值,則只生成設定值個正樣本,不然生成實際個數個。
-w 正樣本縮放到的寬度,默認24像素
-h 正樣本縮放到的高度,默認24像素
三、opencv_traincascade.exe
此處會用到負樣本。在負樣本圖片所在目錄新建okInfo.txt,內容是全部負樣本圖片名(不帶路徑),如1.jpg等(若是提示錯誤,就把絕對路徑加上如D:\data\background\1.jpg)。
opencv_traincascade -data D:\data\ -vec D:\data\ng.vec -bg D:\data\OkImages\okInfo.txt -numStages 25 -numPos 30 -numNeg 200 -umStaes 25 -w 24 -h 24 -minHitRate 0.995 -maxFalseAlarmRate 0.5 -mode ALL
注意-w 24 -h 24與第2步驟的尺寸要一致,-numPos用於訓練每層的正樣本數<opencv_createsamples.exe獲得的正樣本數,-numNeg無要求,參數含義再也不贅述。
最終獲得訓練好的級聯分類器的最終參數文件cascade.xml,此文件可用於測試。