一開始先去官網上下載opencv (http://opencv.org/) 的安裝包,再來就確認環境變數內有指定opencv/build/bin的dll路徑位置,以上就懶得講。
接下來你要有兩個檔案放在一個資料夾內
至於traincascade跟haartraining兩個差別在哪? 簡單來說一個是新版一個是舊版、一個有多了hog跟lbp的特徵抽取一個是只有haar-like feature。總之,這裡就用新版traincascade來做測試。
Step1: 收集正負樣本
一開始新收集你的正樣本(positive)跟負樣本(negative),切記負樣本內不要有你正樣本的東西!!!
本人這裡就用可愛的貓貓來作正樣本(請自行google抓取)
接著就要刮取你要的範圍,假設你要訓練1:1的長寬,請按照原始比例刮取(ex: 35x35, 20x20, 50x50),說實話這樣用小畫家擷取真的還頗難的,後來有發現一個不錯的軟體(Trimto),如果大家嫌麻煩可以用這個軟體用,然後將所有正樣本resize製相同的size(這邊我是用35x35)。至於負樣本就隨便抓個背景圖(不要裡面有貓就好,如果你很懶得抓圖這邊http://tutorial-haartraining.googlecode.com/svn/trunk/data/negatives/ 有現成的),大小也沒啥限制。至於顏色部分彩色灰階,因為原始碼內是直接轉灰階來執行故我個人覺得是沒啥差異(攤手)。
正樣本:
負樣本:
Step2: 標記URL
接著將negatives放入你所有要訓練的貓貓照片,在negatives也放在入你所有負樣本的照片,然後在將這些需要的檔案放入同一個資料夾(/opencv/data/)下。
接著打開你的cmd輸入此資料夾的路徑,在進入negatives資料夾內,再用dir /b > 存放檔案名稱,positives資料夾也是照著這步驟做。
接著positives跟negatives的資料夾內會有positives.txt跟negatives.txt的檔案。
先打開positives.txt的檔案,把檔案內最後一行positives.txt砍掉。
接著選取檔案資料型態(如.bmp or .jpg ~~~~blabla)按下ctrl+f 講檔案尾端新增檔案型態 1 0 0 w h (ex: .bmp 1 0 0 35 35,幾個目標,rectX, rectY, rectW, rectH),接著negatives.txt只要將檔案尾端的negatives.txt砍掉就好。
positives.txt negatives.txt
以上記得存檔XDDD”
Step3: 將positives的檔案存成vector的檔案(.vec)( opencv_createsamples)
接著cmd位置回到opencv/data,也稍微確認一下opencv/data/positives/positives/txt檔案有在。
首先看一下opencv_createsamples參數要如何下。
-info: positives.txt的位置
-vec: positives的檔案存成.vec的檔案名稱
-num: positives的數量(我正樣本有113個,故此處我就設定為113)
-w, -h: 影像寬跟長(default: 24x24,這裡我是設定為35x35)
其他就是用來創造新的樣本的參數,這裡是用不到。
成功的話,最後會有 Done. Created num samples.的字樣,在opencv/data/內會有positives.vec檔案。
Step 4: 訓練cascade(opencv_traincascade)
最後這步驟就是確認positives.txt跟negatives/negatives.txt檔案存在,接著在opencv/data/內在新增一個資料夾,這裡我就將資料夾取名為cascade,接下來看一下opencv_traincascade怎樣用。
-data: 要儲存的資料夾(在opencv_traincascade不會自動create這資料夾,但在opencv_haartraing卻會自動create,但因為我是用opencv_traincascade,所以這就是剛剛為什麼我要創立一個cascade的資料原因)
-vec: positives的vec檔案的位置(opencv/data/positives.vec)
-bg: negaives的URL的路徑位置(opencv/data/negatives/negatives.txt)
-numPos, -numNeg: positives跟negatives的數量(之前有看過某篇文章說用pos:neg最好是1:2.5~3之間,我底是多少,但是之前有用過neg超過3的比例是有出現exception)。
-numStages: 訓練出多少stage
-precalcValBufSize, precalcIdxBufSize: 就要運用記憶體容量(這裡我就設定為default,照官網上說得調越高是可以訓練比較快,但我調1024卻出現exception,有空再來看原因><)
-baseFormateSave: 是否用舊格式存放
-satgeType: 這裡只有BOOST沒其他方法囉(我猜之後可能會增加類似SVM、Neural Network等方法吧)
-featureType: 這裡提供了HAAR、LBP、HOG等特徵抽取的方法(default: HAAR)
-w, -h: 影像長寬,切忌要和在opencv_createsamples內設定的-w,-h一模一樣不然會出錯!!!
-bt: adaboost的總類(default GAB,還又其他方式DAB、RAB 和LB)。
-minHitRate, -maxFalseAlarmRate, -weightTrimRate, -weightTrimRate, -maxDepth, -maxWeakCount: 基本上這些都是adaboos的數學運算上需要的參數,這邊就暫時先設default值
-mode: haar –like feature所需要用的方式,內有3種方式(CORE, BASIC, ALL),懶得打,直接貼圖(zzzz)。
其中BASIC包含CORE,ALL包含BASIC跟CORE
如果-featureType為HOG或LBP基本上-mode是不用設定。(如果-fetureType沒設定他的default就是HAAR,所以下圖-mode BASIC不用打也沒關,但如果要測試CORE or ALL 就要設定了)
接下來就等他跑完就end!
訓練完成後,在opencv/data/cascade/的資料夾下會多一個cascade.xml檔案,這就是訓練完的結果,接就就可以餵給opencv 的CascadeClassifeir做測試,以下是測試結果。
留言列表