opencv traincascade使用,報錯解決
關於traincascade這個用過opencv的人都瞭解
最經典的是opencv的入門人臉檢測程式,其官方的人臉xml就是train出來的。
不過新手總是會犯各種各樣的問題,我來列舉下我所犯過的低階問題
第一:
引數超過官方的限制
比如numstage,當時為了方便計算直接弄個21,顯然這個就會報錯。
解決辦法:在dos命令下輸入opencv_traincascade.exe 看看官方給的引數限制
第二:
環境變數
估計只有像我這種因為使用vs2017而不得不自己編譯opencv的人 才會出現這種問題,首先要把bin放在環境變數下,這個毋庸置疑,但是我的bin目錄下是opencv_traincascaded.exe,注意後面多了一個D,是debug32下,註定了訓練樣本不能過大,超出了就會報錯outof memery。
解決辦法:去官方下載編譯好的opencv,然後新增這個環境變數。
第三:
誤以為numpos就是正樣本數量,這個問題的原因就是沒有認真閱讀官方的文件。
numPos+(numStages-1)*numPos*(1-minHitRate)<=正樣本
負樣本>2.5正樣本&&負樣本<3正樣本
至於這個值怎麼設定,不妨自己拿起筆算一算,這個minhitrate儘量設定高一點,0.9以上吧。
第四:
正樣本只能是正方形?
顯然不是,我用30*13的測試效果一樣很好,但是這個正樣本真的不好擷取,我是用自己寫的程式擷取的,這個不難,但是擷取100張左右的圖片真的累。。。。。
第五:
負樣本隨便弄?
顯然不是,你的負樣本不能包含正樣本,很像的也不行,比如透明地板的反射影子,比如結構很像的其他干擾,選正樣本很累,選負樣本就是技術。而且負樣本顯然比正樣本多,似乎更累,哎我怎麼沒感覺?不就是鍵盤狂按嗎?
第六
檔案命名 很多人會用f2進行統一命名但是在寫txt的時候一定注意 a (0).jpg 中間那個空格,用c++統一命名程式碼比較多,python寫的話很簡單,不想麻煩的話我推薦一個軟體
buildrename
暫時就想到了這麼多,就先寫這麼多吧
,