4月7日
ai烟雾报警系统
import cv2 import numpy as np from tensorflow.keras.models import load_model import time import winsound # Windows系统报警音,Linux/Mac可使用其他库 # 系统配置 MODEL_PATH = 'smoke_fire_detection.h5' # 预训练模型路径 ALARM_THRESHOLD = 0.85 # 报警置信度阈值 CHECK_INTERVAL = 0.5 # 检测间隔(秒) class SmokeFireDetector: def __init__(self): # 加载预训练模型 self.model = load_model(MODEL_PATH) self.cap = cv2.VideoCapture(0) # 使用默认摄像头 self.alarm_status = False self.last_alarm = 0 # 初始化窗口 cv2.namedWindow('AI Smoke/Fire Detection') def preprocess_frame(self, frame): """预处理视频帧""" frame = cv2.resize(frame, (224, 224)) # 调整尺寸匹配模型输入 frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) frame = frame / 255.0 # 归一化 return np.expand_dims(frame, axis=0) def analyze_frame(self, frame): """使用模型分析帧""" preprocessed = self.preprocess_frame(frame) prediction = self.model.predict(preprocessed) return prediction[0][0] # 假设输出为[无危险概率, 有危险概率] def trigger_alarm(self): """触发报警""" if not self.alarm_status: print("[!] 检测到烟雾/火焰危险!") self.alarm_status = True winsound.Beep(2000, 1000) # 1秒报警音 self.last_alarm = time.time() def run(self): """主循环""" while True: ret, frame = self.cap.read() if not ret: print("无法获取视频流") break # 定时检测 if time.time() - self.last_alarm > CHECK_INTERVAL: confidence = self.analyze_frame(frame) if confidence > ALARM_THRESHOLD: self.trigger_alarm() else: self.alarm_status = False # 显示界面 display_frame = cv2.resize(frame, (640, 480)) if self.alarm_status: cv2.putText(display_frame, "ALARM! SMOKE/FIRE DETECTED!", (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (0,0,255), 2) cv2.imshow('AI Smoke/Fire Detection', display_frame) # 退出检测 if cv2.waitKey(1) & 0xFF == ord('q'): break self.cap.release() cv2.destroyAllWindows() if __name__ == "__main__": detector = SmokeFireDetector() detector.run()

浙公网安备 33010602011771号