python实现人脸口罩检测(基于opencv和深度学习两种方法)

人脸口罩检测GUI系统(基于opencv和深度学习两种方法对比)

由于疫情的影响,人脸口罩检测系统的开发成为很多人争相开发的一种算法。很多公司或者个人都开源了他们很多的代码或者SDK。大家在GitHub或者各种平台上都能够找到很多的资源。
前段时间在博客上看到几个有趣的开源项目,它能检测我们是否有戴口罩,跑起程序测试后,发现识别率挺高的,也适应不同环境;于是分享给大家。我用了其中两种并整合在一个GUI下面,一种是基于深度学习的,一种是基于opencv训练的。

测试环境

windows10 系统;
软件:pyCharm;
使用模型:tenforflow1.15.0 ;
python3.7

下面先看一下整个系统的GUI界面:
在这里插入图片描述
GUI程序:

from tkinter import *
from tkinter.filedialog import askdirectory
from tkinter.messagebox import showinfo
import cv2
import numpy as np
from PIL import Image, ImageTk
from tkinter import ttk
import pygame
import time

import tensorflow_infer as flow

file_slogan = r'video/slogan.mp3'
file_slogan_short = r'video/slogan_short.mp3'
pygame.mixer.init(frequency=16000, size=-16, channels=2, buffer=4096)

detector = cv2.CascadeClassifier('haarcascades\\haarcascade_frontalface_default.xml')
mask_detector = cv2.CascadeClassifier('xml\\cascade.xml')

class GUI:
	def __init__(self):
		self.camera = None   # 摄像头
		self.root = Tk()
		self.root.title('maskdetection')
		self.root.geometry('%dx%d' % (800, 600))
		self.createFirstPage()
		mainloop()

	def createFirstPage(self):
		self.page1 = Frame(self.root)
		self.page1.pack()
		Label(self.page1, text='欢迎使用口罩检测跟踪系统', font=('粗体', 20)).pack()
		image = Image.open("demo2.jpg") # 随便使用一张图片做背景界面 不要太大
		photo = ImageTk.PhotoImage(image = image)
		self.data1 = Label(self.page1,  width=780,image = photo)
		self.data1.image = photo
		self.data1.pack(padx=5, pady=5)

		self.button11 = Button(self.page1, width=18, height=2, text="深度学习算法"
  • 44
    点赞
  • 511
    收藏
    觉得还不错? 一键收藏
  • 20
    评论
下面是基于PythonOpenCV实现人脸口罩佩戴检测的完整代码,同时也包含了详细的算法解释: ```python import cv2 # 加载人脸检测器和口罩检测器 face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') mask_cascade = cv2.CascadeClassifier('haarcascade_mask.xml') # 定义函数,用于检测人脸口罩佩戴情况 def detect_mask(img): # 转换为灰度图像 gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) # 检测人脸 faces = face_cascade.detectMultiScale(gray, 1.3, 5) # 遍历每一张脸,检测是否佩戴口罩 for (x,y,w,h) in faces: # 绘制人脸矩形框 cv2.rectangle(img,(x,y),(x+w,y+h),(255,0,0),2) # 截取人脸区域图像 roi_gray = gray[y:y+h, x:x+w] roi_color = img[y:y+h, x:x+w] # 检测口罩 masks = mask_cascade.detectMultiScale(roi_gray, 1.3, 5) # 如果检测口罩,则绘制口罩矩形框 if len(masks) > 0: for (mx,my,mw,mh) in masks: cv2.rectangle(roi_color,(mx,my),(mx+mw,my+mh),(0,255,0),2) cv2.putText(img, 'Mask', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2) # 如果没有检测口罩,则绘制警告文字和红色矩形框 else: cv2.putText(img, 'No Mask', (x, y-10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 0, 255), 2) cv2.rectangle(roi_color,(mx,my),(mx+mw,my+mh),(0,0,255),2) return img # 打开摄像头 cap = cv2.VideoCapture(0) while True: # 读取摄像头图像 ret, frame = cap.read() # 显示检测结果 cv2.imshow('Mask Detection', detect_mask(frame)) # 按下q键退出程序 if cv2.waitKey(1) & 0xFF == ord('q'): break # 释放摄像头资源 cap.release() # 关闭所有窗口 cv2.destroyAllWindows() ``` 算法解释: 1. 加载人脸检测器和口罩检测器。使用OpenCV中自带的Haar Cascade分类器,这是一种基于机器学习的分类器,能够检测特定目标的存在。 2. 定义函数`detect_mask`,用于检测人脸口罩佩戴情况。首先将图像转换为灰度图像,然后使用人脸检测检测人脸。接着,遍历每张人脸图像,截取人脸区域图像并使用口罩检测检测口罩。如果检测口罩,则在人脸图像上绘制矩形框和文字“Mask”;如果没有检测口罩,则在人脸图像上绘制红色矩形框和文字“No Mask”。 3. 打开摄像头,循环读取摄像头图像,调用`detect_mask`函数进行检测,并显示检测结果。 4. 按下q键退出程序,释放摄像头资源,关闭所有窗口。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 20
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值