眾所周知,opencv下有自帶的供人臉識別以及行人檢測的分類器,也就是說已經有現成的xml文件供你用。如果我們不做人臉識別或者行人檢測,而是想做點其他的目標檢測該怎么做呢?答案自然是自己訓練一個特定的訓練器。opencv里面比較常用的分類器有svm以及級聯分類器,svm的訓練以及分類很簡單,這里不再贅述,這里談談級聯分類器的訓練。級聯分類器可是好東西,opencv已經封裝了多尺度檢測方法(multiScaleDetector)以及繪制外接矩形的方法,這兩個方法為目標檢測提供了非常大的便利性。以下是本系列教程的總體流程:
1.訓練前的准備:opencv_createsamples.exe和 opencv_traincascade.exe程序的編譯
2.級聯分類器的訓練
3.級聯分類器的應用
===================
1.訓練的准備在開始訓練分類器前需要先獲取到opencv_createsamples.exe以及opencv_traincascade.exe,有兩種方式:第一自己編譯,可以按照博客的內容自己編譯,不過按照該方法最后運行出來的結果沒有這兩個可執行程序產生;第二拿別人編譯好的文件,從鏈接http://en.pudn.com/downloads204/sourcecode/graph/texture_mapping/detail958471_en.html處下載整個工程,在bin目錄下有這兩個文件,不過是opencv2.2版本的不影響,要用的時候把整個工程的文件(exe+dll)同時拷出來,否則會報“找不到dll”的錯誤。
2.分類器的訓練:
按照帖子http://jingyan.baidu.com/article/4dc40848f50689c8d946f197.html的操作一步步做下去,注意事項見:
http://blog.csdn.net/xidianzhimeng/article/details/10470839
結合自己的經驗補充如下:
1.在train時,numPos是指每個stage上用的正樣本數,一般取vec里面的正樣本數的90%;
目前卡在錯誤:
===== TRAINING 0-stage =====
<BEGIN
POS count : consumed 16 : 16
Train dataset for temp stage can not be filled. Branch training terminated.
找了半天資料試了之后仍舊無解,准備換台機子試試,to be continue...