ProyectoVision commited on
Commit
145e509
路
1 Parent(s): 6dd386d

Prueba busqueda tabla

Browse files
Files changed (1) hide show
  1. app.py +73 -51
app.py CHANGED
@@ -8,37 +8,50 @@ import cv2 as cv
8
  import numpy as np
9
  import re
10
 
 
 
 
 
 
 
11
  #Modelo de detecci贸n de objetos RT-DETR
12
- model = RTDETR('Modelo/rtdetr-l.pt')
13
 
14
  #Modelo de segmentaci贸n de objetos MobileSAM basado en SAM
15
  model_SAM = SAM('Modelo/mobile_sam.pt')
16
 
 
17
 
18
- ############################################################
19
- food1 = 'Manzana'
20
- food2 = 'Pera'
21
- food3 = 'Carne'
22
- ud1 = 1
23
- ud2 = 2
24
- ud3 = 2
25
- kcal1 = 95
26
- kcal2 = 51
27
- kcal3 = 150
28
- # Supongamos que tienes algunos datos en un diccionario
29
- data = {
30
- 'Alimento': [food1, food2, food3],
31
- 'Ud': ['1', '2', '2'],
32
- 'Kcal(100g)': ['95', '51', '150'],
33
- 'Total': [ud1*kcal1, ud2*kcal2, ud3*kcal3],
34
- }
35
 
36
- # Convierte los datos a un DataFrame de pandas
37
- df = pd.DataFrame(data)
 
 
 
 
 
 
 
 
 
 
 
 
38
 
39
- ############################################################
40
 
 
 
 
 
 
41
 
 
 
 
 
 
42
  def calcular_suma(dataframe):
43
  # Inicializar la suma
44
  suma = 0
@@ -72,6 +85,8 @@ def image_mod(img_original):
72
  ancho, alto = img_original.size
73
  img_original = img_original.resize((640, 640))
74
  results = model(img_original, conf=0.60) # results list
 
 
75
 
76
  img_original = np.array(img_original)
77
 
@@ -81,34 +96,41 @@ def image_mod(img_original):
81
 
82
  for r in results:
83
  boxes = r.boxes.xyxy
84
-
85
- results_SAM = model_SAM(img_oscura, bboxes = boxes)
86
 
87
- for x in results_SAM:
88
- mascara_objeto = x.plot()
89
- #image_with_predictions = Image.fromarray(im_array[..., ::-1]) # RGB PIL image
90
-
91
- # Definir el umbral de brillo
92
- umbral = 60
93
-
94
- # Umbralizar la imagen para extraer solo las m谩scaras de los objetos
95
- imagen_umbralizada = umbralizar_imagen(mascara_objeto, umbral)
96
-
97
- # Convertir la imagen a escala de grises
98
- img_gris = cv.cvtColor(imagen_umbralizada, cv.COLOR_BGR2GRAY)
99
 
100
- # Aplicar umbralizaci贸n de Otsu
101
- _, th = cv.threshold(img_gris, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
102
 
103
- #Bajar el brillo de la imagen para que destaquen m谩s las m谩scaras de los
104
- #objetos segmentados
105
- factor_brillo = 0.55
106
- img_mod = np.clip(img_original * factor_brillo, 0, 255).astype(np.uint8)
107
 
108
- # Hacer la capa blanca m谩s transparente y combinar la imagen con las m谩scaras
109
- alpha = 0.4
110
- img_resultante = cv.addWeighted(img_mod, 1 - alpha, cv.cvtColor(th, cv.COLOR_GRAY2BGR), alpha, 0)
111
-
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
112
  img_resultante = cv.cvtColor(img_resultante, cv.COLOR_BGR2RGB)
113
 
114
  image_with_predictions = Image.fromarray(img_resultante[..., ::-1]) # RGB PIL image
@@ -130,7 +152,7 @@ Imagen = gr.Interface(
130
  os.path.join(os.path.abspath(''), "Test/Imagen_5.jpg"),
131
  os.path.join(os.path.abspath(''), "Test/Imagen_6.jpg"),
132
  ],
133
- description = "Deteccio贸n y segmentaci贸n de los alimentos de la imagen aportada por el usuario.",
134
  #theme='Taithrah/Minimal'
135
  )
136
 
