對人臉檢測訓練樣本如何生成正樣本描述檔案和負樣本集合檔案
本博是筆者讀書筆記整理,歡迎轉載,請註明出處,如有不足,還望網友們指教。
準備工作:
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檔案即為所求。