利用OpenCV自帶的haar training程序訓練壹個分類器,需要經過以下幾個步驟:
(1)收集訓練樣本:
訓練樣本包括正樣本和負樣本。正樣本,通俗點說,就是圖片中只有妳需要的目標。而負樣本的圖片只要其中不含有目標就可以了。但需要說明的是,負樣本也並非隨便選取的。例如,妳需要檢測的目標是汽車,那麽正樣本就應該是僅僅含有汽車的圖片,而負樣本顯然不能是壹些包含天空的,海洋的,風景的圖片。因為妳最終訓練分類器的目的是檢測汽車,而汽車應該出現在馬路上。也就是說,分類器最終檢測的圖片應該是那些包含馬路,交通標誌,建築物,廣告牌,汽車,摩托車,三輪車,行人,自行車等在內的圖片。很明顯,這裏的負樣本應該是包含摩托車、三輪車、自行車、行人、路面、灌木叢、花草、交通標誌、廣告牌等。
另外,需要提醒的是,adaboost方法也是機器學習中的壹個經典算法,而機器學習算法的前提條件是,測試樣本和訓練樣本獨立同分布。所謂的獨立同分布,可以簡單理解為:訓練樣本要和最終的應用場合非常接近或者壹致。否則,基於機器學習的算法並不能保證算法的有效性。此外,足夠的訓練樣本(至少得幾千張正樣本、幾千張負樣本)也是保證訓練算法有效性的壹個前提條件。
這裏,假設所有的正樣本都放在f:/pos文件夾下,所有的負樣本都放在f:/neg文件夾下;
(2)對所有的正樣本進行尺寸歸壹化:
上壹步收集到的正樣本,有很多的尺寸大小,有的是200*300,有的是500*800...尺寸歸壹化的目的,就是把所有的圖片都縮放到同壹大小。比如,都縮放到50*60的大小。
(3)生成正樣本描述文件:
所謂的正樣本描述文件,其實就是壹個文本文件,只不過,很多人喜歡將這個文件的後綴改成.dat而已。正樣本描述文件中的內容包括:文件名 目標個數 目標在圖片中的位置(x,y,width,height)
典型的正樣本描述文件如下所示:
0.jpg 1 0 0 30 40
1.jpg 1 0 0 30 40
2.jpg 1 0 0 30 40
.....
不難發現,正樣本描述文件中,每壹個正樣本占壹行,每壹行以正樣本圖片開頭,後面緊跟著該圖片中正樣本的數量(通常為1),以及正樣本在圖片中的位置
假如,f:\pos文件夾下有5000個正樣本圖片,每個圖片中僅有壹個目標。那麽,我們可以寫程序(遍歷文件夾中的所有圖片文件,將文件名寫入到文件中,將正樣本在圖片中的位置,大小都寫入文件中)生成壹個pos.dat文件作為正樣本描述文件。