一、下载人脸口罩数据集

下载人脸口罩数据集的链接如下:

https://download.csdn.net/download/qq_42451251/12566250

而后将数据集重命名为连续序列,重命名代码如下:

#对数据集重命名

#coding:utf-8

import os

path = "F:\\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 pandas as pd

import cv2

for n in range(1000,1606):#代表正数据集中开始和结束照片的数字

path='F:\\mask\\have_mask\\'+str(n)+'.jpg'

# 读取图片

img = cv2.imread(path)

img=cv2.resize(img,(20,20)) #修改样本像素为20x20

cv2.imwrite('F:\\mask\\have_mask\\' + str(n) + '.jpg', img)

n += 1

再创建正负样本数据集文档

打开打开cmd,进入到存放正样本的have_mask文件夹

F:

cd mask\have_mask

而后再cmd终端输入如下命令创建路径文档

dir /b/s/p/w *.jpg > have_mask.txt

而后对负样本数据集路径文档创建

先进入负样本文件夹

cd /mask/no_mask/

而后输入如下命令,创建负样本路径txt文档

dir /b/s/p/w *.jpg > no_mask.txt

二、对口罩数据集的进行模型训练

创建xml文件夹,存放OpenCV训练好的模型

对正负样本txt文档进行预处理

代码如下:

#正样本文件预处理 没行目录结尾加入 1 0 0 20 20

#coding:utf-8

import os

#Houzui="_Apple"

Houzui=r" 1 0 0 20 20" #后缀

filelist = open('F:\\mask\\have_mask.txt','r+',encoding = 'utf-8')

line = filelist.readlines()

for file in line:

file=file.strip('\n')+Houzui+'\n'

print(file)

filelist.write(file)

而后对对负样本同样执行操作,代码如下:

#负样本文件预处理 没行目录结尾加入 1 0 0 60 60

#coding:utf-8

import os

#Houzui="_Apple"

Houzui=r" 1 0 0 60 60" #后缀

filelist = open('F:\\mask\\no_mask.txt','r+',encoding = 'utf-8')

line = filelist.readlines()

for file in line:

file=file.strip('\n')+Houzui+'\n'

print(file)

filelist.write(file)

而后生成正样本mask.vec文件和负样本mask1.vec文件

在cmd终端,输入以下命令,生成mask.vec文件:

cd /mask/

opencv_createsamples.exe -vec mask.vec -info have_mask.txt -num 410 -w 20 -h 20

同样生成负样本的mask1.vec,代码如下:

opencv_createsamples.exe -vec mask1.vec -info no_mask.txt -num 1688 -w 60 -h 60

三、进行模型训练

在数据集同级目录创建一个txt文档,写入如下代码:

opencv_traincascade.exe -data xml -vec mask.vec -bg no_mask.txt -numPos 385 -numNeg 400 -numStages 20 -w 20 -h 20 -mode ALL

pause

打开traincascade.bat文件,进行人脸口罩模型训练,实验过程如下图:

四、进行戴口罩检测

检测代码如下:

import cv2

detector= cv2.CascadeClassifier('D:/python/python1/Lib/site-packages/cv2/data/haarcascade_frontalface_default.xml')

mask_detector=cv2.CascadeClassifier('F:/mask/xml/cascade.xml')

cap = cv2.VideoCapture(0)

while True:

ret, img = cap.read()

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

faces = detector.detectMultiScale(gray, 1.1, 3)

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

#参数分别为 图片、左上角坐标,右下角坐标,颜色,厚度

face=img[y:y+h,x:x+w] # 裁剪坐标为[y0:y1, x0:x1]

mask_face=mask_detector.detectMultiScale(gray, 1.1, 5)

for (x2,y2,w2,h2) in mask_face:

cv2.rectangle(img, (x2, y2), (x2 + w2, y2 + h2), (0, 0, 255), 2)

cv2.imshow('mask', img)

cv2.waitKey(3)

cap.release()

cv2.destroyAllWindows()

而后就能正确运行结果了!本次实验就到此结束了!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