赞
踩
![[Pasted image 20230501213228.png]]
在文件夹中创建pos和neg两个文件夹
正样本文件
![[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
重命名文件后缀
import os
for filename in os.listdir('logo/'): #‘logo/’是文件夹路径,你也可以替换其他
newname = filename.replace('jpg', 'png') #把jpg替换成png
os.rename('logo/'+filename, 'logo/'+newname)
代码:建议正样本像素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
在正样本文件中打开cmd
输入以下代码:
dir /b/s/p/w *.jpg > pos.txt
然后将生成的文件移到project根目录下
对负样本进行相同操作
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)
标记完以后将之前的删除
![[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
opencv_traincascade.exe -data xml -vec pos.vec -bg neg.txt -numPos 250 -numNeg 500 -numStages 20 -w 20 -h 20 -mode ALL pause
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()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。