若該文為原創文章,轉載請註明原文出處
本文章部落格地址:https://blog.csdn.net/qq21497936/article/details/109096211
各位讀者,知識無窮而人力有窮,要麼改需求,要麼找專業人士,要麼自己研究
紅胖子(紅模仿)的博文大全:開發技術集合(包含Qt實用技術、樹莓派、三維、OpenCV、OpenGL、ffmpeg、OSG、微控制器、軟硬結合等等)持續更新中…(點選傳送門)
上一篇:《OpenCV開發筆記(七十):紅胖子帶你傻瓜式編譯VS2017x64版本的openCV4》
下一篇:持續補充中…
紅胖子,來也!
做影象處理,經常頭痛的是明明分離出來了(非顏色的),分為幾塊區域,那怎麼知道這幾塊區域到底哪一塊是我們需要的,那麼這部分就涉及到需要識別了。
識別可以自己寫模板匹配、特徵點識別、級聯分類器訓練識別。
本文章就是講解級聯分類器的訓練與識別。
OpenCV的級聯分類器分有兩個,分別為Harr級聯分類器和LBP級聯分類器。具體級聯分類器請檢視:
《OpenCV開發筆記(五十四):紅胖子8分鐘帶你深入瞭解Haar級聯分類器進行人臉檢測(圖文並茂+淺顯易懂+程式原始碼)》
《OpenCV開發筆記(五十五):紅胖子8分鐘帶你深入瞭解Haar、LBP特徵以及級聯分類器識別過程(圖文並茂+淺顯易懂+程式原始碼)》
目標是識別視訊中的歌手,我們先手動採集資料集合。
視訊為《綠色》,如下圖:
正樣本的尺寸不是必須一致的,但是要和生成的正樣本向量檔案中的寬高有相同的比例(因為訓練過程中,會根據設定的寬高進行等比縮放,比如設定正版本圖片是128x128的,那麼樣本為256x256會縮放,假設為256x128的那麼比例就不同了,這個圖怎麼處理?待定);
正樣本圖片應該儘可能包含少的干擾背景資訊。在訓練過程中多餘的背景資訊也會成為正樣本的一個區域性特徵,此處與深度學習不同,深度學習現在主流無腦深度學習,影象基本的一些去噪都可能不做。
資料來源儘可能做到多樣化,比如樣本為車,車的姿態場景應稍豐富些。同一正樣本目標的影象太多會使區域性特徵過於明顯,造成這個目標的訓練過擬合,影響檢測精度,不利於訓練器泛化使用。
我們採集視訊的人臉,先把視訊解碼後儲存成jpg圖片。
此處省略一萬字…
使用opencv自帶的命令列工具opencv_createsamples.exe
xxx.jpg nums x y width height
例如:圖片中有兩個目標
xxx.jpg 2 0 0 100 100 200 200 100 100
生成樣本在windows上依託命令列
dir /b > pos.data
opencv_createsamples -vec pos.vec -info pos/pos.txt -bg neg/neg.txt -show -w 50 -h 70 、
-maxxangle 6.28 -maxyangle 6.28 -maxzangle 6.28
(注意:LBP特徵50x70等都可以可以訓練,實測HAAR則必須是24x24 or 20x20)
使用opencv自帶的命令列工具opencv_traincascade.exe,可以訓練三個特徵目標:HAAR、HOG、LBP。
–cascadeParams–
–boostParams–
–haarFeatureParams–
opencv_traincascade.exe -data data -vec pos.vec -bg neg\neg.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType HAAR -w 64 -h 64
訓練出錯如下:
更換LBP特徵,繼續訓練:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\neg.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 64 -h 64
訓練出錯如下:
根據錯誤寬高是要跟建立的樣本一樣,改為50x70,(建立的樣本為50x70),繼續訓練:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\neg.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 50 -h 70
負樣本再生成一次絕對路徑:
dir /b /s >negAb.txt
刪掉非圖片的行
然後繼續訓練:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\negAb.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 50 -h 70
訓練出錯,如下:
手動建立data目錄
繼續訓練:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\negAb.txt -numPos 41 -numNeg 215 -numStages 16 -featureType LBP -w 50 -h 70
然後,正常訓練,訓練完成:
要訓練haar特徵級聯分類器,最開始建立樣本就必須為24x24 or 20x20的(經過多次嘗試論證),最終設定24x24訓練如下:
opencv_traincascade.exe -data data -vec pos.vec -bg neg\negAb.txt \
-numPos 41 -numNeg 215 -numStages 16 -featureType HAAR -w 24 -h 24
使用該級聯分類器,使用cascade.xml載入即可。
級聯分類器的測試請參考《OpenCV開發筆記(五十四):紅胖子8分鐘帶你深入瞭解Haar級聯分類器進行人臉檢測(圖文並茂+淺顯易懂+程式原始碼)》
上一篇:《OpenCV開發筆記(七十):紅胖子帶你傻瓜式編譯VS2017x64版本的openCV4》
下一篇:持續補充中…