基于深度學(xué)習(xí)的安全帽檢測(cè)系統(tǒng)(YOLOv5清新界面版,Python代碼)
摘要:安全帽檢測(cè)系統(tǒng)用于自動(dòng)化監(jiān)測(cè)安全帽佩戴情況,在需要佩戴安全帽的場(chǎng)合自動(dòng)安全提醒,實(shí)現(xiàn)圖片、視頻和攝像頭等多種形式監(jiān)測(cè)。在介紹算法原理的同時(shí),給出Python的實(shí)現(xiàn)代碼、訓(xùn)練數(shù)據(jù)集,以及PyQt的UI界面。安全帽檢測(cè)系統(tǒng)主要用于自動(dòng)化監(jiān)測(cè)安全帽佩戴情況,檢測(cè)佩戴安全帽的數(shù)目、位置、預(yù)測(cè)置信度等;可采取圖片、視頻和攝像頭等多種形式監(jiān)測(cè)佩戴情況,并實(shí)時(shí)顯示標(biāo)記和結(jié)果;博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請(qǐng)轉(zhuǎn)至文末的下載鏈接。

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

前言
????????近年來,隨著計(jì)算機(jī)視覺的飛速發(fā)展,越來越多的目標(biāo)檢測(cè)算法被應(yīng)用到生活中,對(duì)人體安全的研究尤為有價(jià)值。建筑業(yè)是勞動(dòng)密集型行業(yè),工作環(huán)境復(fù)雜,安全事故頻發(fā)。據(jù)《國家統(tǒng)計(jì)年鑒》統(tǒng)計(jì),我國建筑業(yè)每年發(fā)生的事故數(shù)量高達(dá)600起,每年死亡人數(shù)超過700人。墜落的物體是最致命的,研究表明,所有建筑工人因腦外傷而死亡的人數(shù)中有24%是由高空物體墜落造成的。由于它直接威脅到工人的頭部,而頭部是最重要的身體部位,因此頭盔佩戴檢測(cè)在現(xiàn)實(shí)生活場(chǎng)景中具有重要意義。
????????計(jì)算機(jī)視覺的快速發(fā)展應(yīng)用在各個(gè)方面,具有廣闊的前景,尤其是在安全工程方面。在建筑工地,頭盔是保護(hù)工人生命的重要工具,而實(shí)際上,由于沒有戴頭盔,事故時(shí)有發(fā)生。為了解決這個(gè)問題,基于深度學(xué)習(xí)的安全帽檢測(cè)系統(tǒng)以最及時(shí)的方式進(jìn)行告警,同時(shí)最大限度降低誤報(bào)和漏報(bào)現(xiàn)象,極大的節(jié)約了生產(chǎn)成本,提高了工作效率。
????????這里給出博主設(shè)計(jì)的軟件界面,同款的簡(jiǎn)約風(fēng),功能也可以滿足圖片、視頻和攝像頭的識(shí)別檢測(cè),希望大家可以喜歡,初始界面如下圖:

????????檢測(cè)安全帽時(shí)的界面截圖(點(diǎn)擊圖片可放大)如下圖,可識(shí)別畫面中存在的多個(gè)目標(biāo),也可開啟攝像頭或視頻檢測(cè):

???????? 詳細(xì)的功能演示效果參見博主的B站視頻或下一節(jié)的動(dòng)圖演示,覺得不錯(cuò)的朋友敬請(qǐng)點(diǎn)贊、關(guān)注加收藏!系統(tǒng)UI界面的設(shè)計(jì)工作量較大,界面美化更需仔細(xì)雕琢,大家有任何建議或意見和可在下方評(píng)論交流。
1.?效果演示
????????首先我們還是通過動(dòng)圖看一下識(shí)別安全帽的效果,系統(tǒng)主要實(shí)現(xiàn)的功能是對(duì)圖片、視頻和攝像頭畫面中的安全帽屬性進(jìn)行識(shí)別,識(shí)別的結(jié)果可視化顯示在界面和圖像中,另外提供多個(gè)安全帽的顯示選擇功能,演示效果如下。
(一)用戶注冊(cè)登錄界面
????????這里設(shè)計(jì)了一個(gè)登錄界面,可以注冊(cè)賬號(hào)和密碼,然后進(jìn)行登錄。界面還是參考了當(dāng)前流行的UI設(shè)計(jì),左側(cè)是一個(gè)頭盔的LOGO圖,右側(cè)輸入賬號(hào)、密碼、驗(yàn)證碼等等。

(二)安全帽圖片識(shí)別
????????系統(tǒng)允許選擇圖片文件進(jìn)行識(shí)別,點(diǎn)擊圖片選擇按鈕圖標(biāo)選擇圖片后,顯示所有安全帽識(shí)別的結(jié)果,可通過下拉選框查看單個(gè)安全帽檢測(cè)的結(jié)果。本功能的界面展示如下圖所示:

(三)安全帽視頻識(shí)別效果展示
????????很多時(shí)候我們需要識(shí)別一段視頻,這里設(shè)計(jì)了視頻選擇功能。點(diǎn)擊視頻按鈕可選擇待檢測(cè)的視頻,系統(tǒng)會(huì)自動(dòng)解析視頻逐幀識(shí)別安全帽佩戴情況,并將結(jié)果記錄在右下角表格中,效果如下圖所示:

