Windows使用opencv训练模型过程记录(提供样本)
首先按照這個指引安裝好所需要的工具:
Windows環境下訓練OpenCV分類器
Windows環境下訓練OpenCV分類器_@陌阡的博客-CSDN博客
Python + pip
下載 opencv_createsamples.exe和opencv_traincascade.exe
準備訓練庫opencv_bin,自己拍照進行訓練。
自己試了幾個訓練結果,發現都不理想。一般訓練識別不準確。
后來經過多次嘗試,覺得應該收集更多正樣本,于是以消毒液為例子,自己進行拍照,剪裁得到正樣本。我拍了130多張。
然后使用QQ截圖并剪裁功能,剪裁出了質量達標的105張:
然后使用上面博主提供的1.py進行灰度和大小處理,得到正樣本105張:
| import os from skimage.color import rgb2gray import numpy as np import skimage.io as io import cv2 def convert_gray(f, **args): ?# 圖片處理與格式化的函數 ????rgb = io.imread(f) ?# 讀取圖片 ????gray = rgb2gray(rgb) ?# 將彩色圖片轉換為灰度圖片 ????dst = cv2.resize(gray, (50, 50)) ?# 調整大小,圖像分辨率為40*40 ????return dst if __name__ == '__main__': ????''' ????批量轉灰度圖 ????''' ????datapath = r'.' ?# 圖片所在的路徑 ????str = datapath + '/org/*.jpg' ?# 識別.jpg的圖像 ????coll = io.ImageCollection(str, load_func=convert_gray) ?# 批處理 ????for i in range(len(coll)): ????????io.imsave('./pos/' + np.str(i) + '.jpg', coll[i]) ?# 保存圖片 |
然后使用3.py生成info.txt, 使用上面下載到的負樣本生成 bg.txt
| import os def create_pos_n_neg(): ????for file_type in ['pos', 'neg1964']: #此處修改neg或pos即可 ????????if not os.path.exists(file_type): ????????????continue ????????for img in os.listdir(file_type): ????????????if (file_type.startswith('neg')): ????????????????line = 'D:/DEV_SDKs/Opencv/train3/'+file_type + '/' + img + '\n' ????????????????with open('bg.txt', 'a') as f: ????????????????????f.write(line) ????????????elif (file_type.startswith('pos')): ????????????????line = 'D:/DEV_SDKs/Opencv/train5/'+file_type + '/' + img + ' 1 0 0 50 50\n' ????????????????with open('info.txt', 'a') as f: ????????????????????f.write(line) if __name__ == '__main__': ????create_pos_n_neg() ????print('描述文件已生成!') |
生成的info.txt內容是這樣的:
| D:/DEV_SDKs/Opencv/train5/pos/0.jpg 1 0 0 50 50 D:/DEV_SDKs/Opencv/train5/pos/1.jpg 1 0 0 50 50 D:/DEV_SDKs/Opencv/train5/pos/10.jpg 1 0 0 50 50 ... |
生成的bg.txt內容是這樣的:
| D:/DEV_SDKs/Opencv/train5/neg/1.jpg D:/DEV_SDKs/Opencv/train5/neg/10.jpg D:/DEV_SDKs/Opencv/train5/neg/100.jpg D:/DEV_SDKs/Opencv/train5/neg/11.jpg ... |
這里使用的是絕對路徑,那只需要復制info.txt, bg.txt到需要的目錄而不需要修改圖片所在的目錄 。
下面到opencv_bin目錄下,把info.txt, bg.tx粘貼下來。生成樣本文件:
| opencv_createsamples.exe -vec info.vec -info info.txt -bg bg.txt -num 105 -w 50 -h 50 |
這一步會生成一個?info.vec文件,下一步需要用到。
在opencv_bin目錄下創建一個data目錄用于存放結果,然后調用訓練命令:
| opencv_traincascade.exe -data data -vec info.vec -bg bg.txt -numPos 105 -numNeg 315 -numStages 20 ?-w 50 -h 50 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -featureType LBP |
注意:雖然這里有1964個負樣本,但是不能用那么多,只需要正樣本的3倍就可以了;使用太多反而增加訓練時間,影響準確率。
等待了大約5小時,到stage15后就停止了,生成了一個13kb的結果xml, 測試了一下,基本能達到要求,需要還是有一定的誤識別率,但是對于需要識別的本尊基本都能穩定識別到了。
其中樣本已上傳:
消毒液瓶doctmp.zip-機器學習文檔類資源-CSDN下載
總結
以上是生活随笔為你收集整理的Windows使用opencv训练模型过程记录(提供样本)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: LiveData学习
- 下一篇: 每日一道算法题-寻找丑数