Snearec commited on
Commit
3031969
1 Parent(s): d3a7688

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +58 -8
app.py CHANGED
@@ -1,21 +1,71 @@
1
- from PIL import Image
2
  from ultralytics import YOLO
3
  import gradio as gr
 
4
 
5
  # Cargar un modelo YOLOv8n preentrenado
6
  model = YOLO('best.pt')
7
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
8
  def detect_objects(image: Image.Image):
9
  # Realizar la inferencia
10
  results = model.predict(image)
11
 
12
- # Obtener los resultados y el texto de descripci贸n
13
- description = ""
14
- for r in results:
15
- im_array = r.plot() # plot a BGR numpy array of predictions
16
- im = Image.fromarray(im_array[..., ::-1]) # Convertir a imagen RGB
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
 
18
- return im
19
 
20
  # Crear la interfaz de Gradio
21
- gr.Interface(fn=detect_objects, inputs="image", outputs="image").launch()
 
 
 
 
 
 
1
+ from PIL import Image, ImageDraw, ImageFont
2
  from ultralytics import YOLO
3
  import gradio as gr
4
+ import torch
5
 
6
  # Cargar un modelo YOLOv8n preentrenado
7
  model = YOLO('best.pt')
8
 
9
+ def contar_detecciones(cls_tensor, nombres_clases):
10
+ conteos = {nombre: torch.sum(cls_tensor == indice).item() for indice, nombre in enumerate(nombres_clases)}
11
+ return conteos
12
+
13
+ def clases_detectadas(res):
14
+ if res and hasattr(res[0], 'xyxy'):
15
+ cls_tensor = res[0].xyxy[0][:, -1] # Obtener tensor de clases
16
+ nombres_clases = model.names
17
+ conteos = contar_detecciones(cls_tensor, nombres_clases)
18
+ respuesta = ""
19
+ for nombre, conteo in conteos.items():
20
+ respuesta += f"Clase {nombre} : {conteo} detecciones\n"
21
+ return respuesta
22
+ else:
23
+ return "No se encontraron resultados o falta informaci贸n relevante"
24
+
25
  def detect_objects(image: Image.Image):
26
  # Realizar la inferencia
27
  results = model.predict(image)
28
 
29
+ # Guardar la imagen con todas las detecciones
30
+ im_array = results.render()[0]
31
+ im_all_detections = Image.fromarray(im_array[..., ::-1])
32
+
33
+ # Contar las clases detectadas
34
+ conteo_clases = clases_detectadas(results)
35
+
36
+ # Guardar informaci贸n de detecci贸n
37
+ detections = results.xyxy[0].tolist()
38
+
39
+ return im_all_detections, conteo_clases, detections
40
+
41
+ def update_image(original_image: Image.Image, detections, show_potatoes: bool, show_tongues: bool):
42
+ # Crear una copia de la imagen original
43
+ updated_image = original_image.copy()
44
+ draw = ImageDraw.Draw(updated_image)
45
+
46
+ # Definir la fuente para las etiquetas
47
+ try:
48
+ font = ImageFont.truetype("arial.ttf", 15)
49
+ except IOError:
50
+ font = ImageFont.load_default()
51
+
52
+ # Filtrar y dibujar solo las detecciones seleccionadas
53
+ for det in detections:
54
+ label = model.names[int(det[5])]
55
+ if (label == 'papa' and show_potatoes) or (label == 'lengua' and show_tongues):
56
+ box = det[:4]
57
+ label_text = f"{label} {det[4]:.2f}"
58
+ draw.rectangle(box, outline="red", width=2)
59
+ text_size = draw.textsize(label_text, font=font)
60
+ draw.rectangle([box[0], box[1] - text_size[1], box[0] + text_size[0], box[1]], fill="red")
61
+ draw.text((box[0], box[1] - text_size[1]), label_text, fill="white", font=font)
62
 
63
+ return updated_image
64
 
65
  # Crear la interfaz de Gradio
66
+ iface = gr.Interface(
67
+ fn=detect_objects,
68
+ update=update_image,
69
+ inputs=["image", gr.Checkbox(label="Mostrar Papas"), gr.Checkbox(label="Mostrar Lenguas")],
70
+ outputs=["image", "text", "image"]
71
+ ).launch()