import cv2 import numpy as np import torch import streamlit as st import streamlit.components.v1 as components from ultralytics import YOLO from camera_input_live import camera_input_live # Load YOLO fire detection model model_path = "last.pt" device = "cuda" if torch.cuda.is_available() else "cpu" model = YOLO(model_path) model.to(device) # Streamlit app title st.title("🔥 Live Fire Detection with Alarm 🔥") st.subheader("Hold the camera towards potential fire sources to detect in real-time.") # Load alarm sound (must be a direct MP3 URL) alarm_url = "https://docs.google.com/uc?export=download&id=16IzsnQDmWkfYSeb_AjOTx79NEgkOpz88" # JavaScript to auto-play alarm when fire is detected js_code = f""" """ # Inject JavaScript components.html(js_code, height=0) # Capture live camera input image = camera_input_live() if image is not None: # Convert the image to OpenCV format bytes_data = image.getvalue() cv2_img = cv2.imdecode(np.frombuffer(bytes_data, np.uint8), cv2.IMREAD_COLOR) # Perform fire detection results = model(cv2_img) fire_present = False # Flag for fire detection # Check if fire is detected for result in results: if len(result.boxes) > 0: fire_present = True break # No need to check further # Display logs & trigger alarm if fire_present: st.error("🔥 Fire Detected! 🔥") components.html("", height=0) else: st.success("✅ No Fire Detected") components.html("", height=0)