Spaces:
Runtime error
Runtime error
| 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 = r'D:\Machine Learning\Machine Learning\Code' | |
| models_path = os.path.join(code_path, 'models') | |
| haarcascade_path = os.path.join(code_path, 'haarcascades', 'haarcascade_frontalface_default.xml') | |
| # 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.') | |
| # Configurar la captura de video (0 es la webcam predeterminada) | |
| cap = cv2.VideoCapture(0) | |
| if not cap.isOpened(): | |
| print("Error: No se puede acceder a la c谩mara.") | |
| exit() | |
| print("Iniciando la captura de video. Presiona 'q' para salir.") | |
| while True: | |
| # Capturar frame por frame | |
| ret, frame = cap.read() | |
| if not ret: | |
| print("Error: No se pudo leer el frame de la c谩mara.") | |
| break | |
| # Convertir el frame a escala de grises para la detecci贸n de rostros | |
| gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY) | |
| # Detectar rostros en el frame | |
| rostros = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30)) | |
| for (x, y, w, h) in rostros: | |
| # Extraer la regi贸n del rostro | |
| rostro = frame[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) | |
| # Dibujar un rect谩ngulo alrededor del rostro | |
| cv2.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2) | |
| # Preparar el texto de la edad predicha | |
| texto = f'Edad: {edad_predicha} a帽os' | |
| # Elegir la posici贸n del texto (justo encima del rect谩ngulo del rostro) | |
| posicion_texto = (x, y-10 if y-10 > 10 else y+10) | |
| # Escribir el texto en la imagen con color azul (BGR: 255, 0, 0) | |
| cv2.putText(frame, texto, posicion_texto, cv2.FONT_HERSHEY_SIMPLEX, 0.7, (255, 0, 0), 2) | |
| # Mostrar el frame resultante | |
| cv2.imshow('Estimaci贸n de Edad - Presiona "q" para salir', frame) | |
| # Esperar por la tecla 'q' para salir | |
| if cv2.waitKey(1) & 0xFF == ord('q'): | |
| print("Programa finalizado por el usuario.") | |
| break | |
| # Liberar la captura y cerrar las ventanas | |
| cap.release() | |
| cv2.destroyAllWindows() | |