摘要:智能火焰與煙霧檢測系統(tǒng)用于智能日?;馂?zāi)檢測報警,利用攝像頭畫面實時識別火焰與煙霧,另外支持圖片、視頻火焰檢測并進(jìn)行結(jié)果可視化。本文詳細(xì)介紹基于智能火焰與煙霧檢測系統(tǒng),在介紹算法原理的同時,給出Python的實現(xiàn)代碼以及PyQt的UI界面。在界面中可以選擇各種圖片、視頻進(jìn)行檢測識別;可對圖像中存在的多目標(biāo)進(jìn)行識別分類,檢測速度快、識別精度高。博文提供了完整的Python代碼和使用教程,適合新入門的朋友參考,完整代碼資源文件請轉(zhuǎn)至文末的下載鏈接。
完整代碼下載:https://mbd.pub/o/bread/ZJaXlpdt
參考視頻演示:https://www.bilibili.com/video/BV1WY411z7eG/
(資料圖片)
離線依賴庫下載:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )
火災(zāi)事故的產(chǎn)生始終是人們在日常生活中較難避免的災(zāi)情其中之一。人們一直以來嘗試尋找正確的方式降低火災(zāi)事故所帶來的經(jīng)濟(jì)財產(chǎn)損失。雖說完全杜絕火災(zāi)事故的產(chǎn)生不切實際,但是能夠數(shù)據(jù)監(jiān)測火災(zāi)事故的產(chǎn)生,根據(jù)聲光報警,快速查找明火,用最快的時間滅掉它,以此降低火災(zāi)事故造成的損失,所以火焰和煙霧的識別始終是人們研究至關(guān)重要的方向。
火焰與煙霧分辨,搭配監(jiān)控攝像頭,實時分辨監(jiān)管物流倉庫內(nèi)不同區(qū)域發(fā)生的明火狀況,若檢測過有火災(zāi)安全隱患,立刻發(fā)出預(yù)警并通報監(jiān)測中心解決?;鹧媾c煙霧分辨預(yù)警平臺自動識別煙火監(jiān)測系統(tǒng)充分運用已有普通的視頻監(jiān)控,無須安裝熱成像相機(jī),無需控制器。火焰與煙霧分辨預(yù)警平臺自動識別煙火監(jiān)測系統(tǒng)根據(jù)智能視頻分析和深度學(xué)習(xí)神經(jīng)網(wǎng)絡(luò)技術(shù),完成對監(jiān)管區(qū)域范圍火焰開展實時分析識、告警,同時把火焰屏幕截圖和煙火視頻保留下來,同時把火災(zāi)數(shù)據(jù)及時推送到有關(guān)的人員及時進(jìn)行處理。
本系統(tǒng)基于YoloV5,采用登錄注冊進(jìn)行用戶管理,對于圖片、視頻和攝像頭捕獲的實時畫面,可檢測火焰與煙霧,系統(tǒng)支持結(jié)果記錄、展示和保存,每次檢測的結(jié)果記錄在表格中。對此這里給出博主設(shè)計的界面,同款的簡約風(fēng),功能也可以滿足圖片、視頻和攝像頭的識別檢測,希望大家可以喜歡,初始界面如下圖:
檢測類別時的界面截圖(點擊圖片可放大)如下圖,可識別畫面中存在的多個類別,也可開啟攝像頭或視頻檢測:
詳細(xì)的功能演示效果參見博主的B站視頻或下一節(jié)的動圖演示,覺得不錯的朋友敬請點贊、關(guān)注加收藏!系統(tǒng)UI界面的設(shè)計工作量較大,界面美化更需仔細(xì)雕琢,大家有任何建議或意見和可在下方評論交流。
軟件好不好用,顏值很重要,首先我們還是通過動圖看一下識別的效果,系統(tǒng)主要實現(xiàn)的功能是對圖片、視頻和攝像頭畫面中的火焰與煙霧進(jìn)行識別,識別的結(jié)果可視化顯示在界面和圖像中,另外提供多個目標(biāo)的顯示選擇功能,演示效果如下。
(一)系統(tǒng)介紹
智能火焰與煙霧檢測系統(tǒng)主要用于日常場景中火災(zāi)檢測,識別火焰與煙霧并標(biāo)注著火點的數(shù)目、位置、預(yù)測置信度等;連接攝像頭設(shè)備可開啟實時檢測功能,另外對圖片、視頻等文件中的火焰煙霧情況也可進(jìn)行測試和檢測;登錄系統(tǒng)提供用戶注冊、登錄、管理功能;訓(xùn)練和調(diào)優(yōu)的模型可有效檢測火災(zāi)情況,模型可選擇切換;可選擇單個目標(biāo)進(jìn)行單獨顯示和標(biāo)注,結(jié)果一鍵保存。
(二)技術(shù)特點
(1)檢測算法采用YoloV5深度學(xué)習(xí)模型,便捷式訓(xùn)練和切換;???????? (2)選擇圖片、視頻或攝像頭方式檢測火焰與煙霧情況;???????? (3)界面基于PyQt5實現(xiàn),結(jié)果展示、切換和保存功能;???????? (4)支持用戶登錄、注冊、管理,界面縮放、可視化等功能;
(三)用戶注冊登錄界面
這里設(shè)計了一個登錄界面,可以注冊賬號和密碼,然后進(jìn)行登錄。界面還是參考了當(dāng)前流行的UI設(shè)計,左側(cè)是一個動圖,右側(cè)輸入賬號、密碼、驗證碼等等。
(四)選擇圖片識別
系統(tǒng)允許選擇圖片文件進(jìn)行識別,點擊圖片選擇按鈕圖標(biāo)選擇圖片后,顯示所有識別的結(jié)果,可通過下拉選框查看單個結(jié)果,以便具體判斷某一特定目標(biāo)。本功能的界面展示如下圖所示:
(五)視頻識別效果展示
很多時候我們需要識別一段視頻中的多個火焰與煙霧,這里設(shè)計了視頻選擇功能。點擊視頻按鈕可選擇待檢測的視頻,系統(tǒng)會自動解析視頻逐幀識別多個火焰與煙霧,并將火焰與煙霧的分類和計數(shù)結(jié)果記錄在右下角表格中,效果如下圖所示:
(六)攝像頭檢測效果展示在真實場景中,我們往往利用攝像頭獲取實時畫面,同時需要對火焰與煙霧進(jìn)行識別,因此本文考慮到此項功能。如下圖所示,點擊攝像頭按鈕后系統(tǒng)進(jìn)入準(zhǔn)備狀態(tài),系統(tǒng)顯示實時畫面并開始檢測畫面中的火焰與煙霧,識別結(jié)果展示如下圖:
YOLO簡介
YOLO的名字來歷頗有意思,他的本意是流行語You Only Live Once的縮寫,而模型的作者Joseph Redmon改了一個詞將You Only Look One作為模型的名字。這是由于,相對于R-CNN系列算法將檢測問題分解為劃定位置和判定類別分兩步做,YOLO系列算法沒有顯式尋找區(qū)域的過程,可以實現(xiàn)端到端的快速預(yù)測,即輸入一幅圖片,在輸出中給出若干目標(biāo)的位置、類別和置信度。
而相對于同樣是一步到位的SSD算法,YOLO系列的特點在于算法一經(jīng)發(fā)出,便有各種各樣的人和團(tuán)隊對他進(jìn)行更新迭代。通過不斷地更新迭代模型版本,YOLO也得到了效果上持續(xù)的提升和更廣泛的關(guān)注。但值得注意的是,YOLO模型的原作者Joseph Redmon更新到v3版本后就退出了相關(guān)的研究,而后續(xù)的版本都是其他研究人員的工作,包括我們今天介紹的YoloV5。
我們首先介紹一下最原始的YOLO模型,然后簡要介紹一下YoloV5版本,主要通過具體的例子一起看看怎么把YOLOv5模型用好。
YOLOv1的網(wǎng)絡(luò)結(jié)構(gòu)并沒有什么特別,和我們熟悉的圖像分類一樣都是卷積神經(jīng)網(wǎng)絡(luò),但它的輸出向量卻不太一樣。如果把神經(jīng)網(wǎng)絡(luò)看作我們熟悉的回歸分析問題,那YOLO做的事情就是改變了模型響應(yīng)的結(jié)構(gòu),而這也奠定了YOLO目標(biāo)檢測的基礎(chǔ)。YOLO的輸出向量不僅包括目標(biāo)的類別,還有邊界框的坐標(biāo)和預(yù)測的置信度。它的核心思想在于把圖像分割成S*S的若干個小塊,在每個格子中預(yù)先放置兩個邊界框,通過卷積神經(jīng)網(wǎng)絡(luò)預(yù)測得到每個邊界框的坐標(biāo)、類別和置信度,然后通過非極大值抑制獲得局部唯一的預(yù)測框。
經(jīng)過若干年的版本迭代,YoloV5的網(wǎng)絡(luò)結(jié)構(gòu)博采眾長,已經(jīng)變得格外復(fù)雜,主要包括在Backbone中通過卷積和池化網(wǎng)絡(luò)結(jié)構(gòu)提取特征,在Neck部分不斷地和之前提取的特征進(jìn)行融合,Head部分則是用來進(jìn)行最終的檢測和輸出,如下圖所示。
我們今天選取YoloV5作為介紹,一方面是因為從最終效果來看YoloV5已經(jīng)相當(dāng)優(yōu)秀,是發(fā)展的比較完備、使用比較廣泛的一個版本;而更重要的是YoloV5的調(diào)用、訓(xùn)練和預(yù)測都十分方便,為初學(xué)者提供了良好的練手工具。YoloV5的另一個特點就是它為不同的設(shè)備需求和不同的應(yīng)用場景提供了大小和參數(shù)數(shù)量不同的網(wǎng)絡(luò)。
如圖所示,大一點的模型比如YOLOv5l和YOLOv5x參數(shù)更多,在大規(guī)模的COCO數(shù)據(jù)集上有更高的預(yù)測準(zhǔn)確率;而小模型比如YOLOv5n或YOLOv5s占空間更小,適合部署在移動設(shè)備上,且推理速度更快,適合于高幀 率視頻的實時檢測。
數(shù)據(jù)集介紹
這里我們使用的火焰與煙霧識別數(shù)據(jù)集,包含訓(xùn)練集3850張圖片,驗證集405張,測試集218張圖片,共計4473張圖片。其中部分圖像和標(biāo)注如下圖所示。
每張圖像均提供了圖像類標(biāo)記信息,圖像中的bounding box,關(guān)鍵part信息,以及屬性信息,數(shù)據(jù)集并解壓后得到如下的圖片。
配置模型的參數(shù)即可訓(xùn)練,設(shè)置好模型的地址,圖形的輸入尺寸為480×480,置信度閾值設(shè)為0.25,NMS閾值設(shè)為0.45,使用GPU進(jìn)行訓(xùn)練。
在cmd終端中運行train.py進(jìn)行訓(xùn)練,以下是訓(xùn)練過程中的結(jié)果截圖。歷經(jīng)8小時,便完成了訓(xùn)練,模型大小為14.1Mb。
在深度學(xué)習(xí)中,我們通常通過損失函數(shù)下降的曲線來觀察模型訓(xùn)練的情況。而YOLOv5訓(xùn)練時主要包含三個方面的損失:矩形框損失(box_loss)、置信度損失(obj_loss)和分類損失(cls_loss),在訓(xùn)練結(jié)束后,我們也可以在logs目錄下找到生成對若干訓(xùn)練過程統(tǒng)計圖。下圖為博主訓(xùn)練火焰和煙霧識別的模型訓(xùn)練曲線圖。
一般我們會接觸到兩個指標(biāo),分別是召回率recall和精度precision,兩個指標(biāo)p和r都是簡單地從一個角度來判斷模型的好壞,均是介于0到1之間的數(shù)值,其中接近于1表示模型的性能越好,接近于0表示模型的性能越差,為了綜合評價目標(biāo)檢測的性能,一般采用均值平均密度map來進(jìn)一步評估模型的好壞。我們通過設(shè)定不同的置信度的閾值,可以得到在模型在不同的閾值下所計算出的p值和r值,一般情況下,p值和r值是負(fù)相關(guān)的,繪制出來可以得到如下圖所示的曲線,其中曲線的面積我們稱AP,目標(biāo)檢測模型中每種目標(biāo)可計算出一個AP值,對所有的AP值求平均則可以得到模型的mAP值。
以PR-curve為例,可以看到我們的模型在驗證集上的均值平均準(zhǔn)確率為0.676。
在訓(xùn)練完成后得到最佳模型,接下來我們將幀圖像輸入到這個網(wǎng)絡(luò)進(jìn)行預(yù)測,從而得到預(yù)測結(jié)果,預(yù)測方法(predict.py)部分的代碼如下所示:
得到預(yù)測結(jié)果我們便可以將幀圖像中的火焰與煙霧框出,然后在圖片上用opencv繪圖操作,輸出火焰與煙霧的類別及火焰與煙霧的預(yù)測分?jǐn)?shù)。以下是讀取一個火焰與煙霧圖片并進(jìn)行檢測的腳本,首先將圖片數(shù)據(jù)進(jìn)行預(yù)處理后送predict進(jìn)行檢測,然后計算標(biāo)記框的位置并在圖中標(biāo)注出來。
執(zhí)行得到的結(jié)果如下圖所示,圖中火焰與煙霧的種類和置信度值都標(biāo)注出來了,預(yù)測速度較快?;诖四P臀覀兛梢詫⑵湓O(shè)計成一個帶有界面的系統(tǒng),在界面上選擇圖片、視頻或攝像頭然后調(diào)用模型進(jìn)行檢測。
博主對整個系統(tǒng)進(jìn)行了詳細(xì)測試,最終開發(fā)出一版流暢得到清新界面,就是博文演示部分的展示,完整的UI界面、測試圖片視頻、代碼文件,以及Python離線依賴包(方便安裝運行,也可自行配置環(huán)境),均已打包上傳,感興趣的朋友可以通過下載鏈接獲取。
若您想獲得博文中涉及的實現(xiàn)完整全部程序文件(包括測試圖片、視頻,py, UI文件等,如下圖),這里已打包上傳至博主的面包多平臺,見可參考博客與視頻,已將所有涉及的文件同時打包到里面,點擊即可運行,完整文件截圖如下:
在文件夾下的資源顯示如下,下面的鏈接中也給出了Python的離線依賴包,讀者可在正確安裝Anaconda和Pycharm軟件后,復(fù)制離線依賴包至項目目錄下進(jìn)行安裝,離線依賴的使用詳細(xì)演示也可見本人B站視頻:win11從頭安裝軟件和配置環(huán)境運行深度學(xué)習(xí)項目、Win10中使用pycharm和anaconda進(jìn)行python環(huán)境配置教程。
注意:該代碼采用Pycharm+Python3.8開發(fā),經(jīng)過測試能成功運行,運行界面的主程序為runMain.py和LoginUI.py,測試圖片腳本可運行testPicture.py,測試視頻腳本可運行testVideo.py。為確保程序順利運行,請按照requirements.txt配置Python依賴包的版本。Python版本:3.8,請勿使用其他版本,詳見requirements.txt文件;
完整資源中包含數(shù)據(jù)集及訓(xùn)練代碼,環(huán)境配置與界面中文字、圖片、logo等的修改方法請見視頻,項目完整文件下載請見參考博客文章里面,或參考視頻的簡介處給出:???
完整代碼下載:https://mbd.pub/o/bread/ZJaXlpdt
參考視頻演示:https://www.bilibili.com/video/BV1WY411z7eG/
離線依賴庫下載:https://pan.baidu.com/s/1hW9z9ofV1FRSezTSj59JSg?pwd=oy4n?(提取碼:oy4n )
界面中文字、圖標(biāo)和背景圖修改方法:
在Qt Designer中可以徹底修改界面的各個控件及設(shè)置,然后將ui文件轉(zhuǎn)換為py文件即可調(diào)用和顯示界面。如果只需要修改界面中的文字、圖標(biāo)和背景圖的,可以直接在ConfigUI.config文件中修改,步驟如下:????????(1)打開UI_rec/tools/ConfigUI.config文件,若亂碼請選擇GBK編碼打開。????????(2)如需修改界面文字,只要選中要改的字符替換成自己的就好。????????(3)如需修改背景、圖標(biāo)等,只需修改圖片的路徑。例如,原文件中的背景圖設(shè)置如下:
可修改為自己的名為background2.png圖片(位置在UI_rec/icons/文件夾中),可將該項設(shè)置如下即可修改背景圖:
由于博主能力有限,博文中提及的方法即使經(jīng)過試驗,也難免會有疏漏之處。希望您能熱心指出其中的錯誤,以便下次修改時能以一個更完美更嚴(yán)謹(jǐn)?shù)臉幼?,呈現(xiàn)在大家面前。同時如果有更好的實現(xiàn)方法也請您不吝賜教。
關(guān)鍵詞: