Python+OpenCV實現(xiàn)火焰檢測
項目解釋
此 Python 代碼是使用 OpenCV、線程、聲音和電子郵件功能的火災(zāi)探測系統(tǒng)的簡單示例。
以下是它的功能的簡單描述:
1.導(dǎo)入庫:代碼首先導(dǎo)入必要的庫: cv2:用于圖像和視頻處理,特別是用于檢測火災(zāi)。 threading:用于同時運行代碼的某些部分(在后臺)。 playsound:用于播放報警聲音。 smtplib:用于發(fā)送電子郵件。
2.加載訓(xùn)練模型:代碼加載預(yù)訓(xùn)練的機器學(xué)習(xí)模型(XML 文件),該模型可以檢測圖像中的火災(zāi)。
3.設(shè)置視頻源:設(shè)置視頻輸入源,可以是筆記本電腦內(nèi)置攝像頭,也可以是外接USB 攝像頭。該代碼當前配置為從名為“fire2.mp4”的文件中讀取視頻。
4.播放報警聲音:定義播放報警聲音的函數(shù)。該函數(shù)在后臺運行(線程)并播放名為“fire_alarm.mp3”的警報聲音文件。
5.發(fā)送電子郵件:send_mail_function()定義了另一個函數(shù)來發(fā)送電子郵件。它使用 Gmail 的 SMTP 服務(wù)器向指定收件人發(fā)送有關(guān)火災(zāi)檢測的警告電子郵件。代碼中需要提供發(fā)件人的電子郵件和密碼。
6.主循環(huán):主循環(huán)處理視頻的每一幀。它執(zhí)行以下操作:將幀轉(zhuǎn)換為灰度以便于處理。使用加載的模型檢測框架中的火災(zāi)。如果檢測到火災(zāi),它會用藍色矩形突出顯示該區(qū)域。如果第一次檢測到火災(zāi)(由 控制runOnce),則會觸發(fā)警報聲并使用線程發(fā)送電子郵件。警報和電子郵件功能在后臺運行。一旦警報和電子郵件被觸發(fā)一次,系統(tǒng)就不會為后續(xù)發(fā)生火災(zāi)的幀重復(fù)此過程。
7.顯示視頻:代碼顯示處理后的幀,并在檢測到的火災(zāi)周圍繪制矩形。視頻將一直顯示,直到您按“q”鍵。
代碼示例
import cv2
import threading
import playsound
import smtplib
# 加載訓(xùn)練好的 XML 文件
fire_cascade = cv2.CascadeClassifier('fire_detection_cascade_model.xml')
# 初始化攝像頭
vid = cv2.VideoCapture(0) # 使用筆記本內(nèi)置攝像頭,索引為 0
runOnce = False # 創(chuàng)建布爾變量
# 定義播放警報聲音的函數(shù)
def play_alarm_sound_function():
playsound.playsound('fire_alarm.mp3', True)
print("Fire alarm end")
# 定義發(fā)送郵件的函數(shù)
def send_mail_function():
recipientmail = "add recipients mail"
recipientmail = recipientmail.lower()
try:
server = smtplib.SMTP('smtp.gmail.com', 587)
server.ehlo()
server.starttls()
server.login("add senders mail", 'add senders password')
server.sendmail('add senders mail', recipientmail, "Warning: Fire accident has been reported")
print("Alert mail sent successfully to {}".format(recipientmail))
server.close()
except Exception as e:
print(e)
while True:
Alarm_Status = False
ret, frame = vid.read()
if not ret:
print("Failed to grab frame")
break
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
fire = fire_cascade.detectMultiScale(gray, 1.2, 5)
# 增加調(diào)試輸出
print(f"Detected fire regions: {len(fire)}")
# 繪制火焰矩形框
for (x, y, w, h) in fire:
cv2.rectangle(frame, (x-20, y-20), (x+w+20, y+h+20), (0, 255, 0), 2)
roi_gray = gray[y:y+h, x:x+w]
roi_color = frame[y:y+h, x:x+w]
print("Fire alarm initiated")
threading.Thread(target=play_alarm_sound_function).start()
if not runOnce:
print("Mail send initiated")
threading.Thread(target=send_mail_function).start()
runOnce = True
else:
print("Mail is already sent once")
cv2.imshow('frame', frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
# 釋放資源
vid.release()
cv2.destroyAllWindows()
效果示例

以上就是Python+OpenCV實現(xiàn)火焰檢測的詳細內(nèi)容,更多關(guān)于Python OpenCV火焰檢測的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Python讀取Excel數(shù)據(jù)并進行可視化分析
這篇文章主要為大家詳細介紹了如何使用Python實現(xiàn)讀取Excel數(shù)據(jù)并進行可視化分析,文中的示例代碼講解詳細,感興趣的小伙伴可以了解一下2025-08-08
Python對時間序列進行數(shù)據(jù)分析與可視化的實戰(zhàn)指南
掌握時間序列分析技術(shù),能幫助我們從數(shù)據(jù)中挖掘出隱藏的趨勢,周期和異常,本文將以股票價格數(shù)據(jù)為例,通過Python實現(xiàn)從數(shù)據(jù)加載到可視化分析的全流程,有需要的可以了解下2025-11-11
Python基礎(chǔ)之函數(shù)原理與應(yīng)用實例詳解
這篇文章主要介紹了Python基礎(chǔ)之函數(shù)原理與應(yīng)用,結(jié)合具體實例形式詳細分析了Python函數(shù)的定義、原理、參數(shù)、返回值、嵌套等相關(guān)概念與使用技巧,需要的朋友可以參考下2020-01-01
Python求兩個文本文件以行為單位的交集、并集與差集的方法
這篇文章主要介紹了Python求兩個文本文件以行為單位的交集、并集與差集的方法,涉及Python文本文件與集合運算的相關(guān)技巧,需要的朋友可以參考下2015-06-06

