File size: 1,471 Bytes
159fb0f
 
0e3827e
28ef308
0e3827e
28ef308
 
 
1be3e87
873b8a1
 
 
 
f9ead50
52af948
e22f878
74a719c
5b3415e
28ef308
b0e91bc
 
 
5b3415e
b0e91bc
159fb0f
28ef308
 
b0e91bc
28ef308
 
b0e91bc
28ef308
 
 
 
 
4b458b8
28ef308
 
 
 
 
 
 
 
 
597d7dd
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
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_76.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)