五分鐘快速搭建一個實時人臉口罩檢測系統(OpenCV+PaddleHub 含源碼)

                        導讀

                        本文主要介紹如何使用OpenCV和PaddleHub實現一個實時人臉口罩檢測系統。(公眾號:OpenCV與AI深度學習)

                        背景介紹

                        ? ??從19年疫情爆發到現在,佩戴口罩對大家來說已是常態。應運而生的就有了很多相關應用,如病毒發展預測、口罩佩戴檢測以及戴口罩的人臉識別等。

                        ????今天介紹的人臉口罩佩戴檢測系統主要使用OpenCV和百度飛漿(PaddlePaddle)的PaddleHub提供的檢測模型。PaddleHub提供了很多實用的模型,包括圖像處理、文字處理、音頻處理、視頻處理和工業應用等。github地址:https://github.com/PaddlePaddle/PaddleHub

                        人臉口罩檢測

                        ? ? 人臉檢測部分的模型如下:

                        ????紅框內的兩個模型支持人臉口罩檢測,這里選擇pyramidbox_lite_server_mask,實現詳細步驟:

                        【1】安裝PaddlePaddle、PaddleHub和OpenCV(opencv-python)

                        pip install paddlepaddle -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host https://pypi.tuna.tsinghua.edu.cn
                        pip install paddlehub -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host https://pypi.tuna.tsinghua.edu.cn
                        pip install opencv-python -i https://pypi.tuna.tsinghua.edu.cn/simple  --trusted-host https://pypi.tuna.tsinghua.edu.cn

                        ????本文使用的版本:

                        ????PaddlePaddle---2.3.0

                        ????PaddleHun---2.2.0

                        ????opencv-python---4.6.0.66

                        ????注意:安裝PaddlePaddle可能會遇到一些問題,導致import paddle失敗,大家根據報錯信息搜索解決方法即可。

                        【2】圖片人臉口罩檢測

                        ????準備待測圖,運行下面代碼,修改圖片路徑即可:

                        import paddlehub as hub
                        import cv2
                        
                        mask_detector = hub.Module(name="pyramidbox_lite_server_mask")
                        img_path = './imgs/A0.png'
                        img = cv2.imread(img_path)
                        
                        input_dict = {"data": [img]}
                        result = mask_detector.face_detection(data=input_dict)
                        
                        count = len(result[0]['data'])
                        if count < 1:
                          print('There is no face detected!')
                        else:
                          for i in range(0,count):
                        
                            #print(result[0]['data'][i])
                            label = result[0]['data'][i].get('label')
                            score = float(result[0]['data'][i].get('confidence'))
                            x1 = int(result[0]['data'][i].get('left'))
                            y1 = int(result[0]['data'][i].get('top'))
                            x2 = int(result[0]['data'][i].get('right'))
                            y2 = int(result[0]['data'][i].get('bottom'))
                            cv2.rectangle(img,(x1,y1),(x2,y2),(255,200,0),2)
                            if label == 'NO MASK':
                              cv2.putText(img,label,(x1,y1),0,0.8,(0,0,255),2)
                            else:
                              cv2.putText(img,label,(x1,y1),0,0.8,(0,255,0),2)
                         
                        cv2.imwrite('result.jpg',img)
                        cv2.imshow('mask-detection', img)
                        cv2.waitKey()
                        cv2.destroyAllWindows()
                        print('Done!')

                        ?

                        ?代碼開始第一次會先下載對應的模型到如下位置:

                        ????C:\Users\xxx\.paddlehub\modules,以后不用再下載

                        測試圖1:

                        運行結果:

                        測試圖2:

                        運行結果:

                        測試圖3:

                        運行結果:

                        測試圖4:

                        運行結果:

                        ????從上面測試結果來看,效果還不錯!

                        【3】視頻或攝像頭實時人臉口罩檢測

                        ????準備測試視頻或直接打開攝像頭檢測,選擇對應的代碼即可:

                        cap = cv2.VideoCapture('2.mp4') #視頻文件檢測# cap?=?cv2.VideoCapture(0)?#攝像頭檢測

                        ?完整代碼:

                        
                        import paddlehub as hub
                        import cv2
                        
                        mask_detector = hub.Module(name="pyramidbox_lite_server_mask")
                        
                        def mask_detecion(img):
                          input_dict = {"data": [img]}
                          result = mask_detector.face_detection(data=input_dict) 
                          count = len(result[0]['data'])
                          if count < 1:
                            #print('There is no face detected!')
                            pass
                          else:
                            for i in range(0,count):
                              #print(result[0]['data'][i])
                              label = result[0]['data'][i].get('label')
                              score = float(result[0]['data'][i].get('confidence'))
                              x1 = int(result[0]['data'][i].get('left'))
                              y1 = int(result[0]['data'][i].get('top'))
                              x2 = int(result[0]['data'][i].get('right'))
                              y2 = int(result[0]['data'][i].get('bottom'))
                              cv2.rectangle(img,(x1,y1),(x2,y2),(255,200,0),2)
                              if label == 'NO MASK':
                                cv2.putText(img,label,(x1,y1),0,0.8,(0,0,255),2)
                              else:
                                cv2.putText(img,label,(x1,y1),0,0.8,(0,255,0),2)
                          return img
                        
                        
                        if __name__ == '__main__':
                          cap = cv2.VideoCapture('2.mp4') #視頻文件檢測
                          #cap = cv2.VideoCapture(0) #攝像頭檢測
                          if(cap.isOpened()): #視頻打開成功
                            while(True):
                              ret,frame = cap.read()#讀取一幀
                              result = mask_detecion(frame)
                              cv2.imshow('mask_detection',result)
                              if cv2.waitKey(1)&0xFF ==27: #按下Esc鍵退出
                                break
                          else:
                            print ('open video/camera failed!')
                          cap.release()
                          cv2.destroyAllWindows()

                        ???測試結果:

                        下載1:Pytoch常用函數手冊

                        在「OpenCV與AI深度」號后臺回復:Pytorch函數手冊能夠學習下載全網第一份Pytorch函數常用手冊,包括Tensors介紹、基礎函數介紹、數據處理函數、優化函數、CUDA編程、多處理等十四章內容。

                        下載2:145個OpenCV實例應用代碼

                        在「OpenCV與AI深入」公眾號后臺回復:OpenCV145能夠學習下載145個OpenCV實例應用代碼(Python和C++雙語言實現)。

                        ?

                        評論 9 您還未登錄,請先 登錄 后發表或查看評論

                        “相關推薦”對你有幫助么?

                        • 非常沒幫助
                        • 沒幫助
                        • 一般
                        • 有幫助
                        • 非常有幫助
                        提交
                        ??2022 CSDN 皮膚主題:精致技術 設計師:CSDN官方博客 返回首頁

                        打賞作者

                        Color Space

                        你的鼓勵將是我創作的最大動力

                        ¥2 ¥4 ¥6 ¥10 ¥20
                        輸入1-500的整數
                        余額支付 (余額:-- )
                        掃碼支付
                        掃碼支付:¥2
                        獲取中
                        掃碼支付

                        您的余額不足,請更換掃碼支付或充值

                        打賞作者

                        實付
                        使用余額支付
                        點擊重新獲取
                        掃碼支付
                        錢包余額 0

                        抵扣說明:

                        1.余額是錢包充值的虛擬貨幣,按照1:1的比例進行支付金額的抵扣。
                        2.余額無法直接購買下載,可以購買VIP、C幣套餐、付費專欄及課程。

                        余額充值
                        久久悠悠精品综合网