(四)攝像頭檢測(cè)效果展示
????????在真實(shí)場(chǎng)景中,我們往往利用設(shè)備攝像頭獲取實(shí)時(shí)畫面,同時(shí)需要對(duì)畫面中是否佩戴安全帽進(jìn)行識(shí)別,因此本文考慮到此項(xiàng)功能。如下圖所示,點(diǎn)擊攝像頭按鈕后系統(tǒng)進(jìn)入準(zhǔn)備狀態(tài),系統(tǒng)顯示實(shí)時(shí)畫面并開始檢測(cè)畫面中的安全帽,識(shí)別結(jié)果展示如下圖:

2.?檢測(cè)模型與訓(xùn)練
????????管理人員可以直接了解工人是否正確、安全佩戴頭盔的信息,及時(shí)采取措施,避免不必要的損失。本文的系統(tǒng)采用了基于YOLOV5的安全帽檢測(cè)與識(shí)別的方法,頭盔上的測(cè)試結(jié)果達(dá)到了95.2%,基于此的預(yù)警功能可以幫助減少工地事故的危害。本文借助YoloV5算法,實(shí)現(xiàn)安全帽檢測(cè)識(shí)別,這里首先對(duì)實(shí)現(xiàn)原理進(jìn)行介紹。
(一)原理簡(jiǎn)介
????????前文已經(jīng)介紹過YoloV5中的Backbone結(jié)構(gòu),Backbone可以被稱作YoloV5的主干特征提取網(wǎng)絡(luò),根據(jù)它的結(jié)構(gòu)以及之前Yolo主干的叫法,我一般叫它CSPDarknet,輸入的圖片首先會(huì)在CSPDarknet里面進(jìn)行特征提取,提取到的特征可以被稱作特征層,是輸入圖片的特征集合。在主干部分,我們獲取了三個(gè)特征層進(jìn)行下一步網(wǎng)絡(luò)的構(gòu)建,這三個(gè)特征層我稱它為有效特征層。

? ? ? ? FPN可以被稱作YoloV5的加強(qiáng)特征提取網(wǎng)絡(luò),在主干部分獲得的三個(gè)有效特征層會(huì)在這一部分進(jìn)行特征融合,特征融合的目的是結(jié)合不同尺度的特征信息。在FPN部分,已經(jīng)獲得的有效特征層被用于繼續(xù)提取特征。在YoloV5里依然使用到了Panet的結(jié)構(gòu),我們不僅會(huì)對(duì)特征進(jìn)行上采樣實(shí)現(xiàn)特征融合,還會(huì)對(duì)特征再次進(jìn)行下采樣實(shí)現(xiàn)特征融合。

? ? ? ? Yolo Head是YOLOv5的分類器與回歸器,通過CSPDarknet和FPN,我們已經(jīng)可以獲得三個(gè)加強(qiáng)過的有效特征層。每一個(gè)特征層都有寬、高和通道數(shù),此時(shí)我們可以將特征圖看作一個(gè)又一個(gè)特征點(diǎn)的集合,每一個(gè)特征點(diǎn)都有通道數(shù)個(gè)特征。Yolo Head實(shí)際上所做的工作就是對(duì)特征點(diǎn)進(jìn)行判斷,判斷特征點(diǎn)是否有物體與其對(duì)應(yīng)。與以前版本的Yolo一樣,YoloV5所用的解耦頭是一起的,也就是分類和回歸在一個(gè)1X1卷積里實(shí)現(xiàn)。
????????利用以上網(wǎng)絡(luò)進(jìn)行訓(xùn)練,所有層中的權(quán)重均采用標(biāo)準(zhǔn)偏差為0.01,均值為0的高斯隨機(jī)值初始化。訓(xùn)練時(shí)不使用預(yù)訓(xùn)練模型,不使用基準(zhǔn)可用的圖像和標(biāo)簽之外的任何數(shù)據(jù),網(wǎng)絡(luò)從頭開始進(jìn)行訓(xùn)練。訓(xùn)練的目標(biāo)值用與真實(shí)類別相對(duì)應(yīng)的稀疏二進(jìn)制向量表示。
(二)安全帽數(shù)據(jù)集與訓(xùn)練過程
????????這里我們使用的安全帽識(shí)別數(shù)據(jù)集,包含訓(xùn)練集910張圖片,驗(yàn)證集304張圖片,共計(jì)1214張圖片。部分?jǐn)?shù)據(jù)集圖片及其標(biāo)注信息如下圖所示。

????????每張圖像均提供了圖像類標(biāo)記信息,圖像中安全帽的bounding box,安全帽的關(guān)鍵part信息,以及安全帽的屬性信息,數(shù)據(jù)集并解壓后得到如下的圖片。

????????在python環(huán)境配置完成后,我們運(yùn)行train.py進(jìn)行訓(xùn)練。YOLOv5訓(xùn)練時(shí)主要包含三個(gè)方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),下圖為博主訓(xùn)練安全帽識(shí)別的模型訓(xùn)練曲線圖。

