Prathamesh1420's picture
Update app.py
f55134b verified
raw
history blame
1.92 kB
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://www.soundjay.com/button/beep-07.wav" # Replace with your hosted alarm
# JavaScript to auto-play alarm when fire is detected
js_code = f"""
<script>
var alarm = new Audio("{alarm_url}");
alarm.loop = true;
function playAlarm() {{
alarm.play().catch(error => {{
console.log("Autoplay failed. User interaction required.");
}});
}}
function stopAlarm() {{
alarm.pause();
alarm.currentTime = 0;
}}
</script>
"""
# 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("<script>playAlarm();</script>", height=0)
else:
st.success("βœ… No Fire Detected")
components.html("<script>stopAlarm();</script>", height=0)