@@ -138,10 +160,10 @@ Tabla = gr.Interface(
138
  calcular_suma,
139
  [
140
  gr.Dataframe(
141
- df,
142
- headers=["Alimento", "Ud", "Kcal(100g)", "Total" ],
143
- datatype=["str", "number", "number", "number"],
144
- col_count=4,
145
  label="Resumen alimenticio",
146
  ),
147
  #gr.Dropdown(["Cerdo", "Ternera", "Pavo"]),
@@ -155,4 +177,4 @@ demo = gr.TabbedInterface([Imagen, Tabla], ["Imagen", "Tabla"],
155
  title = "Detecci贸n de alimentos", theme='gradio/soft')
156
 
157
  if __name__ == "__main__":
158
- demo.launch(auth=("admin", "TheBest"))
 
8
  import numpy as np
9
  import re
10
 
11
+ from ultralytics import YOLO
12
+ model = YOLO('yolov8n.pt')
13
+
14
+
15
+ etiquetas_filtradas=[]
16
+
17
  #Modelo de detecci贸n de objetos RT-DETR
18
+ #model = RTDETR('Modelo/rtdetr-l.pt')
19
 
20
  #Modelo de segmentaci贸n de objetos MobileSAM basado en SAM
21
  model_SAM = SAM('Modelo/mobile_sam.pt')
22
 
23
+ def obtencion_etiquetas(result):
24
 
25
+ object_count = {}
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
26
 
27
+ #Obtenci贸n de las etiquetas y el n煤mero de veces que se han detectado en la imagen
28
+ for box in result.boxes:
29
+ object_label = result.names[box.cls[0].item()]
30
+ if object_label in object_count:
31
+ object_count[object_label] += 1
32
+ else:
33
+ object_count[object_label] = 1
34
+
35
+ etiquetas_filtradas = []
36
+
37
+ # Imprimir el resultado
38
+ for label, count in object_count.items():
39
+ print(f"{label}: {count}")
40
+ etiquetas_filtradas.append(f"{label}")
41
 
42
+ return etiquetas_filtradas
43
 
44
+ def cargar_dataframe_1(nombres_filas):
45
+ df = pd.read_csv('/content/drive/MyDrive/Proyecto_Vision/Tabla_alimentos.csv')
46
+ nombre_primera_columna = df.columns[0]
47
+ columnas_siguientes = df.columns[5:7]
48
+ nuevo_df = df[[nombre_primera_columna] + list(columnas_siguientes)]
49
 
50
+ # Filtrar las filas que corresponden a los nombres dados
51
+ nuevo_df = nuevo_df[nuevo_df[nombre_primera_columna].isin(nombres_filas)]
52
+
53
+ return nuevo_df
54
+
55
  def calcular_suma(dataframe):
56
  # Inicializar la suma
57
  suma = 0
 
85
  ancho, alto = img_original.size
86
  img_original = img_original.resize((640, 640))
87
  results = model(img_original, conf=0.60) # results list
88
+
89
+ result = results[0]
90
 
91
  img_original = np.array(img_original)
92
 
 
96
 
97
  for r in results:
98
  boxes = r.boxes.xyxy
99
+
100
+ if boxes is not None and len(boxes) > 0:
101
 
102
+ results_SAM = model_SAM(img_oscura, bboxes = boxes)
103
+
104
+ for x in results_SAM:
105
+ mascara_objeto = x.plot()
 
 
 
 
 
 
 
 
106
 
107
+ global etiquetas_filtradas = obtencion_etiquetas(result)
 
108
 
109
+ # Definir el umbral de brillo
110
+ umbral = 60
 
 
111
 
112
+ # Umbralizar la imagen para extraer solo las m谩scaras de los objetos
113
+ imagen_umbralizada = umbralizar_imagen(mascara_objeto, umbral)
114
+
115
+ # Convertir la imagen a escala de grises
116
+ img_gris = cv.cvtColor(imagen_umbralizada, cv.COLOR_BGR2GRAY)
117
+
118
+ # Aplicar umbralizaci贸n de Otsu
119
+ _, th = cv.threshold(img_gris, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
120
+
121
+ #Bajar el brillo de la imagen para que destaquen m谩s las m谩scaras de los
122
+ #objetos segmentados
123
+ factor_brillo = 0.55
124
+ img_mod = np.clip(img_original * factor_brillo, 0, 255).astype(np.uint8)
125
+
126
+ # Hacer la capa blanca m谩s transparente y combinar la imagen con las m谩scaras
127
+ alpha = 0.4
128
+ img_resultante = cv.addWeighted(img_mod, 1 - alpha, cv.cvtColor(th, cv.COLOR_GRAY2BGR), alpha, 0)
129
+
130
+ else:
131
+ factor_brillo = 0.55
132
+ img_resultante = np.clip(img_original * factor_brillo, 0, 255).astype(np.uint8)
133
+
134
  img_resultante = cv.cvtColor(img_resultante, cv.COLOR_BGR2RGB)
135
 
136
  image_with_predictions = Image.fromarray(img_resultante[..., ::-1]) # RGB PIL image
 
152
  os.path.join(os.path.abspath(''), "Test/Imagen_5.jpg"),
153
  os.path.join(os.path.abspath(''), "Test/Imagen_6.jpg"),
154
  ],
155
+ description = "Detecci贸n y segmentaci贸n de los alimentos de la imagen aportada por el usuario.",
156
  #theme='Taithrah/Minimal'
157
  )
158
 
 
160
  calcular_suma,
161
  [
162
  gr.Dataframe(
163
+ cargar_dataframe_1(etiquetas_filtradas),
164
+ #headers=["Alimento", "Ud", "Kcal(100g)", "Total" ],
165
+ #datatype=["str", "number", "number", "number"],
166
+ #col_count=4,
167
  label="Resumen alimenticio",
168
  ),
169
  #gr.Dropdown(["Cerdo", "Ternera", "Pavo"]),
 
177
  title = "Detecci贸n de alimentos", theme='gradio/soft')
178
 
179
  if __name__ == "__main__":
180
+ demo.launch(auth=("admin", "TheBest"), share=True)