breed-detector / app.py
degregor69's picture
added app
9d82e24
import gradio as gr
import numpy as np
import tensorflow as tf
from tensorflow.keras.preprocessing.image import img_to_array
from tensorflow.keras.models import load_model
loaded_model = load_model('efficientnet_total_model.keras')
breeds_translator = {0: 'otterhound', 1: 'cocker_spaniel', 2: 'Brittany_spaniel', 3: 'Afghan_hound', 4: 'Maltese_dog', 5: 'schipperke', 6: 'Irish_setter', 7: 'Pekinese', 8: 'golden_retriever', 9: 'vizsla', 10: 'Welsh_springer_spaniel', 11: 'Staffordshire_bullterrier', 12: 'Border_collie', 13: 'Irish_terrier', 14: 'Eskimo_dog', 15: 'pug', 16: 'kelpie', 17: 'Yorkshire_terrier', 18: 'Tibetan_terrier', 19: 'Walker_hound', 20: 'affenpinscher', 21: 'Cardigan', 22: 'English_springer', 23: 'English_foxhound', 24: 'West_Highland_white_terrier', 25: 'Lakeland_terrier', 26: 'Rhodesian_ridgeback', 27: 'Gordon_setter', 28: 'Lhasa', 29: 'coated_retriever', 30: 'beagle', 31: 'Tibetan_mastiff', 32: 'Sussex_spaniel', 33: 'Saint_Bernard', 34: 'toy_terrier', 35: 'standard_poodle', 36: 'Bernese_mountain_dog', 37: 'Pomeranian', 38: 'Ibizan_hound', 39: 'redbone', 40: 'toy_poodle', 41: 'basset', 42: 'Scottish_deerhound', 43: 'miniature_pinscher', 44: 'basenji', 45: 'Border_terrier', 46: 'Bedlington_terrier', 47: 'Kerry_blue_terrier', 48: 'Weimaraner', 49: 'English_setter', 50: 'bluetick', 51: 'Boston_bull', 52: 'Italian_greyhound', 53: 'Dandie_Dinmont', 54: 'Airedale', 55: 'Irish_water_spaniel', 56: 'Norfolk_terrier', 57: 'haired_fox_terrier', 58: 'French_bulldog', 59: 'coated_wheaten_terrier', 60: 'komondor', 61: 'African_hunting_dog', 62: 'Siberian_husky', 63: 'Newfoundland', 64: 'Bouvier_des_Flandres', 65: 'Saluki', 66: 'Shetland_sheepdog', 67: 'collie', 68: 'Rottweiler', 69: 'silky_terrier', 70: 'Norwegian_elkhound', 71: 'Chihuahua', 72: 'Leonberg', 73: 'Norwich_terrier', 74: 'cairn', 75: 'boxer', 76: 'borzoi', 77: 'dhole', 78: 'Samoyed', 79: 'German_shepherd', 80: 'Labrador_retriever', 81: 'Blenheim_spaniel', 82: 'groenendael', 83: 'Doberman', 84: 'Great_Dane', 85: 'coated_retriever', 86: 'Appenzeller', 87: 'Tzu', 88: 'Japanese_spaniel', 89: 'Greater_Swiss_Mountain_dog', 90: 'tan_coonhound', 91: 'dingo', 92: 'Great_Pyrenees', 93: 'whippet', 94: 'keeshond', 95: 'malinois', 96: 'American_Staffordshire_terrier', 97: 'Mexican_hairless', 98: 'giant_schnauzer', 99: 'Brabancon_griffon', 100: 'kuvasz', 101: 'miniature_poodle', 102: 'Irish_wolfhound', 103: 'briard', 104: 'clumber', 105: 'standard_schnauzer', 106: 'bull_mastiff', 107: 'malamute', 108: 'Sealyham_terrier', 109: 'EntleBucher', 110: 'chow', 111: 'papillon', 112: 'Pembroke', 113: 'haired_pointer', 114: 'Old_English_sheepdog', 115: 'Chesapeake_Bay_retriever', 116: 'Scotch_terrier', 117: 'Australian_terrier', 118: 'miniature_schnauzer', 119: 'bloodhound'}
def find_breed(image):
img = img_to_array(image)
img = tf.image.resize(img, (256, 256))
# Ajouter une dimension pour correspondre à la forme d'entrée du modèle
img = np.expand_dims(img, axis=0)
# Prédire la classe de race
prediction = loaded_model.predict(img)
confidence = np.max(prediction, axis=1)[0] * 100
predicted_class = np.argmax(prediction, axis=1)
class_name = breeds_translator[predicted_class[0]]
# Retourner la classe prédite
return f"Race : {class_name} - Confiance : {round(confidence,2)}%" # Returning the class index as a string
demo = gr.Interface(fn=find_breed, inputs="image", outputs="text")
demo.launch()