File size: 1,726 Bytes
9d95b96
 
 
 
f5383f6
9d95b96
 
 
 
 
 
 
 
 
 
f5383f6
9d95b96
 
141b335
d4b30d0
9d95b96
f5383f6
 
9d95b96
f5383f6
 
 
 
 
 
9d95b96
 
f5383f6
9d95b96
 
 
141b335
f5383f6
 
 
 
 
9d95b96
141b335
9d95b96
 
 
 
 
 
141b335
 
9d95b96
141b335
9d95b96
 
f5383f6
9d95b96
 
f5383f6
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
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 from a direct MP3 URL
alarm_url = "https://docs.google.com/uc?export=download&id=16IzsnQDmWkfYSeb_AjOTx79NEgkOpz88"  # Replace with a working direct MP3 URL

# JavaScript to control alarm playback
js_code = f"""
<script>
    var alarm = new Audio("{alarm_url}");
    function playAlarm() {{
        alarm.loop = true;
        alarm.play();
    }}
    function stopAlarm() {{
        alarm.pause();
        alarm.currentTime = 0;
    }}
</script>
"""

# Inject JavaScript once
components.html(js_code, height=0)

# Capture live camera input
image = camera_input_live()

if image is not None:
    # Convert 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)
    
    # Check if fire is detected
    fire_present = any(len(result.boxes) > 0 for result in results)

    # Show logs in UI & 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)