File size: 2,564 Bytes
fd81e53
 
 
 
8f454ba
fd81e53
8f454ba
a298325
fd81e53
 
 
8f454ba
 
fd81e53
 
 
 
 
 
 
 
 
 
 
8f454ba
fd81e53
 
cf42a59
8f07b18
fd81e53
cf42a59
8f07b18
 
 
fd81e53
 
8f454ba
fd81e53
8f454ba
fd81e53
 
 
 
 
 
8f454ba
fd81e53
 
 
 
8f454ba
 
fd81e53
8f454ba
 
 
 
 
 
 
 
 
 
 
 
 
 
 
fd81e53
8f454ba
fd81e53
8f454ba
 
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
import gradio as gr
from ultralytics import YOLO
import cv2
import numpy as np
from PIL import Image

# Cargar el modelo YOLO directamente desde el archivo local
model = YOLO('./best.pt')

# Funci贸n para procesar la imagen con YOLO
def detectar_objetos(image):
    # Convertir la imagen de entrada (Gradio) a formato OpenCV (BGR)
    image_bgr = cv2.cvtColor(np.array(image), cv2.COLOR_RGB2BGR)

    # Realiza la detecci贸n con YOLO directamente en la imagen
    results = model.predict(source=image_bgr, conf=0.25, save=False)

    # Dibuja las detecciones en la imagen
    annotated_image = image_bgr.copy()
    for box in results[0].boxes:
        # Extraer coordenadas y clase
        x1, y1, x2, y2 = map(int, box.xyxy[0])
        cls = int(box.cls)

        # Colores personalizados para las clases
        if cls == 0:  # Bueno
            color = (0, 255, 0)  # Verde
            label = "Well"
        elif cls == 1:  # 
            color = (0, 0, 255)  # Rojo
            label = "Partially"
        elif cls == 2:  # 
            color = (255, 0, 0)  # Azul
            label = "bad"
        else:
            color = (255, 255, 255)
            label = f"Class {cls}"

        # Dibujar el cuadro y la etiqueta
        cv2.rectangle(annotated_image, (x1, y1), (x2, y2), color, thickness=2)
        cv2.putText(
            annotated_image, label, (x1, y1 - 10),
            cv2.FONT_HERSHEY_SIMPLEX, 0.5, color, thickness=1
        )

    # Convertir la imagen anotada de BGR a RGB para mostrar en Gradio
    annotated_image_rgb = cv2.cvtColor(annotated_image, cv2.COLOR_BGR2RGB)

    return annotated_image_rgb

# Crear la interfaz Gradio con ejemplos y dise帽o personalizado
examples = [["cacao_1.png"], ["cacao_2.jpg"]]  # Aseg煤rate de que estos archivos est茅n en la misma carpeta que el script

iface = gr.Interface(
    fn=detectar_objetos,
    inputs=gr.Image(label="Upload Image"),
    outputs=gr.Image(label="Image with Detected Objects"),
    title="Fermentation Level Classification for Cocoa Beans",
    examples=examples,
    description="""
        **Cacao Classes According to NTC1252:2021:**
        - **a) Well-fermented:** Optimal fermentation process.
        - **b) Partially fermented:** Incomplete fermentation process.
        - **c) Non-fermented:** Lack of adequate fermentation.
        
        **Explanation According to NTC1252:2021:** Here you can explain how the NTC1252:2021 norm applies to the classification of fermentation levels.
    """
)

# Ejecutar la aplicaci贸n
if __name__ == "__main__":
    iface.launch()