1. 程式人生 > >opencv traincascade使用,報錯解決

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

暫時就想到了這麼多,就先寫這麼多吧