PythonOpenCV創建級聯文件(Windows7/10環境)

      網友投稿 986 2022-05-29

      目錄

      搭建環境

      準備數據集

      訓練級聯文件

      之前使用Python+OpenCV實現交通路標識別,具體實現步驟及心得如下:

      OpenCV訓練屬于自己的xml文件,需以下幾個步驟:

      1、首先下載OpenCV(Windows版);

      2、準備數據集,分為正樣本集和負樣本集;

      3、生成路徑,將正樣本集的路徑要存成 *.vec格式;負樣本集的路徑不做要求,*.txt就可以;

      4、訓練xml文件。

      搭建環境

      OpenCV創建級聯文件需要先下載OpenCV(Windows版)。

      接下來傻瓜式安裝操作,安裝到指定路徑。

      安裝成功后開始配置環境變量(配置環境變量比較簡單,此處省略),稍后會用到OpenCV中的opencv_createsamples.exe和opencv_traincascade.exe文件訓練級聯文件,我的安裝路徑在D盤,所以設置環境變量的路徑是D:\opencv\opencv\build\x64\vc15\bin。 注意:若直接在D:\opencv\opencv\build\x64\vc15\bin路徑下訓練模型,可以不用配置環境變量。

      準備數據集

      需要準備正樣本數據集(所要識別的物體)和負樣本數據集(背景圖片、干擾圖片),數據集數量越多種類越復雜越好。

      通常正樣本數據裁剪為20*20或40*40大小的像素即可(這里我使用40*40像素訓練模型,9小時+可以訓練完成),注意:像素過大訓練速度相當慢,圖片像素最好是正方形圖片,長寬相等。

      通常負樣本數據集是識別物體的背景環境照片,圖片越多越復雜抗干擾能力越強,負樣本圖片可以不用裁剪為固定大小,但是為了提升訓練速度建議進行合理裁剪。

      正樣本圖片如下:

      負樣本圖片如下:

      為了操作方便,我寫了Python程序實現批量調整圖片數據大小和圖片命名,具體如下:

      # -*- coding:utf8 -*-

      import os

      from PIL import Image

      '''

      批量重命名文件夾中的圖片文件

      '''

      class BatchRename():

      def __init__(self):

      self.path = r'C:\Users\Administrator\Desktop\opencv-haar-classifier-training-master\positive_images'

      def rename(self):

      filelist = os.listdir(self.path)

      total_num = len(filelist)

      i = 0

      for item in filelist:

      if item.endswith('.jpg'):

      src = os.path.join(os.path.abspath(self.path), item)

      print(src)

      dst = os.path.join(os.path.abspath(self.path), str(i) + '.jpg')

      try:

      os.rename(src, dst)

      print ('converting %s to %s ...' % (src, dst))

      i = i + 1

      except :

      continue

      print ('total %d to rename & converted %d jpgs' % (total_num, i))

      if __name__ == '__main__':

      demo = BatchRename()

      demo.rename()

      '''

      批量修改圖片尺寸

      '''

      #提取目錄下所有圖片,更改尺寸后保存到另一目錄

      import os.path

      import glob

      def convertjpg(jpgfile,outdir,width=40,height=40):

      img=Image.open(jpgfile)

      try:

      new_img=img.resize((width,height),Image.BILINEAR)

      new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))

      except Exception as e:

      print(e)

      for jpgfile in glob.glob(r"C:\Users\Administrator\Desktop\opencv-haar-classifier-training-master\positive_images\*.jpg"):

      #像素修改后存入images文件

      convertjpg(jpgfile,r"C:\Users\Administrator\Desktop\opencv-haar-classifier-training-master\images")

      訓練級聯文件

      1、首先按照要求創建訓練文件夾

      negative_images文件夾存放負樣本圖片。

      positive_images文件夾存放正樣本圖片。

      xml文件夾存放稍后生成的xml級聯文件。

      opencv_createsamples.exe負責生成*.vec文件。

      opencv_traincascade.exe負責訓練級聯文件模型。

      另外我還寫了兩個Python文件負責批量處理圖片命名、尺寸縮小和生成對應的txt文件。

      2、生成指定的txt文件路徑

      執行這一步之前保證文件已經命名規范,尺寸縮小到合適大小。

      運行生成txt文件.py文件,生成對應的正樣本路徑和負樣本路徑文件,效果如下:

      文件夾結構如下:

      正樣本路徑文件(pos.txt)格式如下:

      正樣本路徑文件(neg.txt)格式如下:

      生成對應的txt文件Python代碼如下:

      import os

      '''

      正樣本數據生成txt文件

      '''

      file_dir=os.getcwd()

      file_dir=r'C:\Users\Administrator\Desktop\opencv-haar-classifier-training-master\positive_images'

      L=[]

      Python—OpenCV創建級聯文件(Windows7/10環境)

      i=0

      with open("pos.txt","w+") as f:

      for root, dirs, files in os.walk(file_dir):

      for file in files:

      if os.path.splitext(file)[1] == '.jpg':

      L.append(os.path.join(root, file))

      f.write(L[i]+' 1'+' 0'+' 0'+' 40'+' 40'+'\n')

      i+=1

      '''

      負樣本數據生成txt文件

      '''

      file_dir=r'C:\Users\Administrator\Desktop\opencv-haar-classifier-training-master\negative_images'

      L=[]

      i=0

      with open("neg.txt","w+") as f:

      for root, dirs, files in os.walk(file_dir):

      for file in files:

      if os.path.splitext(file)[1] == '.jpg':

      L.append(os.path.join(root, file))

      f.write(L[i]+'\n')

      i+=1

      3、獲取正樣本矢量集vec文件

      在文件夾下新建createsamples.bat,批處理文件,內容如下:

      opencv_createsamples.exe -vec pos.vec -info pos.txt -num 1100 -w 40 -h 40

      pause

      其中,-vec后面是將生成的正樣本矢量集vec文件,-info后面是正樣本路徑文件,-num后面的數字是正樣本個數,-w后面的數字是正樣本圖片的長,-h后面的數字是正樣本圖片的高。

      雙擊createsamples.bat后出現pos.vec即為運行成功。

      此時文件夾結構如下:

      4、訓練級聯文件模型

      在文件夾下新建train.dat文件,內容如下:

      opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 1100 -numNeg 3205 -numStages 15 -w 40 -h 40 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -mode ALL

      pause

      其中,-data 是存放訓練好的分類器的路徑 ,-vec 就是存放.vec的路徑, -bg 負樣本描述文件, -numPos 每一階段訓練的正樣本數量 , -numNeg 每一階段訓練的負樣本數量 (網上說-numPos的參數要比實際正樣本數量小,-numNeg 的參數要比實際負樣本數量大 ), -numStages 訓練階段數 (這個參數不能太大也不能太小 ,太大訓練時間過長,如果太小的話 生成的xml文檔分類效果可能就不太好?), -featureType 選擇LBP還是HAAR 在此選用LBP ,-w -h 訓練樣本尺寸 和vec生成的尺寸大小相同 不然會宕機, -minHitRate? 最小命中率 ,-maxFalseAlarmRate 最大虛警率 ,最后需要在加上 -mode ALL。

      此時文件夾結構如下:

      雙擊train.bat后進入訓練模式,進入漫長等待,效果如下:

      最后訓練完成之后級聯文件保存在xml文件夾中。

      其中,只有第一個cascade.xml文件是我們所需要的文件,其余文件是訓練過程中生成的檢查的文件,防止訓練過程中出現意外程序重頭訓練。

      下面使用Python代碼進行模型測試,效果如下:

      驗證Python代碼如下:

      import numpy as np

      import cv2

      face_cascade = cv2.CascadeClassifier('cascade.xml')

      cap = cv2.VideoCapture(0)

      while True:

      ret,img = cap.read()

      gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)

      faces = face_cascade.detectMultiScale(gray, 1.3, 5)

      for (x,y,w,h) in faces:

      cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2)

      cv2.imshow('img',img)

      if cv2.waitKey(1) &0xFF == ord('q'):

      break

      cap.release()

      cv2.destroyAllWindows()

      最后我將模型搭建在樹莓派上,發現識別效果,處理速度還是蠻不錯的。

      OpenCV Python Windows 機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:JVM08-虛擬機故障處理之可視化故障處理工具JConsole工具
      下一篇:5分鐘掌握思科、華為基礎配置
      相關文章
      精品亚洲国产成AV人片传媒| 久久精品国产亚洲AV麻豆不卡| 久久亚洲AV成人无码| 超清首页国产亚洲丝袜| 亚洲AⅤ永久无码精品AA| 麻豆亚洲AV成人无码久久精品| 亚洲精品无码专区| 亚洲中文字幕乱码一区| 亚洲精品GV天堂无码男同| 亚洲av无码专区首页| 日本亚洲欧美色视频在线播放| 亚洲成av人片在线天堂无| 亚洲欧美中文日韩视频| 亚洲日本天堂在线| 亚洲AV色欲色欲WWW| 亚洲欧美在线x视频| 日本中文一区二区三区亚洲| mm1313亚洲国产精品美女| 亚洲高清免费视频| 久久综合亚洲色HEZYO国产| 亚洲熟妇中文字幕五十中出| 国产v亚洲v天堂无码网站| 亚洲AV无码久久精品蜜桃| 中文字幕亚洲综合精品一区| 亚洲第一成年网站大全亚洲| 亚洲国产午夜精品理论片| 亚洲视频在线观看2018| 亚洲精品乱码久久久久蜜桃| 亚洲暴爽av人人爽日日碰| 亚洲国产成人久久一区WWW| 久久久久亚洲AV成人网人人网站| 亚洲欧洲∨国产一区二区三区| 亚洲大尺度无码专区尤物| 青青草原精品国产亚洲av| 亚洲国产成+人+综合| 亚洲日本va在线观看| 亚洲精品成a人在线观看夫| 亚洲国产精品无码久久青草 | 亚洲mv国产精品mv日本mv| 亚洲中文字幕久久精品蜜桃| 美国毛片亚洲社区在线观看|