|
|
import streamlit as st |
|
|
import tensorflow as tf |
|
|
from tensorflow.keras.utils import load_img, img_to_array |
|
|
from io import BytesIO |
|
|
|
|
|
st.set_page_config(page_title="Forest Fire Detection", page_icon="π₯", layout="centered") |
|
|
|
|
|
|
|
|
st.markdown( |
|
|
""" |
|
|
<div style='text-align: center; margin-bottom: 20px;'> |
|
|
<h1>π₯ Forest Fire Detection Demo π₯</h1> |
|
|
<p style='font-size:20px;'>Upload a forest image and let AI detect fire!<br> |
|
|
<span style='font-size:40px;'>π²π³π΄</span></p> |
|
|
</div> |
|
|
""", |
|
|
unsafe_allow_html=True |
|
|
) |
|
|
|
|
|
st.sidebar.title("About") |
|
|
st.sidebar.info( |
|
|
"Upload a forest image to detect fire using a deep learning model. " |
|
|
"This demo is powered by TensorFlow and Streamlit." |
|
|
) |
|
|
|
|
|
|
|
|
@st.cache_resource |
|
|
def load_model(): |
|
|
return tf.keras.models.load_model('FFD.keras') |
|
|
model = load_model() |
|
|
|
|
|
uploaded_file = st.file_uploader("Choose an image...", type=["jpg", "jpeg", "png"]) |
|
|
|
|
|
if uploaded_file is not None: |
|
|
with st.spinner("Analyzing image..."): |
|
|
img = load_img(BytesIO(uploaded_file.read()), target_size=(150, 150)) |
|
|
img_array = img_to_array(img) / 255.0 |
|
|
img_array = img_array.reshape(1, 150, 150, 3) |
|
|
prediction = model.predict(img_array) |
|
|
confidence = float(prediction[0][0]) |
|
|
result = 'Fire Detected' if confidence > 0.5 else 'No Fire' |
|
|
|
|
|
|
|
|
col1, col2 = st.columns([1.2, 1]) |
|
|
with col1: |
|
|
st.markdown("<div style='display:flex;justify-content:center;'>", unsafe_allow_html=True) |
|
|
st.image(img, caption="Uploaded Image", width=260) |
|
|
st.markdown("</div>", unsafe_allow_html=True) |
|
|
with col2: |
|
|
st.markdown( |
|
|
f""" |
|
|
<div style='background: rgb(38, 39, 48); border-radius: 16px; box-shadow: 0 2px 12px rgba(0,0,0,0.08); padding: 24px; text-align: center; margin-top: 20px;'> |
|
|
<h2 style='color:{"red" if result=="Fire Detected" else "green"}; margin-bottom: 10px;'> |
|
|
{"π₯" if result=="Fire Detected" else "π²"} {result} |
|
|
</h2> |
|
|
<div style='margin-bottom: 10px;'> |
|
|
<progress value='{confidence:.2f}' max='1' style='width:80%; height:18px;'></progress> |
|
|
</div> |
|
|
<div style='font-size:18px; margin-bottom: 10px;'><b>Confidence:</b> {confidence:.2f}</div> |
|
|
</div> |
|
|
""", |
|
|
unsafe_allow_html=True |
|
|
) |
|
|
st.markdown("<br>", unsafe_allow_html=True) |
|
|
else: |
|
|
st.info("Please upload an image to get started.") |
|
|
|
|
|
|
|
|
st.markdown( |
|
|
"<hr><div style='text-align:center;font-size:14px;'>" |
|
|
"Made with β€οΈ by CoderKP using Streamlit & TensorFlow" |
|
|
"</div>", |
|
|
unsafe_allow_html=True |
|
|
) |