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

目录

  • 一、OpenCV下载安装
  • 二、人脸口罩数据集下载处理
    • (一)人脸口罩数据集下载
    • (二)人脸口罩数据集的处理
  • 三、训练人脸口罩数据集模型
  • 四、进行人脸口罩检测

一、OpenCV下载安装

参考网址:
https://blog.csdn.net/cungudafa/article/details/84451066

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

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

下载人脸口罩数据集的目的是利用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):  continuefilename=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):  continuefilename=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)) #修改样本像素为20x20cv2.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)) #修改样本像素为60x60cv2.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 ALLpause

(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库。
运行结果:
未佩戴口罩不会做标记:

而佩戴口罩会做出标记

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

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

  1. python人脸口罩识别_基于Python+OpenCV的人脸口罩识别检测

    以下编程在Jupyter notbook平台上进行 一.OpenCV下载安装 二.人脸口罩数据集下载处理 (一)人脸口罩数据集下载 下载人脸口罩数据集的目的是利用OpenCV进行模型训练,这里采用口罩 ...

  2. 实战6:基于OpenCV的人脸口罩识别检测详细教程

    背景介绍:     从19年疫情爆发到现在,佩戴口罩对大家来说已是常态.应运而生的就有了很多相关应用,如病毒发展预测.口罩佩戴检测以及戴口罩的人脸识别等. 今天介绍的人脸口罩佩戴检测系统主要使用Ope ...

  3. 基于python+OpenCV的车牌号码识别

    基于python+OpenCV的车牌号码识别 车牌识别行业已具备一定的市场规模,在电子警察.公路卡口.停车场.商业管理.汽修服务等领域已取得了部分应用.一个典型的车辆牌照识别系统一般包括以下4个部分: ...

  4. 基于python+opencv的人脸检测+

    人脸检测分为两种:一种是基于知识的,一种是基于深度学习的.深度不会学习 人脸识别属于目标检测,主要涉及两个方面: ①先对检测的物体进行概率统计,从而知道待检测对象的一些特征,建立其目标的检测模型 ②用 ...

  5. python读取视频流做人脸识别_基于 Python + OpenCV 进行人脸识别,视频追踪代码全注释...

    1 #-*- coding: utf-8 -*- 2 from __future__ importunicode_literals3 #操作文件 4 importos5 #科学计算 6 importn ...

  6. 基于Python+OpenCV的人脸识别实现带墨镜效果

    环境以及执行步骤 相关介绍 环境配置 相关库安装介绍 上代码 github地址 动图介绍 改进 相关介绍 你好! 项目起初来源于一本科生的毕业设计,由于我给了一版更加优秀,所以初始版本的例子给予分享. ...

  7. 万张PubFig人脸数据实现基于python+OpenCV的人脸特征定位程序(1)

    在最近刷今日头条以及其他媒体软件时,经常会发现一些AI换脸的视频,于是我想,可不可以自己实现一个可以进行人脸识别的软件程序.我的具体流程是先配合python网络爬虫先进行万张PubFig人脸公共图片的 ...

  8. python基础教程:python+OpenCV实现车牌号码识别

    这篇文章主要介绍了python+OpenCV实现车牌号码识别,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 基于python+OpenCV的车牌号码识别,供大家参考,具 ...

  9. 基于Python通过OpenCV实现的口罩识别系统理论篇

    基于Python通过OpenCV实现的口罩识别系统理论设计篇 一.项目实现环境 基于Python 3.8.1版本 opencv-python 4.2.0.34版本 需要自己下载OpenCV的库文件,添 ...

  10. 《OpenCv视觉之眼》Python图像处理十九:Opencv图像处理实战四之通过OpenCV进行人脸口罩模型训练并进行口罩检测

    本专栏主要介绍如果通过OpenCv-Python进行图像处理,通过原理理解OpenCv-Python的函数处理原型,在具体情况中,针对不同的图像进行不同等级的.不同方法的处理,以达到对图像进行去噪.锐 ...

最新文章

  1. 清华姚班校友陈丹琦斩获2022斯隆奖!「诺奖风向标」27位华人学者入选
  2. 【高并发】又一个朋友面试栽在了Thread类的stop()方法和interrupt()方法上!
  3. GAN(Generative Adversarial Network,GAN)模型之:InfoGAN、WGAN、DCGAN模型
  4. containerd发布了CRI修复程序和CVE-2019-5736更新的runc
  5. matlab符号运算结果的分数怎么转化为小数
  6. MySQL笔记——多表查询
  7. github pages_在GitHub Pages上发布组织主页
  8. unc 隐藏共享文件夹_(原创)UNC路径的访问条件
  9. optional转化为set_JDK8新特性--学习笔记(OptionalCollectors)
  10. MyBatis Plus EntityWarpper参数的介绍
  11. 如果一个国家是一种颜色,中国的颜色美哭了!
  12. I00018 生成全1数
  13. docker用gpu的参数_Docker化部署(GPU)
  14. SQL-55 分页查询employees表,每5行一页,返回第2页的数据
  15. AJAX(七)jsonp实战--天气预报
  16. python3爬取头条比基尼图片
  17. Java常用加密解密算法全解
  18. iOS_导航栏的navigationBar.hidden与navigationBarHidden的区别
  19. 算法课堂笔记01-语句频度计算
  20. Rabbitmq客户端接收消息为字符数组解决

热门文章

  1. 详解 Spring 3.0 基于 Annotation 的依赖注入实现(转)
  2. Unity3D 游戏开发构架篇 ——输入控制
  3. .NET组件和COM组件之间的相互操作方法
  4. Spring中的WebAppRootListener
  5. 程序江湖:第五章 机会是一种困扰
  6. 7.企业应用架构模式 --- 分布策略
  7. 7.程序员的自我修养---动态链接
  8. 49.Linux/Unix 系统编程手册(下) -- 内存映射
  9. 8.Linux 高性能服务器编程 --- 高性能服务器程序框架
  10. 2.TCP/IP 详解卷1 --- 链路层