from fastapi import FastAPI, File, UploadFile, HTTPException from fastapi.responses import HTMLResponse from pydantic import BaseModel from typing import List import cv2 import numpy as np app = FastAPI() def buscar_existe(image): existe = "no" face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_default.xml') gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) faces = face_cascade.detectMultiScale(gray, 1.3,5,minSize=(30, 30)) for (x,y,w,h) in faces: existe = "si" break return existe # Ruta para la página principal con formulario HTML @app.get('/') async def main(): content = """ RECONOCIMIENTO FACIAL

RECONOCIMIENTO FACIAL

""" return HTMLResponse(content) # Ruta de predicción @app.post('/predict') async def predict(file: UploadFile = File(...)): try: # Verificar si es una imagen válida if not file.content_type.startswith('image/'): raise HTTPException(status_code=400, detail="El archivo debe ser una imagen.") # Convertir la imagen a formato adecuado image = cv2.imdecode(np.frombuffer(await file.read(), np.uint8), cv2.IMREAD_COLOR) # Realizar el reconocimiento de emociones en la imagen emotion = buscar_existe(image) #print(emotion) # Devolver la emoción detectada como respuesta en formato JSON return {'emotion': emotion} except HTTPException as he: raise he except Exception as e: print(f"Error general: {str(e)}") raise HTTPException(status_code=500, detail="Error durante la predicción de emociones.") # Punto de entrada principal para la aplicación if __name__ == '__main__': # Ejecutar la aplicación FastAPI utilizando Uvicorn import uvicorn uvicorn.run(app, host='0.0.0.0', port=8000)