orisha / app.py
Horus7's picture
Update app.py
beeb740 verified
import gradio as gr
from ultralytics import YOLO # Importer YOLOv8
import numpy as np
import cv2
# Charger le modèle YOLOv8
model = YOLO('best.pt') # Remplace 'best.pt' par le chemin de ton modèle
# Fonction pour dessiner les boîtes de détection sur l'image
def draw_boxes(image, detections, class_names, confidence_threshold):
for detection in detections:
if detection.conf[0] >= confidence_threshold:
class_index = int(detection.cls[0]) # Obtenir l'indice de la classe
class_name = class_names[class_index] # Nom de la classe
confidence = format(detection.conf[0], ".2f") # Confiance
# Obtenir les coordonnées des boîtes
xyxy = detection.xyxy[0].cpu().numpy().astype(int)
(x1, y1, x2, y2) = xyxy
# Dessiner la boîte
cv2.rectangle(image, (x1, y1), (x2, y2), (0, 255, 0), 2)
label = f"{class_name} ({confidence})"
# Ajouter le texte (classe et confiance) au-dessus de la boîte
cv2.putText(image, label, (x1, y1 + 20), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)
return image
# Fonction d'inférence
def detect(img, confidence_threshold):
# Convertir l'image PIL en format approprié pour OpenCV
img_cv = np.array(img)
img_cv = cv2.cvtColor(img_cv, cv2.COLOR_RGB2BGR)
# Faire une prédiction avec YOLOv8
results = model(img_cv) # YOLOv8 prend directement l'image en entrée
# Si des objets sont détectés, dessiner les boîtes
if results:
detections = results[0].boxes # Les résultats des détections
if len(detections) > 0:
class_names = ['AMAZONE', 'BIOGUERRA', 'PORTE DU NON RETOUR', 'REVENANT', 'ZANGBETO']
img_with_boxes = draw_boxes(img_cv, detections, class_names, confidence_threshold)
return cv2.cvtColor(img_with_boxes, cv2.COLOR_BGR2RGB) # Convertir l'image en format RGB pour Gradio
else:
return img # Si aucune détection, retourner l'image originale
else:
return img # Si aucune détection, retourner l'image originale
# Interface utilisateur avec Gradio
title = "Orisha YOLOv8"
iface = gr.Interface(
fn=detect,
inputs=[
gr.Image(type="pil", image_mode='RGB', label="Image à détecter"), # Charger une image
gr.Slider(0.0, 1.0, value=0.25, step=0.01, label="Confiance minimale"), # Paramétrer la confiance
],
outputs=gr.Image(type="pil", label="Résultat avec détections"), # Afficher le résultat avec boîtes
title=title
)
# Lancer l'application
iface.launch(inline=False)
# import gradio as gr
# from ultralytics import YOLO # Importer YOLOv8
# import numpy as np
# # Charger le modèle YOLOv8
# model = YOLO('best.pt') # Remplace 'best.pt' par le chemin de ton modèle
# # Fonction d'inférence
# def detect(img):
# # Faire une prédiction avec YOLOv8
# results = model(img) # YOLOv8 prend directement l'image en entrée
# # Si des objets sont détectés, renvoyer la classe de l'objet
# if results:
# detections = results[0].boxes # Les résultats des détections
# if len(detections) > 0:
# # Obtenir la classe de la détection avec la probabilité la plus élevée
# detection = detections[0] # On prend la première détection (peut être ajusté)
# class_index = int(detection.cls[0]) # Obtenir l'indice de la classe
# class_names = ['AMAZONE', 'BIOGUERRA','PORTE DU NON RETOUR', 'REVENANT', 'ZANGBETO']
# class_name = class_names[class_index] # Nom de la classe prédite
# confidence = format(detection.conf[0], ".2f") # Confiance de la détection
# return f"Classe : {class_name}, Confiance : {confidence}"
# else:
# return "Aucune détection"
# else:
# return "Aucune détection"
# # Interface utilisateur avec Gradio
# title = "Orisha YOLOv8"
# iface = gr.Interface(
# fn=detect,
# inputs=gr.Image(type="pil", image_mode='RGB'), # Charger une image
# outputs=gr.Textbox(label="Résultat", lines=2), # Afficher le résultat
# title=title
# )
# # Lancer l'application
# iface.launch(inline=False)
# import gradio as gr
# import tensorflow as tf
# import numpy as np
# from keras.models import load_model
# from tensorflow.keras.preprocessing.image import load_img, img_to_array
# # Charger le modèle sans compilation
# model = load_model('best_model_v2.keras', compile=False)
# # Recompiler le modèle avec la fonction de perte et l'optimiseur appropriés
# model.compile(
# optimizer='adam',
# loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
# metrics=['accuracy']
# )
# def format_decimal(value):
# decimal_value = format(value, ".2f")
# return decimal_value
# def detect(img):
# # Prétraiter l'image
# img = img.resize((256, 256)) # Redimensionner l'image
# img = img_to_array(img)
# img = np.expand_dims(img, axis=0)
# img = img / 255.0 # Normaliser les valeurs de l'image
# # Faire une prédiction
# prediction = model.predict(img)[0]
# # Classes prédictives avec leurs index respectifs
# class_names = ['AMAZONE', 'BIOGUERRA', 'REVENANT', 'ZANGBETO', 'PORTE DU NON RETOUR']
# # Trouver l'indice de la classe avec la probabilité la plus élevée
# class_index = np.argmax(prediction)
# # Obtenir le nom de la classe prédite
# texte = class_names[class_index]
# return texte
# title = "Orisha"
# iface = gr.Interface(
# fn=detect,
# inputs=gr.Image(type="pil", image_mode='RGB'),
# outputs=gr.Textbox(label="Classe", lines=10),
# title=title
# )
# iface.launch(inline=False)