App_python / app.py
GianmarcoJTA's picture
Update app.py
7bc5acd verified
raw
history blame
2.5 kB
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
models_path = os.path.join(code_path, 'models')
haarcascade_path = 'haarcascade_frontalface_default.xml'
# 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 descargarlo y guardarlo correctamente.')
exit()
# Cargar el clasificador Haar Cascade para detecci贸n de rostros
face_cascade = cv2.CascadeClassifier(haarcascade_path)
# Cargar el modelo entrenado
modelo_guardado = os.path.join(models_path, 'modelo_estimacion_edad_mejor.h5')
if not os.path.exists(modelo_guardado):
print(f'No se encontr贸 el modelo en {modelo_guardado}. Por favor, entrena el modelo primero.')
exit()
modelo = load_model(modelo_guardado)
print('Modelo cargado exitosamente.')
# Funci贸n para procesar la imagen y predecir la edad
def estimar_edad(imagen):
# 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
iface = gr.Interface(fn=estimar_edad,
inputs=gr.inputs.Image(type="numpy", label="Sube una imagen"),
outputs="text")
# Lanzar la interfaz de Gradio
iface.launch()