以下编程在Jupyter notbook平台上进行

一、OpenCV下载安装

二、人脸口罩数据集下载处理

(一)人脸口罩数据集下载

下载人脸口罩数据集的目的是利用OpenCV进行模型训练,这里采用口罩数据集的正负比列为1:3,即500张戴口罩的人脸图片和1500张不戴口罩的人脸图片。

链接:https://pan.baidu.com/s/11PBCmDDx7Dtx_ckjwZR2uw

提取码:n2um

解压之后,将压缩包中的mask文件自行选择文件夹放置,以便之后的操作。

(二)人脸口罩数据集的处理

1、将数据集重命名为连续序列

因为数据集中的图片序列是不连续的,因此这里需要编程将数据集的正负样本重命名为连续序列,以便像素调整。

重命名正样本序列Python代码:

#对数据集重命名

#coding:utf-8

import os

path = "D:\\facemask\\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

命名之后,正样本序列如下:

重命名负样本序列Python代码:

#对数据集重命名

#coding:utf-8

import os

path = "D:\\facemask\\mask\\no_mask" #人脸口罩数据集的路径

filelist = os.listdir(path)

count=10000 #开始文件名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

重命名之后,负样本序列如下:

2、正负样本数据集像素处理

正样本数据集的像素最佳设为20x20,这样的模型训练精度更高;负样本数据集像素不低于50x50,这样处理可以加快模型训练的速度。

修改正样本数据集像素为20x20Python代码:

#修改正样本像素

import pandas as pd

import cv2

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

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

# 读取图片

img = cv2.imread(path)

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

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

n += 1

修改像素之后,序列如下:

修改负样本数据集像素为80x80Python代码:

#修改负样本像素

import pandas as pd

import cv2

for n in range(10000,11790):#代表负样本数据集中开始和结束照片的数字

path='D:\\facemask\\mask\\no_mask\\'+str(n)+'.jpg'

# 读取图片

img = cv2.imread(path)

img=cv2.resize(img,(80,80)) #修改样本像素为60x60

cv2.imwrite('D:\\facemask\\mask\\no_mask\\' + str(n) + '.jpg', img)

n += 1

修改像素之后,序列如下:

3、创建正负样本数据集路径的txt文件

(1)创建正样本数据集txt文件

win+R打开窗口输入cmd,进入命令提示符界面,进入have_mask文件夹

输入命令创建路径文件

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

have_mask.txt文件位置在正样本数据集文件夹中

(2)创建负样本数据集txt文件(方法同正样本数据集一样)

然后将have_mask.txt和no_mask.txt文件放到mask目录下

三、训练人脸口罩数据集模型

1、创建xml文件夹存放训练好的模型

2、将OpenCV安装路径 \opencv\build\x64\vc14\bin下的opencv_createsamples.exe可执行文件和opencv_traincascade.exe可执行文件及另外两个下图文件复制到数据集同级目录,如下所示:

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

正负样本需要生成 .vec格式的文档进行模型训练,因此需要通过对txt文档进行预处理,向have_mask.txt文件中末尾加入 1 0 0 20 20。

正样本处理Python代码:

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

#coding:utf-8

import os

#Houzui="_Apple"

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

