基于深度學習的口罩檢測系統(tǒng)(Python+清新界面+數據集)
摘要:口罩檢測系統(tǒng)用于日常生活中檢測行人是否規(guī)范佩戴口罩,利用深度學習算法可實現圖片、視頻、連接攝像頭等方式的口罩檢測,另外支持和結果可視化。在介紹算法原理的同時,給出Python的實現代碼以及PyQt的UI界面??谡謾z測系統(tǒng)可用于路口、商場等公共場合檢測人臉是否佩戴口罩,佩戴和未佩戴口罩的數目、位置、預測置信度等;連接攝像頭設備可開啟實時檢測功能,另外對圖片、視頻等文件也可進行測試和檢測;登錄系統(tǒng)提供用戶注冊、登錄、管理功能;訓練和調優(yōu)的模型可有效檢測口罩佩戴情況,模型可選擇切換;可選擇單個目標進行單獨顯示和標注,結果一鍵保存。博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請轉至下載鏈接。

完整代碼下載:https://mbd.pub/o/bread/mbd-ZJaXk51w
參考視頻演示:https://www.bilibili.com/video/BV1dx4y1N7z8/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

前言
????????在公眾場合需要佩戴口罩已經成為常識,新型冠狀病毒的主要傳播途徑就是飛沫傳播,戴上口罩就可以有效的阻隔病毒的傳播??谡质穷A防呼吸道傳染病的重要防線,可以降低新型冠狀病毒感染風險??谡植粌H可以防止病人噴射飛沫,降低飛沫量和噴射速度,還可以阻擋含病毒的飛沫核,防止佩戴者吸入。有研究顯示,只要雙方都佩戴口罩且間隔1.8米以上,造成感染的幾率幾乎為0。
????????但是,未規(guī)范佩戴口罩的情況也很常見,無論是進出商場、教室、街道、地下停車場等公共場所,還是在人員密集的會議室里,都可能有人未戴口罩的情況??谡謾z測系統(tǒng)基于機器視覺深度學習技術,運用YOLOv5訓練出來的口罩檢測模型進行檢測,能夠實現無人值守的不間斷工作,并且系統(tǒng)可以主動發(fā)現監(jiān)控區(qū)域內的未佩戴口罩情況,并以最及時的方式進行告警,同時最大限度降低誤報和漏報現象;極大的節(jié)約了人員成本,提高了工作效率。
????????近年來,機器學習和深度學習取得了較大的發(fā)展,深度學習方法在檢測精度和速度方面與傳統(tǒng)方法相比表現出更良好的性能。YOLOv5是單階段目標檢測算法YOLO的第五代,根據實驗得出結論,其在速度與準確性能方面都有了明顯提升,其論文可參考TPH-YOLOv5: Improved YOLOv5 Based on Transformer Prediction Head for Object Detection on Drone-captured Scenarios?(https://ieeexplore.ieee.org/document/9607487/),開源的代碼可見(https://github.com/ultralytics/yolov5)(官方源碼倉庫)。因此,有了應用YOLOv5進行口罩檢測的想法,關注到近期YOLO算法的最新進展已有YOLOv6、YOLOv7、YOLOv8等算法相繼出現,將本系統(tǒng)中檢測算法替換為最新算法的代碼也將在后面發(fā)布,歡迎關注。
????????說完檢測算法,對于界面的展示同樣非常重要,這里給出博主設計的軟件界面,與前期發(fā)布的系統(tǒng)界面保持同款的清新簡約風,功能也可以滿足圖片、視頻和攝像頭的識別檢測,希望大家可以喜歡,初始界面如下圖:

????????檢測口罩時的界面截圖如下圖,可識別畫面中存在的多個目標的口罩佩戴情況,也可開啟攝像頭或視頻檢測:

???????? 詳細的功能演示效果參見博主的B站視頻或下一節(jié)的動圖演示,覺得不錯的朋友敬請點贊、關注加收藏!系統(tǒng)UI界面的設計工作量較大,界面美化更需仔細雕琢,大家有任何建議或意見和可在下方評論交流。
1.?效果演示
????????首先我們還是通過動圖看一下識別的效果,系統(tǒng)設計了一個簡單的登錄注冊界面和功能主界面,實現的主要功能是對圖片、視頻和攝像頭畫面中的人臉口罩進行識別,識別的結果可視化顯示在界面和圖像中,另外提供多個目標的顯示選擇功能,演示效果如下。
(一)用戶注冊登錄界面
????????這里設計了一個登錄界面,可以注冊賬號和密碼,然后進行登錄。界面還是參考了當前流行的UI設計,左側是一個動圖,右側輸入賬號、密碼、驗證碼等等。

(二)選擇圖片識別
????????系統(tǒng)允許選擇圖片文件進行識別,點擊圖片選擇按鈕圖標選擇圖片后,顯示所有目標識別的結果,可通過下拉選框查看單個目標的結果。本功能的界面展示如下圖所示:

(三)視頻識別效果展示
????????有時候我們需要識別一段視頻中是否佩戴口罩,這里設計了視頻選擇功能。點擊視頻按鈕可選擇待檢測的視頻,系統(tǒng)會自動解析視頻逐幀識別人臉,并將結果記錄在右下角表格中,效果如下圖所示:

2.?口罩數據集及訓練
????????以上系統(tǒng)的技術構成主要為兩大塊:YOLOv5算法、UI界面設計。YOLOv5算法提供深度學習的檢測模型,這一部分需要構建口罩數據集并訓練模型,為后續(xù)界面中口罩識別提供算法支持;UI界面利用PyQt5進行界面設計,并為各控件模塊寫入執(zhí)行邏輯,在選中圖片或視頻時調用前面訓練好的YOLOv5模型進行預測,將結果顯示在界面上。整個系統(tǒng)涉及的主要工作如下圖所示。

????????這里我們使用的口罩識別數據集,每張圖片除包括類別標簽外,還有一個標注的物體邊框(Bounding Box),其中包括訓練集1200張、驗證集400張、測試集400張,共計2000張圖片。

????????每張圖像均提供了圖像類標記信息,其中的標注文件已轉換為YOLO算法使用的txt格式,算法可以直接使用其進行訓練,數據集并解壓后得到的部分截圖如下圖所示。

????????數據集準備好,接下來可執(zhí)行訓練程序,首先要安裝本系統(tǒng)所需的依賴庫,配置一個Python3.8然后按照requirements.txt里面的依賴裝環(huán)境就可以運行了。
#請按照給定的python版本配置環(huán)境,否則可能會因依賴不兼容而出錯conda create -n env_rec python=3.8#激活環(huán)境activate env_rec#使用pip安裝所需的以來,可通過requirements.txtpip install -r requirements.txt
????????有些人可能會在裝pycocotools>=2.0這個包有問題,這里博主在文章底部也提供了離線庫的鏈接,也可通過離線包安裝。到這,深度學習所需的環(huán)境和依賴包就準備好了。
????????現在對YOLO代碼的部分做一個介紹,下圖為本項目的目錄:

????????data:主要是存放一些超參數的配置文件(這些文件(yaml文件)是用來配置訓練集和測試集還有驗證集的路徑的,其中還包括目標檢測的種類數和種類的名稱)
????????里面主要是一些網絡構建的配置文件和函數,其中包含了該項目的四個不同的版本,分別為是s、m、l、x。從名字就可以看出,這幾個版本的大小。他們的檢測測度分別都是從快到慢,但是精確度分別是從低到高。如果訓練自己的數據集的話,就需要修改這里面相對應的yaml文件來訓練自己模型。
????????utils:存放的是工具類的函數,里面有l(wèi)oss函數,metrics函數,plots函數等等。
????????weights:放置訓練好的權重參數。
????????detect.py:利用訓練好的權重參數進行目標檢測,可以進行圖像、視頻和攝像頭的檢測。
????????UI_rec:這個文件夾下存放有UI界面、圖標及界面相關的代碼程序,可運行runMain.py進入主界面,使用loginUI.py進入登錄注冊界面。
????????train.py:訓練自己的數據集的函數。
????????testPicture.py:讀取設置的圖片進行預測;testVideo.py:讀取自定義路徑的視頻文件進行檢測。
????????requirements.txt:這是一個文本文件,里面寫著使用本項目的環(huán)境依賴包的一些版本,可以利用該文本導入相應版本的包。
????????以上就是本項目代碼的整體介紹。我們訓練和測試自己的數據集就是利用到如上的代碼。
????????在深度學習中,我們通常通過損失函數下降的曲線來觀察模型訓練的情況。而YOLOv5訓練時主要包含三個方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),在訓練結束后,我們也可以在logs目錄下找到生成對若干訓練過程統(tǒng)計圖。下圖為博主訓練口罩類識別的模型訓練曲線圖。

