opencv訓練分類器製作xml文件**)
yuyu
**:整個過程分為兩步:
1. 建立樣本
2. 訓練分類器
現在讓我一一講述。
1. 建立樣本
◆ 樣本分兩種: 正樣本與負樣本(也有人翻譯成:正例樣本和反例樣本),其中正樣本是指待檢目標樣本(例如人臉,汽車,鼻子等),負樣本指其它任意。
◆ 所有樣本都應該有同一尺寸,如20 * 20,並放在相應檔案目錄下,
◆ 集合檔案格式(collection file format)和描述檔案格式(description file format)
集合檔案格式(collection file format)就是如下形的描述檔案:
[filename]
[filename]
[filename]
… 描述檔案格式(description file format)就是如下形的描述檔案:
[filename] [# of objects] [[x y width height] [... 2nd object] ...]
[filename] [# of objects] [[x y width height] [... 2nd object] ...]
[filename] [# of objects] [[x y width height] [... 2nd object] ...]
….(x, y) 指左上角的座標,width和 height 分別是樣本的寬和高,這裡我的是20*20的,所以兩個值都是20
◆ 負樣本用集合檔案格式描述,正樣本用描述檔案格式描述!(這點網上很多文章都搞錯了!)
▼建立樣本步驟:
一. 把所有正樣本放在posdata的資料夾下,把所有負樣本放在negdata資料夾下
(這裡我以人臉樣本為例) 二.
分別為正樣本和負樣本建立描述檔案
a. 為正樣本建立描述檔案格式檔案info.txt,並且把這個檔案放在與樣本同一目錄下,例如我的目錄為c:/opencv2.1/bin/posdata
a) 在命令列下 輸入以下命令: dir /b > info.txt
b) 開啟info.txt, 按ctrl+h, 把所有的bmp 換成 bmp 1 0 0 20 20
c) 刪除info.txt最後一行的 「info.txt」
d) 結果如下:
b. 為負樣本建立集合檔案格式檔案bg.txt, 並且把這個檔案放在與樣本同一目錄下,例如我的目錄為i:/negdata
a) 在命令列下 輸入以下命令: dir /b > bg.txt
b) 刪除bg.txt最後一行的 「bg.txt」
c) 結果如下:
三. 建立樣本。
opencv 自帶有建立樣本的exe 檔案,在 …/opencv2.1/bin 目錄下, 這裡我建立10個sample:
命令是: opencv_createsamples.exe -info c:/opencv2.1/bin/posdata/info.txt -vec a.vec -num 10 -w 20 -h 20
如圖:結果如圖:
(關於 opencv_createsamples.exe 的引數用法,在參考英文資料**裡有詳細介紹;
需要說明的是,我這裡用的引數並沒有 –bg, 因為根據那份文件,有了 –vec 和 –info 之後,就表示:create training samples from some (從很多正樣本中建立sample, 沒有distortions)
經歷千辛萬苦,我們終於看到sample被建立成功了,接下來的工作就簡單多了
▼訓練分類器
還是在…/opencv2.1/bin目錄下,輸入命令:
opencv_haartraining.exe -data data -vec c:/opencv2.1/bin/a.vec -bg i:/negdata/bg.txt -npos 250 -nneg 800 -nstages 4 -nsplits 2 -mem 512 -nonsym -w 20 -h 20 -minpos 100
回車(注意:
1. 引數-vec 一定要是剛剛建立樣本產生的a.vec,且把完整路徑也寫上去,我試過用相對路徑,但總會訓練失敗; bg.txt 也要用絕對路徑;
2. –w 和 –h 都要寫上與樣本大小的一致的尺寸
3. 若遇到「記憶體什麼不能read」的問題,很有可能是bg.txt的格式有誤,回去
4. 關於 opencv_haartraining.exe 的引數用法,在參考英文資料**裡有詳細介紹
結果如下:
(可能實際結果與上圖有出入, 但看到最後的 ,就說明訓練成功了。
在bin目錄會生成乙份可愛的data.xml文件,這個就是我們想要的結果了!
whew….done! give me a five! ^_^
OpenCV訓練分類器
opencv訓練分類器 一 簡介 目標檢測方法最初由paul viola viola01 提出,並由rainer lienhart lienhart02 對這一方法進行了改善。該方法的基本步驟為 首先,利用樣本 大約幾百幅樣本 的 harr 特徵進行分類器訓練,得到乙個級聯的boosted分類器。分...
訓練Opencv分類器
由於在做乙個專案的需要,接觸到opencv。並使用其中的機器識別,自己會的實在不多。在使用它自帶的人臉分類器時,用自己的arm板上的攝像頭拍的,基本上識別不出。於是自己想訓練乙個分類器 用自己arm板上的攝像頭拍 給自己在專案中使用。於是找了個教室,拍了三百張 回去做分類器。開始以為做分類器會很麻煩...
OpenCV訓練分類器
一 簡介 目標檢測方法最初由paul viola viola01 提出,並由rainer lienhart lienhart02 對這一方法進行了改善。該方法的基本步驟為 首先,利用樣本 大約幾百幅樣本 的 harr 特徵進行分類器訓練,得到乙個級聯的boosted分類器。分類器中的 級聯 是指最終...