使用opencv中的adboost算法訓練分類器

如何使用opencv中的adboost算法訓練分類器

需要的工具


  • opencv視覺庫
  • vs開發環境

步驟


1. 正負樣本的選取
2. 樣本描述文件的創建
    使用dos命令和opencv中的createSamples程序創建樣本描述文件
  • 正樣本描述文件的創建

    1. 使用命令將當前目錄切換到正樣本圖片的目錄
    
    2. 輸入dir /b > pos.txt,此時目錄中生成一個pos.txt文件,打開pos.txt文件,刪除最後一行保存文件
    
    3. 一個證樣本描述文件需要包含文件名,正樣本在圖片中的數目,位置和大小,具體格式如下faces/00.bmp 1 0 0 20 20。因此,需要打開剛剛生成的pos.txt文件,使用查找替換功能,將‘bmp’替換成‘bmp 1 0 0 20 20’
    
    4. 因爲在使用opencv中opencv haartraining 程序訓練時輸入的正樣本是vec文件,所以需要使用opencv中的opencv createsample程序生成pos.vec證樣本描述文件
        opencv haartraining 程序和opencv createsample程序opencv安裝目錄的bin文件目錄下可以找到,找到後複製到當前目錄下
    
    5. 複製到當前目錄下之後,在dos命令窗口下運行命令‘opencv_createsamples.exe -info pos.txt -vec pos.vec -num 2706 -w 20 -h 20’即可生成pos.vec正樣本描述文件
    
        1. 出現應用程序錯誤:應用程序無法正常啓動(0xc000007b),請單擊“確定”關閉應用程序
            原因:x86程序在x64下運行
            解決方案:用X64程序運行
        2. opencv error:unknown error code -9 <> in cvSetImageROI
            原因:找不到圖片
            解決方案:將圖片文件夾往上一級目錄提
    
  • 負樣本描述文件的創建

    只需生成neg.txt文件即可,執行2.1.1和2.1.2兩步
    

訓練分類器


1. 使用命令‘opencv_haartraining.exe -data cascade -vec pos.vec -bg neg.txt -sym -npos 2706 -nneg 4300 -mem 2000 -mode ALL -w 20 -h 20’
    1. opencv error:assertion failed <elements_read == 1> in icvGetHaarTraininDataFromVecCallback

    原因:每個強分類器訓練過程中都會從剩下的countvec中抽樣,每次訓練完一個強分類器之後,都會從總樣本中剔除,一直進行nstage次,如果npos設置與vec中總樣本數相同時,第二個強分類器訓練時必然會報錯,提示樣本數不足
    解決方案:npos與nneg設置小一點即可
發佈了36 篇原創文章 · 獲贊 2 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章