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) | |