import gradio as gr import tensorflow as tf from PIL import Image import numpy as np # Load models vgg16_model = tf.keras.models.load_model( ".models/vgg16_best_model.keras" ) xception_model = tf.keras.models.load_model( ".models/xception_best.keras" ) def predict_fire(image): img = Image.fromarray(image).convert("RGB") img = img.resize((224, 224)) # Match model input size img_array = np.array(img) / 255.0 img_array = np.expand_dims(img_array, axis=0) fire_pred = vgg16_model.predict(img_array) fire_status = "Fire Detected" if fire_pred[0][0] > 0.5 else "No Fire Detected" if fire_status == "Fire Detected": severity_pred = xception_model.predict(img_array) severity_level = np.argmax(severity_pred[0]) severity = ["Mild", "Moderate", "Severe"][severity_level] else: severity = "N/A" return fire_status, severity # 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"), ], title="Fire Prediction and Severity Classification", description="Upload an image to predict fire and its severity level (Mild, Moderate, Severe).", ) if __name__ == "__main__": interface.launch()