看到的不錯的資料,記錄下來,以備不時之需。
按ctrl+r開啟windows執行程式,輸入cmd開啟dos命令視窗,輸入 d:回車,再輸入cd d:\face\negdata進入路徑,再次輸入dir /b > negdata.dat,則會路徑下生成乙個negdata.dat檔案,開啟該檔案將最後一行的negdata.dat刪除,這樣就生成了負樣本描述檔案。
正樣本對於正樣本,通常的做法是先把所有正樣本裁切好,並對尺寸做規整(即縮放至指定大小)。
posdata/1(10).bmp 1 1 1 23 23
posdata/1(11).bmp 1 1 1 23 23
posdata/1(12).bmp 1 1 1 23 23
不過你可以把描述檔案放在你的posdata路徑(即正樣本路徑)下,這樣你就不需要加前面的相對路徑了。同樣它的生成方式可以用負樣本描述檔案的生成方法,最後用txt的替換工具將「bmp」全部替換成「bmp 1 1 1 23 23
」就可以了,如果你的樣本多,用txt替換會導致程式未響應,你可以將內容拷到word下替換,然後再拷回來。bmp後面那五個數字分別表示個數,目標的起始位置及其寬高。這樣就生成了正樣本描述檔案posdata.dat。
2) 執行createsamples程式。如果直接在vc環境下執行,可以在project\settings\debug屬性頁的program arguments欄設定執行引數。下面是乙個執行引數示例:
-info d:\face\posdata\posdata.dat -vec d:\face\pos.vec -num 50 -w 20 -h 20
表示有50個樣本,樣本寬20,高20,正樣本描述檔案為posdata.dat,結果輸出到pos.vec。
或者在dos下輸入:
"d:\program files\opencv\bin\createsamples.exe"-info "posdata\posdata.dat" -vec data\pos.vec -num 50 -w 20 -h 20
執行完了會d:\face\data下生成乙個*.vec的檔案。該檔案包含正樣本數目,寬高以及所有樣本影象資料。結果入下圖:
createsamples程式的命令列引數:
命令列引數:
-vec
訓練好的正樣本的輸出檔名。
-img
源目標(例如:乙個公司圖示)
-bg背景描述檔案。
-num
要產生的正樣本的數量,和正樣本數目相同。
-bgcolor
背景色(假定當前為灰度圖)。背景色制定了透明色。對於壓縮,顏色方差量由bgthresh引數來指定。則在bgcolor-bgthresh和bgcolor+bgthresh中間的畫素被認為是透明的。
-bgthresh
-inv
如果指定,顏色會反色
-randinv
如果指定,顏色會任意反色
-maxidev
背景色最大的偏離度。
-maxangel
-maxangle,
-maxzangle
最大旋轉角度,以弧度為單位。
-show
如果指定,每個樣本會被顯示出來,按下"esc"會關閉這一開關,即不顯示樣本,而建立過程繼續。這是個有用的debug選項。
-w輸出樣本的寬度(以畫素為單位)
-h《sample_height》
輸出樣本的高度,以畫素為單位。
到此第一步樣本訓練就完成了。恭喜你,你已經學會訓練分類器的五成功力了,我自己學這個的時候花了我一天的時間,估計你幾分鐘就學會了吧。
三、訓練分類器
樣本建立之後,接下來要訓練分類器,這個過程是由haartraining程式來實現的。該程式原始碼由opencv自帶,且可執行程式在opencv安裝目錄的bin目錄下。
haartraining的命令列引數如下:
-data
存放訓練好的分類器的路徑名。
-vec
正樣本檔名(由trainingssamples程式或者由其他的方法建立的)
-bg背景描述檔案。
-npos,
-nneg
用來訓練每乙個分類器階段的正/負樣本。合理的值是:npos = 7000;nneg = 3000
-nstages
訓練的階段數。
-nsplits
決定用於階段分類器的弱分類器。如果1,則乙個簡單的stump classifier被使用。如果是2或者更多,則帶有number_of_splits個內部節點的cart分類器被使用。
-mem
預先計算的以mb為單位的可用記憶體。記憶體越大則訓練的速度越快。
-sym(default)
-nonsym
指定訓練的目標物件是否垂直對稱。垂直對稱提高目標的訓練速度。例如,正面部是垂直對稱的。
-minhitrate《min_hit_rate》
每個階段分類器需要的最小的命中率。總的命中率為min_hit_rate的number_of_stages次方。
-maxfalsealarm
沒有階段分類器的最大錯誤報警率。總的錯誤警告率為max_false_alarm_rate的number_of_stages次方。
-weighttrimming
指定是否使用權修正和使用多大的權修正。乙個基本的選擇是0.9
-eqw
-mode
選擇用來訓練的haar特徵集的種類。basic僅僅使用垂直特徵。all使用垂直和45度角旋轉特徵。
-w《sample_width》
-h《sample_height》
訓練樣本的尺寸,(以畫素為單位)。必須和訓練樣本建立的尺寸相同。
乙個訓練分類器的例子:
"d:\program files\opencv\bin\haartraining.exe" -data data\cascade-vec data\pos.vec -bg negdata\negdata.dat -npos 49 -nneg 49 -mem 200 -mode all-w 20 -h 20
訓練結束後,會在目錄data下生成一些子目錄,即為訓練好的分類器。
訓練結果如下:
恭喜你,你已經學會訓練分類器的九成功力了。
四:利用訓練好的分類器進行目標檢測。
這一步需要用到performance.exe,該程式原始碼由opencv自帶,且可執行程式在opencv安裝目錄的bin目錄下。
performance.exe -data data/cascade -info posdata/test.dat-w 20 -h 20 -rs 30
performance的命令列引數如下:
usage: ./performance
-data
-info
[-maxsizediff ]
[-maxposdiff ]
[-sf ]
[-ni]
[-nos ]
[-rs ]
[-w ]
[-h ]
也可以用opencv的cvhaardetectobjects函式進行檢測:
cvseq* faces = cvhaardetectobjects( img, cascade,storage,1.1, 2, cv_haar_do_canny_pruning,cvsize(40, 40) ); //3. 檢測人臉
注:opencv的某些版本可以將這些目錄中的分類器直接轉換成xml檔案。但在實際的操作中,haartraining程式卻好像永遠不會停止,而且沒 有生成xml檔案,後來在opencv的yahoo論壇上找到乙個haarconv的程式,才將分類器轉換為xml檔案,其中的原因尚待研究。
OpenCV訓練分類器
opencv訓練分類器 一 簡介 目標檢測方法最初由paul viola viola01 提出,並由rainer lienhart lienhart02 對這一方法進行了改善。該方法的基本步驟為 首先,利用樣本 大約幾百幅樣本 的 harr 特徵進行分類器訓練,得到乙個級聯的boosted分類器。分...
訓練Opencv分類器
由於在做乙個專案的需要,接觸到opencv。並使用其中的機器識別,自己會的實在不多。在使用它自帶的人臉分類器時,用自己的arm板上的攝像頭拍的,基本上識別不出。於是自己想訓練乙個分類器 用自己arm板上的攝像頭拍 給自己在專案中使用。於是找了個教室,拍了三百張 回去做分類器。開始以為做分類器會很麻煩...
OpenCV訓練分類器
一 簡介 目標檢測方法最初由paul viola viola01 提出,並由rainer lienhart lienhart02 對這一方法進行了改善。該方法的基本步驟為 首先,利用樣本 大約幾百幅樣本 的 harr 特徵進行分類器訓練,得到乙個級聯的boosted分類器。分類器中的 級聯 是指最終...