面部口罩识别检测
面部口罩識別檢測@人臉識別
項目介紹
【
項目背景:隨著新冠疫情的爆發,公共衛生防護程度被提高到空前狀態。為防止新冠病毒的交叉傳染,導致疫情擴散,人們在各大公共場所活動時均被要求佩戴口罩。因此,面部口罩檢測項目誕生。
項目前景:隨著公共衛生防護程度的逐步提升,且佩戴口罩成為出入各大公共場所的前提,面部口罩檢測成為各大公共場所管理的必備操作。而隨著智能化、自動化進程的加快,口罩面部檢測已逐步從人工向機器轉移。
項目價值:提高公共衛生防護能力;節約社會資源和運營成本;降低人力資源成本。
使用場景:公交車、地鐵站、超市、學校等各大公共場所。
……
】
·假正經·
【
新冠疫情在中國爆發,百度某團隊率先開源口罩人臉檢測及分類模型,(極大地體現了百度這家公司的社會責任感),隨即一維弦防疫巡檢機器人部署清華李文正館,為學生開學保駕護航……
】
……
用馬校長的話講,“我對任何事情都感到好奇,想踹開門,邁開步,進去看看到底是怎么一回事”。
出于好奇,加之某些機會(空閑+偶遇),在家寫了一個簡易的面部口罩檢測程序,即“50行代碼實現面部口罩檢測”。
看上去好像NB的樣子,實則是百度太良心、程序太簡易……
思路其實很簡單:
獲取圖像和人臉識別主要使用強大的opencv庫,而口罩檢測則使用主角庫:paddlehub。
(沒看見人,所以得喊你)
(輸出為MASK,意為佩戴了口罩)
·下面進入快樂代碼時間 ·
以下代碼主要實現前兩者,即獲取圖像和人臉識別:
import cv2 face_cascade = cv2.CascadeClassifier("D:\\mask\\haarcascade_frontalface_default.xml") cap = cv2.VideoCapture(0,cv2.CAP_DSHOW)while True:ret, frame = cap.read()gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.1, 5)if len(faces) > 0:for faceRect in faces:x, y, w, h = faceRectcv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)roi_gray = gray[y:y + h // 2, x:x + w]roi_color = frame[y:y + h // 2, x:x + w]cv2.imshow('frame', frame) # 展現file_name = "D:/mask/mask_test.png" # 圖片存儲路徑cv2.imwrite(file_name, frame) # 寫入獲取的一幀if cv2.waitKey(1) & 0xFF == ord('q'):breakcap.release() # 釋放攝像頭 cv2.destroyAllWindows()通過opencv調取內置攝像頭以獲取圖像,并對圖像進行人臉識別檢測,將獲取的圖片保存在本地以便后面進行口罩檢測。
以下代碼主要實現面部的口罩檢測識別:
import paddlehub as hub import cv2 module = hub.Module(name=”pyramidbox_lite_mobile_mask”) #口罩檢測模型 test_img_path = “C:\Users\Dell\Pictures\3.png”# 讀取本地圖片 input_dict = {“data”: [cv2.imread(test_img_path)]} results = module.face_detection(data=input_dict) print(results)通過導入面部口罩檢測模型,讀取本地圖片并對其進行分析檢測,從而得到是否佩戴口罩的結果。
簡單的整合一下,就形成了項目完整的50行代碼:
-- coding:utf-8 -- @Time : 22:53 @Author: Thomas @File :mask.py @Software : PyCharmimport paddlehub as hub import cv2 from playsound import playsoundmodule = hub.Module(name=”pyramidbox_lite_mobile_mask”) #口罩檢測模型 face_cascade = cv2.CascadeClassifier(“D:/mask/haarcascade_frontalface_default.xml”) #人臉識別分類器 capture = cv2.VideoCapture(0,cv2.CAP_DSHOW) #初始化攝像頭while(True):# 獲取一幀ret, frame = capture.read() #以幀換視頻流#灰度轉換gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)faces = face_cascade.detectMultiScale(gray, 1.1, 5)if len(faces) > 0:for faceRect in faces:x, y, w, h = faceRectcv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 2)roi_gray = gray[y:y + h // 2, x:x + w]roi_color = frame[y:y + h // 2, x:x + w]#口罩檢測模型cv2.imshow('frame', frame) #展現file_name="D:/mask/mask_test.png" #圖片存儲路徑cv2.imwrite(file_name, frame) #寫入獲取的一幀input_dict = {"data": [cv2.imread(file_name)]}results = module.face_detection(data=input_dict)#判斷是否檢測到人臉和是否戴口罩mask = results[0]["data"]if len(mask) == 0:print("未檢測到人臉!請將臉移入攝像頭視角范圍內!")else:mask_test = mask[0]['label']if mask_test == "NO MASK":playsound('D:\\mask\\11750.wav') # 若檢測到未戴口罩則發出警報print(mask_test)else:print(mask_test)cv2.imwrite(file_name,frame)if cv2.waitKey(3) & 0xff == 27:print("退出程序!謝謝使用!")capture.release() #釋放攝像頭qcv2.destroyAllWindows() #刪除建立的全部窗口break準確率
官方介紹的準確率為:口罩人臉檢測部分在準確度上達到了 98%,且口罩人臉分類部分準確率同樣達到了 96.5%。
Github地址
項目的GitHub地址https://github.com/1614866360/mask_test
總結
- 上一篇: CVPR2020最全整理:分方向论文下载
- 下一篇: 周志华《机器学习》读书笔记(一)