filelist = open('D:\\facemask\\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)

负样本处理Python代码:

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

#coding:utf-8

import os

#Houzui="_Apple"

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

filelist = open('D:\\facemask\\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)

这个处理不会自动覆盖之前的文件内容,所以需要手动将之前的内容剪切出来 ,保存为have_mask1.txt文件,have_mask.txt文件中只保留末尾为1 0 0 20 20的内容,如下:

同理,对no_mask.txt文件执行同样的操作手动将之前的内容剪切出来 ,保存为no_mask1.txt文件,no_mask.txt文件中只保留末尾为1 0 0 80 80的内容,如下:

4、生成正样本havemask.vec文件和nomask.vec文件

这里操作在cmd终端中进行,进入mask文件夹下,输入以下内容:

生成正样本havemask.vec文件:

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

生成负样本nomask.vec文件:

opencv_createsamples.exe -vec nomask.vec -info no_mask.txt -num 1688 -w 80 -h 80

上述命令内容阐述:

info:样本说明文件

vec:样本描述文件名和路径

num:样本个数,这里为410个样本

w h:样本尺寸,这里为20x20

生成文件如下:

5、训练模型

(1)在mask目录下创建txt文件,写入以下内容:

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

pause

(2)将创建的txt文件命名为traincascade.bat

(3)删的have_mask.txt和no_mask,txt,然后将have_mask1.txt和no_mask1.txt改为have_mask.txt和no_mask.txt

(4)打开traincascade.bat,开始训练人脸口罩数据集模型

在这里训练模型的时间会很长,耐心等待…

训练结束

四、进行人脸口罩检测

Python代码:

import cv2

detector= cv2.CascadeClassifier('C:\\Users\\asus\\AppData\\Local\\Programs\\Python\\Python35\\Lib\\site-packages\\cv2\\data\\haarcascade_frontalface_default.xml')

mask_detector=cv2.CascadeClassifier('D:\\facemask\\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 Detector', img)

cv2.waitKey(3)

cap.release()

cv2.destroyAllWindows()

haarcascade_frontalface_default.xml是Python安装目录下的模型,自带人脸识别模型文件,在此之前需要安装opencv-python库。

运行结果:

未佩戴口罩不会做标记:

而佩戴口罩会做出标记

这中间有问题,识别精度有点低,原因在于训练的数据集太少了,有条件的话可以多找一点图片来进行训练。

本文地址:https://blog.csdn.net/weixin_45137708/article/details/107098266

希望与广大网友互动??

点此进行留言吧!

python人脸口罩识别_基于Python+OpenCV的人脸口罩识别检测相关推荐

  1. python opencv生成tf模型_基于TensorFlow+ Opencv 的人脸识别 和模型训练

    一.准备工作 本次实例的anaconda 环境 (有需要的自己导入anaconda) 链接:https://pan.baidu.com/s/1IVt2ap-NYdg64uHSh-viaA 提取码:g7 ...

  2. python dlib caffe人脸相似度_基于深度学习的人脸识别系统(Caffe+OpenCV+Dlib)【一】如何配置caffe属性表...

    前言 基于深度学习的人脸识别系统,一共用到了5个开源库:OpenCV(计算机视觉库).Caffe(深度学习库).Dlib(机器学习库).libfacedetection(人脸检测库).cudnn(gp ...

  3. python人脸深度识别_基于Python的深度学习人脸识别方法

    基于 Python 的深度学习人脸识别方法 薛同来 ; 赵冬晖 ; 张华方 ; 郭玉 ; 刘旭春 [期刊名称] <工业控制计算机> [年 ( 卷 ), 期] 2019(032)002 [摘 ...

  4. python带界面的人脸识别_基于Python的人脸识别实现带墨镜效果

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. DEAL WITH IT是这样一个效果,眼镜从屏幕外飞进来,带在用户的脸上.这种效果的最佳实例是以一种独特 ...

  5. python名片识别_基于Python的名片识别接口调用代码实例

    基于Python的名片识别接口调用代码实例 代码描述:基于Python的名片识别接口调用代码实例 #!/usr/bin/python # -*- coding: utf-8 -*- import js ...

  6. python开发语音录入_基于python实现语音录入识别代码实例

    这篇文章主要介绍了如何通过python实现语音录入识别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 一.介绍 1.第一步录音存入本地 2.调用百度 ...

  7. autocad python二次开发_基于Python AutoCAD ActiveX 二次开发,pyautocad应用技术

    AutoCAD应用程序开发系列 基于Python AutoCAD ActiveX 二次开发技术 主要库:pyautocad==0.2.0 内容#:基于Python AutoCAD ActiveX 二次 ...

  8. python多叉树遍历_基于Python的多叉树遍历算法

    [ 综直厘翹 S 赛理 ) 信息记录材料 2019 年 5 月第 20 卷第 5 期 基于 Python 的多叉树遍历算法 钱雨波 , 王金祥 ( 指导老师 ) ( 延边大学 吉林 延边 1 3300 ...

  9. python电影推荐算法_基于Python的电影推荐算法

    原标题:基于Python的电影推荐算法 第一步:收集和清洗数据 数据链接:https://grouplens.org/datasets/movielens/ 下载文件:ml-latest-small ...

最新文章

  1. JDK8漫谈——增强接口
  2. ThreadLocal应用与原理分析
  3. 兼容 .NET Core3.0, Natasha 框架实现 隔离域与热编译操作
  4. 6月15日起,刷卡机不能自选商户了,这样会有多少卡被封掉?
  5. oracle基本的操作命令,oracle命令基本操作
  6. Objective-C 的动态提示和技巧
  7. 结对开发——电梯调度问题需求分析
  8. 芒果超媒:子公司与咪咕文化签署合作框架协议
  9. 无法从套接字读取更多的数据
  10. EndNote毕业论文参考文献格式输出
  11. windows7删除计算机管理员权限,win7系统删除C盘文件需要管理员权限的解决方法...
  12. Java生成csv文件设置文本格式
  13. 珠宝电商探索之路实战分享
  14. Gazebo仿真场景搭建+配置
  15. MySQL常见错误:Starting MySQL...The server quit without updating PID file (/usr/local/mysql/data/localhos
  16. 多功能无线测量仪的设计与制作
  17. Cygwin环境使用第三方ARMGCC编译eCos系统
  18. backtrack5网络设置
  19. IP 数据库,CSV 和 MDB 格式。
  20. 基于spring websocket+sockjs实现的长连接请求

热门文章

  1. 学习笔记:EXCEL制作动态考勤表
  2. 港科资讯 | 香港科大EMBA校友会2021-2022最佳案例奖颁发
  3. 安装SQL2000,提示安装程序配置服务器失败。
  4. 蓝牙协议系列之(五) ATT
  5. 服务器端渲染(SSR)和客户端渲染
  6. 【Python爬虫】按时爬取京东几类自营手机型号价格参数并存入数据库
  7. pycharm编程出现SyntaxError: Non-ASCII character ‘\xe5‘ in file错误
  8. 怎样在VI编辑器中使用鼠标移动光标(鼠标点哪里,光标移动到哪里)
  9. python龙虎榜数据_GitHub - TR678/stock: stock,股票系统。使用python进行开发。
  10. Linux集群 安全防御-iptables