当前位置:   article > 正文

用opencv训练自己的数据集_opencv训练数据集

opencv训练数据集

第一步,创建文件夹

![[Pasted image 20230501213228.png]]
在文件夹中创建pos和neg两个文件夹

第二步,将正样本文件和负样本文件(格式为jpg)导入

正样本文件
![[Pasted image 20230501213459.png]]
负样本文件
![[Pasted image 20230501213437.png]]
一般正样本文件数量要比负样本文件少

第三步,给图像编号以及重命名

这里注意:1.图像要从1000开始编号,不然后续如果样本数量太少会导致没法运行
2.文件路径是要修改的路径,而且是只能出现一对引号

import os 
path = r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\have_mask' # 人脸口罩数据集正样本的路径 
filelist = os.listdir(path) count = 1000 # 开始文件名1000.jpg 
for file in filelist: Olddir = os.path.join(path, file) 
if os.path.isdir(Olddir): 
continue 
filename = os.path.splitext(file)[0] 
filetype = os.path.splitext(file)[1] 
Newdir = os.path.join(path, str(count) + filetype) os.rename(Olddir, Newdir) count += 1
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

重命名文件后缀

import os
for filename in os.listdir('logo/'):   #‘logo/’是文件夹路径,你也可以替换其他
	newname = filename.replace('jpg', 'png')  #把jpg替换成png
	os.rename('logo/'+filename, 'logo/'+newname)  
  • 1
  • 2
  • 3
  • 4

第四步,修改正负样本像素大小

代码:建议正样本像素20* 20 ,负样本80

import pandas as pd import cv2 for n in range(10000, 11790): # 代表正数据集中开始和结束照片的数字 
path = r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\no_mask/' + str(n) + '.jpg' # 读取图片 
img = cv2.imread(path) img = cv2.resize(img, (80, 80)) cv2.imwrite(r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\no_mask/' + str(n) + '.jpg', img) 
n += 1
  • 1
  • 2
  • 3
  • 4

第五步,创建txt文件

在正样本文件中打开cmd
输入以下代码:

dir /b/s/p/w *.jpg > pos.txt
  • 1

然后将生成的文件移到project根目录下
对负样本进行相同操作

第六步,标记txt文件

coding:utf-8 Houzhui=r" 1 0 0 20 20" #后缀 
filelist = open(r'C:\Users\Gaomagic\PycharmProjects\kouzhaodetect\mask\have_mask.txt','r+',encoding = 'utf-8') 
line = filelist.readlines() 
for file in line: 
file=file.strip('\n')+Houzhui+'\n' 
print(file) 
filelist.write(file)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

标记完以后将之前的删除

第七步,生成vec文件

![[Pasted image 20230501215730.png]]
将上图中的所有文件复制到目标Project根目录下
按 win+R 输入 cmd 进入命令窗口, 然后进入到 Project 文件夹,然后输入如下命令(其中num是正样本数量):

opencv_createsamples.exe -vec havemask.vec -info pos.txt -num 250 -w 20 -h 20
  • 1

第八步,训练模型

  1. 新建start.bat文件
    在新建的tart.txt文件中输入如下代码以后重命名为bat:
opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 250 -numNeg 500 -numStages 20 -w 20 -h 20 -mode ALL pause
  • 1
  1. 点击start.bat运行
    ![[屏幕截图 2023-05-01 213714.png]]
    经过漫长等待,得到最终结果

第九步,打开Pycharm测试

import cv2
 
detector = cv2.CascadeClassifier(r'D:\AMark_Files\Magic\AI_Version\TrainBoling\xml\cascade.xml')
mask_detector = cv2.CascadeClassifier(r'D:\AMark_Files\Magic\AI_Version\TrainBoling\xml\cascade.xml')
cap = cv2.VideoCapture(0)
while True:
    ret, img = cap.read()
    gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    nose = detector.detectMultiScale(gray, 1.1, 3)
    if ret:
        for (x, y, w, h) in nose:
            face = img[y:y + h, x:x + w]  
            mask_face = mask_detector.detectMultiScale(gray, 1.1, 5)
            cv2.rectangle(img, (x, y), (x + w, y + h), (0, 0, 255), 2)
            cv2.putText(img, "no_mask", (x, y), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 0, 255), 2)
            for (x2, y2, w2, h2) in mask_face:
                cv2.rectangle(img, (x2, y2), (x2 + w2, y2 + h2), (0, 255, 0), 2)
                cv2.putText(img, "have_mask", (x2, y2), cv2.FONT_HERSHEY_SIMPLEX, 1, (0, 255, 0), 2)
        cv2.imshow('mask', img)
        cv2.waitKey(3)
 
cap.release()
cv2.destroyAllWindows()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/263943
推荐阅读
相关标签
  

闽ICP备14008679号