Spaces:
Running
Running
import gradio as gr | |
import tensorflow as tf | |
# Load model | |
model_save_path = "dog_vision_model_demo.keras" | |
loaded_model_for_demo = tf.keras.models.load_model(model_save_path) | |
# Load labels | |
with open("stanford_dogs_class_names.txt", "r") as f: | |
class_names = [line.strip() for line in f.readlines()] | |
# Create prediction function | |
def pred_on_custom_image(image, # input image (preprocessed by Gradio's Image input to be numpy.array) | |
model: tf.keras.Model =loaded_model_for_demo, # Trained TensorFlow model for prediction | |
target_size: int = 224, # Desired size of the image for input to the model | |
class_names: list = class_names): # List of class names | |
""" | |
Loads an image, preprocesses it, makes a prediction using a provided model, | |
and returns a dictionary of prediction probabilities per class name. | |
Args: | |
image: Input image. | |
model: Trained TensorFlow model for prediction. | |
target_size (int, optional): Desired size of the image for input to the model. Defaults to 224. | |
class_names (list, optional): List of class names for plotting. Defaults to None. | |
Returns: | |
Dict[str: float]: A dictionary of string class names and their respective prediction probability. | |
""" | |
# Note: gradio.inputs.Image handles opening the image | |
# # Prepare and load image | |
# custom_image = tf.keras.utils.load_img( | |
# path=image_path, | |
# color_mode="rgb", | |
# target_size=target_size, | |
# ) | |
# Create resizing layer to resize the image | |
resize = tf.keras.layers.Resizing(height=target_size, | |
width=target_size) | |
# Turn the image into a tensor and resize it | |
custom_image_tensor = resize(tf.keras.utils.img_to_array(image)) | |
# Add a batch dimension to the target tensor (e.g. (224, 224, 3) -> (1, 224, 224, 3)) | |
custom_image_tensor = tf.expand_dims(custom_image_tensor, axis=0) | |
# Make a prediction with the target model | |
pred_probs = model.predict(custom_image_tensor)[0] | |
# Predictions get returned as a dictionary of {label: pred_prob} | |
pred_probs_dict = {class_names[i]: float(pred_probs[i]) for i in range(len(class_names))} | |
return pred_probs_dict | |
# Create Gradio interface | |
interface_title = "Dog Vision πΆποΈ" | |
interface_description = """ | |
Identify different dogs in images with deep learning. Model trained with TensorFlow/Keras. | |
## Links | |
* Original dataset: http://vision.stanford.edu/aditya86/ImageNetDogs/ | |
* Code to train model: https://dev.mrdbourke.com/zero-to-mastery-ml/end-to-end-dog-vision-v2/ | |
""" | |
interface = gr.Interface(fn=pred_on_custom_image, | |
inputs=gr.Image(), | |
outputs=gr.Label(num_top_classes=3), | |
examples=["dog-photo-1.jpeg", | |
"dog-photo-2.jpeg", | |
"dog-photo-3.jpeg", | |
"dog-photo-4.jpeg"], | |
title=interface_title, | |
description=interface_description) | |
interface.launch(debug=True) | |