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)