File size: 5,817 Bytes
086b0fb 4a5b62f 086b0fb 7a77109 086b0fb 4a5b62f de0a444 7a77109 beeb740 7a77109 4a5b62f 7a77109 4a5b62f 7a77109 4a5b62f 7a77109 4a5b62f 7a77109 4a5b62f 7a77109 4a5b62f 7a77109 4a5b62f de0a444 086b0fb 4a5b62f b1325b9 7a77109 4a5b62f 086b0fb 3b4c873 4a5b62f 086b0fb 4a5b62f 086b0fb 4a5b62f 086b0fb 4a5b62f 086b0fb 3b4c873 4a5b62f 086b0fb 4a5b62f b1325b9 4a5b62f |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 |
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)
|