Spaces:
Running
Running
import gradio as gr | |
import tensorflow as tf | |
import numpy as np | |
import os | |
# Configuration | |
HEIGHT, WIDTH = 224, 224 | |
NUM_CLASSES = 6 | |
LABELS = [ "McDonalds","Burger King","Subway", "Starbucks", "KFC","Other"] | |
from tensorflow_addons.metrics import F1Score | |
from keras.utils import custom_object_scope | |
with custom_object_scope({'Addons>F1Score': F1Score}): | |
model = tf.keras.models.load_model('best_model.h5') | |
def classify_image(inp): | |
np.random.seed(143) | |
# Ensure input is resized to expected shape | |
inp = tf.image.resize(inp, [HEIGHT, WIDTH]) | |
inp = tf.cast(inp, tf.float32) # ensure correct dtype for preprocessing | |
inp = tf.keras.applications.nasnet.preprocess_input(inp) | |
inp = tf.expand_dims(inp, axis=0) # make batch dimension | |
# Prediction | |
prediction = model.predict(inp) | |
return {LABELS[i]: float(f"{prediction[0][i]:.6f}") for i in range(NUM_CLASSES)} | |
# Gradio interface | |
iface = gr.Interface( | |
fn=classify_image, | |
inputs=gr.Image( | |
label="Input Image", | |
sources="upload", # or "sketchpad", "webcam" | |
type="numpy", # pass as numpy array to your function | |
height=HEIGHT, # set display height :contentReference[oaicite:0]{index=0} | |
width=WIDTH # set display width :contentReference[oaicite:1]{index=1} | |
), | |
outputs=gr.Label(num_top_classes=4), | |
title="Brand Logo Detection" | |
) | |
if __name__ == "__main__": | |
iface.launch(debug=False,share=True) | |