dog_breed / app.py
YonaniCodes
.
6939a5a
Raw
History Blame Contribute Delete
1.8 kB
import gradio as gr
import tensorflow as tf
import numpy as np
import json
import tensorflow_hub as hub
from PIL import Image, ImageDraw, ImageFont
# Register the custom layer
tf.keras.utils.get_custom_objects().update({'KerasLayer': hub.KerasLayer})
# Load the model
model = tf.keras.models.load_model("dog_breed_model.h5")
def load_breeds(file_path='unique_breeds.json'):
with open(file_path, 'r') as file:
data = json.load(file)
return data["breeds"]
unique_breeds = load_breeds('unique_breeds.json') # Load breed names into your array
def process_image(image, img_size=224):
"""
Takes a PIL image and turns it into a preprocessed Tensor.
"""
image = image.resize((img_size, img_size)) # Resize
img_array = tf.keras.preprocessing.image.img_to_array(image) # Convert to array
img_array = img_array / 255.0 # Normalize
return img_array
def predict_breed(image):
img_array = process_image(image)
img_array = tf.expand_dims(img_array, axis=0) # Add batch dimension
predictions = model.predict(img_array)
predicted_class_index = np.argmax(predictions[0])
predicted_class = unique_breeds[predicted_class_index]
confidence = predictions[0][predicted_class_index] * 100 # Convert to percentage
# Replace underscores with spaces in the class name and capitalize
predicted_class = predicted_class.replace('_', ' ').upper()
return f"{predicted_class} ({confidence:.2f}%)"
# Create Gradio interface
interface = gr.Interface(
fn=predict_breed,
inputs=gr.Image(type="pil"),
outputs=gr.Text(),
title="Dog Breed Identifier 🐶",
description="Upload a dog image and the model will predict the breed along with confidence!"
)
# Launch app with public link
interface.launch(share=True)