????????一般我們會接觸到兩個指標,分別是召回率recall和精度precision,兩個指標p和r都是簡單地從一個角度來判斷模型的好壞,均是介于0到1之間的數值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,為了綜合評價目標檢測的性能,一般采用均值平均密度map來進一步評估模型的好壞。我們通過設定不同的置信度的閾值,可以得到在模型在不同的閾值下所計算出的p值和r值,一般情況下,p值和r值是負相關的,繪制出來可以得到如下圖所示的曲線,其中曲線的面積我們稱AP,目標檢測模型中每種目標可計算出一個AP值,對所有的AP值求平均則可以得到模型的mAP值。

????????以PR-curve為例,可以看到我們的模型在驗證集上的均值平均準確率為0.727。當然我們這里沒有過多的調優(yōu)訓練過程,所以訓練模型的結果還有待提升。
3.?口罩檢測識別
????????在訓練完成后得到最佳模型,接下來我們將幀圖像輸入到這個網絡進行預測,從而得到預測結果,預測方法(predict.py)部分的代碼如下所示:
????????得到預測結果我們便可以將幀圖像中的口罩框出,然后在圖片上用opencv繪圖操作,輸出口罩的類別及口罩的預測分數。以下是讀取一個口罩圖片并進行檢測的腳本,首先將圖片數據進行預處理后送predict進行檢測,然后計算標記框的位置并在圖中標注出來。
????????執(zhí)行得到的結果如下圖所示,圖中口罩的種類和置信度值都標注出來了,預測速度較快?;诖四P臀覀兛梢詫⑵湓O計成一個帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調用模型進行檢測。

