Spaces:
Runtime error
Runtime error
| import gradio as gr | |
| import cv2 | |
| import numpy as np | |
| from tensorflow.keras.models import load_model | |
| from tensorflow.keras.applications.mobilenet_v2 import preprocess_input | |
| import os | |
| # Definir rutas | |
| code_path = '/app' # Usando ruta del contenedor Docker | |
| haarcascade_path = 'haarcascade_frontalface_default.xml' # Usamos ruta relativa | |
| # Rutas de los modelos | |
| modelo_mejor_path = os.path.join(code_path, 'modelo_estimacion_edad_mejor.h5') | |
| modelo_final_path = os.path.join(code_path, 'modelo_estimacion_edad_final.h5') | |
| # Imprimir la ruta para verificar | |
| print(f"Ruta al archivo Haar Cascade: {haarcascade_path}") | |
| # Verificar si el archivo Haar Cascade existe | |
| if not os.path.exists(haarcascade_path): | |
| print(f'No se encontr贸 el archivo Haar Cascade en {haarcascade_path}. Aseg煤rate de subirlo correctamente en tu Space.') | |
| exit() | |
| # Cargar el clasificador Haar Cascade para detecci贸n de rostros | |
| face_cascade = cv2.CascadeClassifier(haarcascade_path) | |
| # Verificar si Haar Cascade se carg贸 correctamente | |
| if face_cascade.empty(): | |
| print("Error al cargar el clasificador Haar Cascade.") | |
| exit() | |
| # Cargar ambos modelos | |
| modelo_mejor = load_model(modelo_mejor_path) | |
| modelo_final = load_model(modelo_final_path) | |
| print('Modelos cargados exitosamente.') | |
| # Funci贸n para procesar la imagen y predecir la edad | |
| def estimar_edad(imagen, modelo_seleccionado="mejor"): | |
| # Seleccionar el modelo | |
| if modelo_seleccionado == "mejor": | |
| modelo = modelo_mejor | |
| else: | |
| modelo = modelo_final | |
| # Convertir la imagen a escala de grises para la detecci贸n de rostros | |
| gray = cv2.cvtColor(imagen, cv2.COLOR_BGR2GRAY) | |
| # Detectar rostros en la imagen | |
| rostros = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) | |
| edades = [] | |
| for (x, y, w, h) in rostros: | |
| # Extraer la regi贸n del rostro | |
| rostro = imagen[y:y+h, x:x+w] | |
| # Preprocesar la imagen del rostro | |
| rostro_rgb = cv2.cvtColor(rostro, cv2.COLOR_BGR2RGB) | |
| rostro_resized = cv2.resize(rostro_rgb, (128, 128)) | |
| rostro_preprocessed = preprocess_input(rostro_resized) | |
| rostro_expanded = np.expand_dims(rostro_preprocessed, axis=0) | |
| # Realizar la predicci贸n de edad | |
| edad_predicha = modelo.predict(rostro_expanded)[0][0] | |
| edad_predicha = round(edad_predicha, 2) | |
| edades.append(edad_predicha) | |
| if len(edades) > 0: | |
| return f"Edad estimada: {round(np.mean(edades), 2)} a帽os" | |
| else: | |
| return "No se detectaron rostros en la imagen." | |
| # Crear la interfaz con Gradio (desactivando flagging) | |
| iface = gr.Interface( | |
| fn=estimar_edad, | |
| inputs=[ | |
| gr.Image(type="numpy", label="Sube una imagen"), | |
| gr.Radio(choices=["mejor", "final"], label="Selecciona el modelo") # Elegir modelo | |
| ], | |
| outputs="text", | |
| flagging="never" # Desactivar flagging para evitar la creaci贸n del directorio 'flagged' | |
| ) | |
| # Lanzar la interfaz de Gradio | |
| iface.launch() | |