1. 程式人生 > >對人臉檢測訓練樣本如何生成正樣本描述檔案和負樣本集合檔案

對人臉檢測訓練樣本如何生成正樣本描述檔案和負樣本集合檔案

本博是筆者讀書筆記整理,歡迎轉載,請註明出處,如有不足,還望網友們指教。

準備工作:

1 兩個資料夾,一個存放的是人臉樣本,一個存放的是非人臉樣本;

2 opencv_createsamples.exe  該可執行檔案在opencv的bin資料夾下,請注意查詢;

注:

正樣本需要生成的是正樣本描述檔案,負樣本生成的是負樣本集合檔案,兩者是不一樣的,因為,在正樣本的描述檔案中的每一行的末尾都含有1  0  0 20 20這樣的內容,1的含義是該幅人臉圖片中只含有一個人臉,後面兩個0的含義是,人臉在圖片的啟事座標為(0,0);最後兩個20的含義是該人臉的大小,寬為20個畫素,高為20個畫素。

一 生成正樣本描述檔案

1 利用上一篇內容,可以對正樣本人臉圖片生成一個.txt檔案,下面需要進一步處理。假設這個已經生成的.txt檔案的名字是pos.txt。

其內容舉例:

F:\OpenCV\train\MSLGface_train3\faces\004998.bmp
F:\OpenCV\train\MSLGface_train3\faces\006994.bmp
F:\OpenCV\train\MSLGface_train3\faces\007395.bmp
F:\OpenCV\train\MSLGface_train3\faces\010796.bmp
F:\OpenCV\train\MSLGface_train3\faces\014985.bmp
。。。。。

再新建一個批處理檔案(.bat),暫時取名為pos_vec.bat,其內容如下:

@echo off
set c= 1 0 0 20 20
for /f "tokens=* delims= " %%i in  (pos.txt) do echo %%i%c%>>"pos5.txt"
pause

注:

“tokens=* ”表示取整個行當成一個整體;

“delims= ”的後面一定要有空格;

%%i in  (pos.txt):中間也一定有空格,當時我沒有,老是出錯;

  這樣,結果就生成了一個新的pos5.txt檔案,處理後的內容舉例:

F:\OpenCV\train\MSLGface_train3\faces\004998.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\006994.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\007395.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\010796.bmp 1 0 0 20 20
F:\OpenCV\train\MSLGface_train3\faces\014985.bmp 1 0 0 20 20

。。。。。

2 執行opencv_createsamples.exe

新建一個opencv_createsamples.bat檔案,編輯內容如下:

cd F:\OpenCV\train\MSLGface_train3
opencv_createsamples.exe -info pos5.txt -vec vec.txt -w 20 -h 20 -num 2706
pause

注:

上述絕對路徑“ F:\OpenCV\train\MSLGface_train3”要根據你自己的路徑自行修改;

-info pos5.txt:表示輸入需要處理的檔案;

-vec vec.txt:表示輸出檔案,也有人是輸出的.vec檔案,不過效果都是都是一樣的;

到達這一步,正樣本描述檔案終於訓練出來的,不容易呀,不容呀抓狂

二 生成負樣本集合檔案檔案

負樣本集合檔案的生成比較簡單,請參考上一篇部落格http://blog.csdn.net/ding977921830/article/details/45913789,生成的.txt檔案即為所求。