EmberDeepAI / app.py
AbdullahImran's picture
Update app.py
f936fbe verified
raw
history blame
4.99 kB
import gradio as gr
import tensorflow as tf
from PIL import Image
import numpy as np
import tensorflow as tf
import keras.backend as K
# Define focal loss
def focal_loss(gamma=2., alpha=0.25):
def focal_loss_fixed(y_true, y_pred):
y_pred = tf.clip_by_value(y_pred, K.epsilon(), 1. - K.epsilon())
cross_entropy = -y_true * tf.math.log(y_pred)
weight = alpha * y_true * tf.math.pow((1 - y_pred), gamma)
loss = weight * cross_entropy
return tf.reduce_sum(loss, axis=-1)
return focal_loss_fixed
# Load models
vgg16_model = tf.keras.models.load_model(
"vgg16_best_model.keras"
)
xception_model = tf.keras.models.load_model(
'xception_best.keras',
custom_objects={'focal_loss_fixed': focal_loss()}
)
def predict_fire(image):
img = Image.fromarray(image).convert("RGB")
# Preprocess for vgg16_model (128x128 input size)
vgg16_img = img.resize((128, 128))
vgg16_img_array = np.array(vgg16_img) / 255.0
vgg16_img_array = np.expand_dims(vgg16_img_array, axis=0)
# Fire detection using vgg16_model
fire_pred = vgg16_model.predict(vgg16_img_array)
fire_status = "Fire Detected" if fire_pred[0][0] > 0.5 else "No Fire Detected"
# If fire is detected, preprocess for xception_model (224x224 input size)
if fire_status == "Fire Detected":
xception_img = img.resize((224, 224))
xception_img_array = np.array(xception_img) / 255.0
xception_img_array = np.expand_dims(xception_img_array, axis=0)
# Severity prediction using xception_model
severity_pred = xception_model.predict(xception_img_array)
severity_level = np.argmax(severity_pred[0])
severity = ["Mild", "Moderate", "Severe"][severity_level]
# Static rule-based recommendations with detailed instructions
if severity == "Mild":
recommendation = (
"Fire detected is mild and manageable. "
"For the Fire Department: Ensure continuous monitoring of the fire. "
"Deploy fire trucks and extinguishing equipment if necessary to prevent escalation. "
"For the Public: Stay alert and stay indoors. Evacuate only if advised by authorities. "
"Ensure clear access routes for emergency services. "
"Keep fire safety equipment such as fire extinguishers readily available."
)
elif severity == "Moderate":
recommendation = (
"Fire detected is moderate and poses a significant risk. "
"For the Fire Department: Immediate response is needed. "
"Deploy sufficient fire trucks, helicopters (if possible), and personnel to contain the fire. "
"Establish firebreaks and coordinate with neighboring departments. "
"For the Public: Evacuate the area promptly as the fire might spread. "
"Follow evacuation routes and do not return to the area until authorities deem it safe. "
"Be cautious of smoke inhalation, and wear protective masks if available."
)
else: # Severe
recommendation = (
"Severe fire detected with rapid spread potential. Immediate action is critical. "
"For the Fire Department: Prioritize evacuation operations. "
"Deploy all available resources, including specialized teams and air support. "
"Set up perimeters around the affected area and prevent access. "
"Coordinate with national agencies for additional resources and backup. "
"For the Public: Evacuate immediately. Leave all belongings behind and proceed to designated safe zones. "
"Avoid smoke exposure and keep away from fire zones. Follow all official instructions and do not attempt to return to the area until clearance is given by emergency services. "
"Remain in contact with local authorities for further updates."
)
else:
severity = "N/A"
recommendation = (
"No fire detected. However, always be cautious of any unusual smoke or smells in your environment. "
"Ensure that fire alarms are functioning, and regularly check fire extinguishers. "
"Stay prepared by familiarizing yourself with fire evacuation routes and emergency contact numbers."
)
return fire_status, severity, recommendation
# Gradio interface
interface = gr.Interface(
fn=predict_fire,
inputs=gr.Image(type="numpy", label="Upload Image"),
outputs=[
gr.Textbox(label="Fire Status"),
gr.Textbox(label="Severity Level"),
gr.Textbox(label="Recommendation")
],
title="Fire Prediction and Severity Classification",
description="Upload an image to predict fire and its severity level (Mild, Moderate, Severe), and get recommendations.",
)
if __name__ == "__main__":
interface.launch()