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
"""
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)