import gradio as gr import cv2 import requests import gdown import tensorflow as tf from tensorflow import keras import numpy as np from PIL import Image from keras.models import load_model url = 'https://drive.google.com/file/d/1ueGC-MBuVip9jkfLJdfeH-RBy6fjDZ5j/view?usp=sharing' output_path = 'classes.txt' gdown.download(url, output_path, quiet=False,fuzzy=True) with open(output_path,'r') as file: LABELS = [x.strip() for x in file.readlines()] num_classes = 200 IMG_SIZE = 128 model = load_model('model.h5') # Preprocess image def preprocess(image): image = image.convert('RGB') # To RGB image = image.resize((IMG_SIZE, IMG_SIZE)) # Resize the image to 128 x 128 image = np.array(image) image = tf.keras.applications.mobilenet_v2.preprocess_input(image) # Rescale the pixel to [-1,1] for MobileNetV2 return image def predict(image): image = preprocess(image) image = np.expand_dims(image, axis=0) # Add batch dimension prediction = model.predict(image) # Predict the image using the trained model # Get the top 3 predictions idx = np.argsort(prediction[0])[::-1][:3] top3_value = np.asarray([prediction[0][i] for i in idx[0:3]]) top3_idx = idx[0:3] return {LABELS[i]:str(v) for i,v in zip(top3_idx,top3_value)} # Create Gradio interface input_image = gr.inputs.Image(type='pil') output_text = 'label' app = gr.Interface(fn=predict, inputs=input_image, outputs=output_text) app.launch()