Python+OpenCV實現(xiàn)火焰檢測
項目解釋
此 Python 代碼是使用 OpenCV、線程、聲音和電子郵件功能的火災探測系統(tǒng)的簡單示例。
以下是它的功能的簡單描述:
1.導入庫:代碼首先導入必要的庫: cv2:用于圖像和視頻處理,特別是用于檢測火災。 threading:用于同時運行代碼的某些部分(在后臺)。 playsound:用于播放報警聲音。 smtplib:用于發(fā)送電子郵件。
2.加載訓練模型:代碼加載預訓練的機器學習模型(XML 文件),該模型可以檢測圖像中的火災。
3.設置視頻源:設置視頻輸入源,可以是筆記本電腦內(nèi)置攝像頭,也可以是外接USB 攝像頭。該代碼當前配置為從名為“fire2.mp4”的文件中讀取視頻。
4.播放報警聲音:定義播放報警聲音的函數(shù)。該函數(shù)在后臺運行(線程)并播放名為“fire_alarm.mp3”的警報聲音文件。
5.發(fā)送電子郵件:send_mail_function()定義了另一個函數(shù)來發(fā)送電子郵件。它使用 Gmail 的 SMTP 服務器向指定收件人發(fā)送有關火災檢測的警告電子郵件。代碼中需要提供發(fā)件人的電子郵件和密碼。
6.主循環(huán):主循環(huán)處理視頻的每一幀。它執(zhí)行以下操作:將幀轉換為灰度以便于處理。使用加載的模型檢測框架中的火災。如果檢測到火災,它會用藍色矩形突出顯示該區(qū)域。如果第一次檢測到火災(由 控制runOnce),則會觸發(fā)警報聲并使用線程發(fā)送電子郵件。警報和電子郵件功能在后臺運行。一旦警報和電子郵件被觸發(fā)一次,系統(tǒng)就不會為后續(xù)發(fā)生火災的幀重復此過程。
7.顯示視頻:代碼顯示處理后的幀,并在檢測到的火災周圍繪制矩形。視頻將一直顯示,直到您按“q”鍵。
代碼示例
import cv2 import threading import playsound import smtplib # 加載訓練好的 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)容,更多關于Python OpenCV火焰檢測的資料請關注腳本之家其它相關文章!
相關文章
python的scrapy框架之Pipeline文件的用法詳解
這篇文章主要介紹了python的scrapy框架之Pipeline文件的用法詳解,Pipeline是一個獨立的模塊,用于處理從Spider中提取的Item對象,實現(xiàn)對數(shù)據(jù)的進一步處理、存儲和清洗等操作,下面將詳細介紹Scrapy框架中Pipeline的用法,需要的朋友可以參考下2023-10-10pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法
這篇文章主要給大家介紹了關于pytorch中.numpy()、.item()、.cpu()、.detach()以及.data的使用方法,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2022-08-08vim自動補全插件YouCompleteMe(YCM)安裝過程解析
這篇文章主要介紹了vim自動補全插件YouCompleteMe(YCM)安裝過程解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-10-10Python PyMySQL操作MySQL數(shù)據(jù)庫的方法詳解
PyMySQL是一個用于Python編程語言的純Python MySQL客戶端庫,它遵循Python標準DB API接口,并提供了許多方便的功能,本文就來和大家簡單介紹一下吧2023-05-05python bottle框架支持jquery ajax的RESTful風格的PUT和DELETE方法
下面小編就為大家?guī)硪黄猵ython bottle框架支持jquery ajax的RESTful風格的PUT和DELETE方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-05-05