????????我們通過設(shè)定不同的置信度的閾值,可以得到在模型在不同的閾值下所計(jì)算出的p值和r值,一般情況下,p值和r值是負(fù)相關(guān)的,繪制出來可以得到如下圖所示的曲線,其中曲線的面積我們稱AP,目標(biāo)檢測(cè)模型中每種目標(biāo)可計(jì)算出一個(gè)AP值,對(duì)所有的AP值求平均則可以得到模型的mAP值。

????????以PR-curve為例,可以看到我們的模型在驗(yàn)證集上的均值平均準(zhǔn)確率為0.910。
3.?安全帽檢測(cè)識(shí)別
????????在訓(xùn)練完成后得到最佳模型,接下來我們將幀圖像輸入到這個(gè)網(wǎng)絡(luò)進(jìn)行預(yù)測(cè),從而得到預(yù)測(cè)結(jié)果,預(yù)測(cè)方法(predict.py)部分的代碼如下所示:
????????得到預(yù)測(cè)結(jié)果我們便可以將幀圖像中的安全帽框出,然后在圖片上用opencv繪圖操作,輸出安全帽的類別及安全帽的預(yù)測(cè)分?jǐn)?shù)。以下是讀取一個(gè)安全帽圖片并進(jìn)行檢測(cè)的腳本,首先將圖片數(shù)據(jù)進(jìn)行預(yù)處理后送predict進(jìn)行檢測(cè),然后計(jì)算標(biāo)記框的位置并在圖中標(biāo)注出來。
????????執(zhí)行得到的結(jié)果如下圖所示,圖中安全帽的種類和置信度值都標(biāo)注出來了,預(yù)測(cè)速度較快?;诖四P臀覀兛梢詫⑵湓O(shè)計(jì)成一個(gè)帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調(diào)用模型進(jìn)行檢測(cè)。

????????博主對(duì)整個(gè)系統(tǒng)進(jìn)行了詳細(xì)測(cè)試,最終開發(fā)出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測(cè)試圖片視頻、代碼文件,以及Python離線依賴包(方便安裝運(yùn)行,也可自行配置環(huán)境),均已打包上傳,感興趣的朋友可以通過下載鏈接獲取。

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

????在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復(fù)制離線依賴包至項(xiàng)目目錄下進(jìn)行安裝,離線依賴的使用詳細(xì)演示也可見本人B站視頻:win11從頭安裝軟件和配置環(huán)境運(yùn)行深度學(xué)習(xí)項(xiàng)目、Win10中使用pycharm和anaconda進(jìn)行python環(huán)境配置教程。

注意:該代碼采用Pycharm+Python3.8開發(fā),經(jīng)過測(cè)試能成功運(yùn)行,運(yùn)行界面的主程序?yàn)閞unMain.py和LoginUI.py,測(cè)試圖片腳本可運(yùn)行testPicture.py,測(cè)試視頻腳本可運(yùn)行testVideo.py。為確保程序順利運(yùn)行,請(qǐng)按照requirements.txt配置Python依賴包的版本。Python版本:3.8,請(qǐng)勿使用其他版本,詳見requirements.txt文件;
完整資源中包含數(shù)據(jù)集及訓(xùn)練代碼,環(huán)境配置與界面中文字、圖片、logo等的修改方法請(qǐng)見視頻,項(xiàng)目完整文件下載請(qǐng)見參考博客文章里面,或參考視頻的簡(jiǎn)介處給出:???
完整代碼下載:https://mbd.pub/o/bread/ZJaXlJpr
參考視頻演示:https://www.bilibili.com/video/BV1fb411f7u1/
離線依賴庫下載:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )

界面中文字、圖標(biāo)和背景圖修改方法:
????????在Qt Designer中可以徹底修改界面的各個(gè)控件及設(shè)置,然后將ui文件轉(zhuǎn)換為py文件即可調(diào)用和顯示界面。如果只需要修改界面中的文字、圖標(biāo)和背景圖的,可以直接在ConfigUI.config文件中修改,步驟如下:
????????(1)打開UI_rec/tools/ConfigUI.config文件,若亂碼請(qǐng)選擇GBK編碼打開。
????????(2)如需修改界面文字,只要選中要改的字符替換成自己的就好。
????????(3)如需修改背景、圖標(biāo)等,只需修改圖片的路徑。例如,原文件中的背景圖設(shè)置如下:
????????可修改為自己的名為background2.png圖片(位置在UI_rec/icons/文件夾中),可將該項(xiàng)設(shè)置如下即可修改背景圖:
結(jié)束語
????????由于博主能力有限,博文中提及的方法即使經(jīng)過試驗(yàn),也難免會(huì)有疏漏之處。希望您能熱心指出其中的錯(cuò)誤,以便下次修改時(shí)能以一個(gè)更完美更嚴(yán)謹(jǐn)?shù)臉幼?,呈現(xiàn)在大家面前。同時(shí)如果有更好的實(shí)現(xiàn)方法也請(qǐng)您不吝賜教。