Spaces:
Build error
Build error
Commit 路
145e509
1
Parent(s): 6dd386d
Prueba busqueda tabla
Browse files
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 |
-
#
|
| 37 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 86 |
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
|
| 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 |
-
|
| 101 |
-
_, th = cv.threshold(img_gris, 0, 255, cv.THRESH_BINARY + cv.THRESH_OTSU)
|
| 102 |
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
factor_brillo = 0.55
|
| 106 |
-
img_mod = np.clip(img_original * factor_brillo, 0, 255).astype(np.uint8)
|
| 107 |
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 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 = "
|
| 134 |
#theme='Taithrah/Minimal'
|
| 135 |
)
|
| 136 |
|
|
@@ -138,10 +160,10 @@ Tabla = gr.Interface(
|
|
| 138 |
calcular_suma,
|
| 139 |
[
|
| 140 |
gr.Dataframe(
|
| 141 |
-
|
| 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)
|