????????跑通了這個預測程序,我們可以將其封裝到界面中,利用PyQt5設計一個UI界面,在運行圖片、視頻檢測時調用這個方法。博主對整個系統(tǒng)進行了詳細測試,最終開發(fā)出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件,以及Python離線依賴包(方便安裝運行,也可自行配置環(huán)境),均已打包上傳,感興趣的朋友可以通過參考文章里面給出的下載鏈接或B站視頻簡介處的下載鏈接獲取。

下載鏈接
????若您想獲得博文中涉及的實現完整全部程序文件(包括測試圖片、視頻,py, UI文件等,如下圖),這里已打包上傳至博主的面包多平臺,可見參考博客與視頻,已將所有涉及的文件同時打包到里面,點擊即可運行,完整文件截圖如下:

????在文件夾下的資源顯示如下,其中包含了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,進行安裝,詳細演示也可見本人B站視頻。

注意:該代碼采用Pycharm+Python3.8開發(fā),經過測試能成功運行,運行界面的主程序為runMain.py和LoginUI.py,測試圖片腳本可運行testPicture.py,測試視頻腳本可運行testVideo.py。為確保程序順利運行,請按照requirements.txt配置Python依賴包的版本。Python版本:3.8,請勿使用其他版本,詳見requirements.txt文件;
環(huán)境配置與界面中文字、圖片、logo等的修改方法請見視頻,項目完整文件下載:???
完整代碼下載:https://mbd.pub/o/bread/mbd-ZJaXk51w
參考視頻演示:https://www.bilibili.com/video/BV1dx4y1N7z8/
離線依賴庫下載鏈接:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )
結束語
????????由于博主能力有限,博文中提及的方法即使經過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴謹的樣子,呈現在大家面前。同時如果有更好的實現方法也請您不吝賜教。