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