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