kebincontreras commited on
Commit
e867b76
·
verified ·
1 Parent(s): e5f3595

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +43 -12
app.py CHANGED
@@ -1,18 +1,50 @@
1
  import gradio as gr
2
- import cv2
3
  import torch
4
  from PIL import Image
5
  import numpy as np
 
6
 
7
  # Cargar el modelo YOLO (usando YOLOv5 como ejemplo)
8
  model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # Puedes cambiar 'yolov5s' por cualquier otro modelo
9
 
10
- # Función para realizar detección de objetos
11
- def detect_objects(image):
12
- image = np.array(image)
13
- results = model(image)
14
- results_image = results.render()[0]
15
- return Image.fromarray(results_image)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
16
 
17
  # Interfaz de Gradio para cargar una imagen
18
  def gradio_interface():
@@ -38,7 +70,6 @@ def gradio_interface():
38
  with gr.Row():
39
  gr.Image(value="Cacaotin.png", width=300, height=300, elem_id="centered-image")
40
  gr.Markdown("<div class='title-container'>Fermentation Level Classification for Cocoa Beans</div>")
41
-
42
 
43
  # Botón GitHub centrado
44
  gr.Markdown("<center><a href='https://github.com/kebincontreras/cocoa_beans_interfaces' target='_blank'><button style='background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 5px; font-size: 16px;'>View on GitHub</button></a></center>")
@@ -46,11 +77,11 @@ def gradio_interface():
46
  # Organizar imágenes de carga y procesadas en la misma fila
47
  with gr.Row():
48
  img_input = gr.Image(label="Upload Image")
49
- img_output = gr.Image(label="Image with Detected Objects")
50
 
51
- # Botón pequeño para clasificación
52
- btn_classify = gr.Button("Classify Fermentation Level")
53
- btn_classify.click(detect_objects, inputs=img_input, outputs=img_output)
54
 
55
  # Descripciones de clases de cacao según NTC1252:2021
56
  gr.Markdown("""
 
1
  import gradio as gr
 
2
  import torch
3
  from PIL import Image
4
  import numpy as np
5
+ from scipy.ndimage import label, find_objects
6
 
7
  # Cargar el modelo YOLO (usando YOLOv5 como ejemplo)
8
  model = torch.hub.load('ultralytics/yolov5', 'yolov5s') # Puedes cambiar 'yolov5s' por cualquier otro modelo
9
 
10
+ # Función para generar la máscara en lugar de la detección de objetos
11
+ def generate_mask(image):
12
+ # Convertir la imagen a RGB y array de numpy
13
+ image_rgb = image.convert("RGB")
14
+ np_image = np.array(image_rgb)
15
+
16
+ # Aplicar los límites RGB basados en los análisis anteriores
17
+ min_red, max_red = 21, 183
18
+ min_green, max_green = 0, 142
19
+ min_blue, max_blue = 0, 124
20
+
21
+ # Generar la máscara binaria
22
+ mask = (
23
+ (np_image[:, :, 0] >= min_red) & (np_image[:, :, 0] <= max_red) &
24
+ (np_image[:, :, 1] >= min_green) & (np_image[:, :, 1] <= max_green) &
25
+ (np_image[:, :, 2] >= min_blue) & (np_image[:, :, 2] <= max_blue)
26
+ ).astype(np.uint8)
27
+
28
+ # Invertir la máscara para que los objetos de fondo (valor 0) se conviertan en 1 y se etiqueten
29
+ inverted_mask = 1 - mask
30
+ labeled_mask, num_features = label(inverted_mask)
31
+
32
+ # Filtrar objetos pequeños de valor 0
33
+ for i, region in enumerate(find_objects(labeled_mask)):
34
+ if region is not None:
35
+ # Calcular el área del objeto con valor 0
36
+ area = np.sum(labeled_mask[region] == i + 1)
37
+ # Si el área es menor a 3000 píxeles, establece el objeto en blanco
38
+ if area < 3000:
39
+ inverted_mask[region] = np.where(labeled_mask[region] == i + 1, 0, inverted_mask[region])
40
+
41
+ # Invertir de nuevo para restaurar los valores de la máscara original
42
+ filtered_mask = 1 - inverted_mask
43
+
44
+ # Convertir la máscara modificada a una imagen en blanco y negro
45
+ mask_image = Image.fromarray((filtered_mask * 255).astype(np.uint8))
46
+
47
+ return mask_image
48
 
49
  # Interfaz de Gradio para cargar una imagen
50
  def gradio_interface():
 
70
  with gr.Row():
71
  gr.Image(value="Cacaotin.png", width=300, height=300, elem_id="centered-image")
72
  gr.Markdown("<div class='title-container'>Fermentation Level Classification for Cocoa Beans</div>")
 
73
 
74
  # Botón GitHub centrado
75
  gr.Markdown("<center><a href='https://github.com/kebincontreras/cocoa_beans_interfaces' target='_blank'><button style='background-color: #007bff; color: white; padding: 10px 20px; border: none; border-radius: 5px; font-size: 16px;'>View on GitHub</button></a></center>")
 
77
  # Organizar imágenes de carga y procesadas en la misma fila
78
  with gr.Row():
79
  img_input = gr.Image(label="Upload Image")
80
+ img_output = gr.Image(label="Image with Generated Mask")
81
 
82
+ # Botón pequeño para clasificación de máscara
83
+ btn_classify = gr.Button("Generate Mask for Fermentation Level")
84
+ btn_classify.click(generate_mask, inputs=img_input, outputs=img_output)
85
 
86
  # Descripciones de clases de cacao según NTC1252:2021
87
  gr.Markdown("""