|
from fastapi import FastAPI, File, UploadFile, HTTPException, Query |
|
from fastapi.responses import HTMLResponse |
|
from pydantic import BaseModel |
|
from typing import List |
|
import cv2 |
|
from PIL import Image |
|
import numpy as np |
|
from io import BytesIO |
|
|
|
app = FastAPI() |
|
|
|
def buscar_existe(image): |
|
existe = "NO SE DETECTO SONRISA" |
|
print("resultado: ", image.shape) |
|
|
|
|
|
smile_cascade = cv2.CascadeClassifier('haarcascade_smile.xml') |
|
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) |
|
|
|
|
|
smiles = smile_cascade.detectMultiScale( |
|
gray, |
|
scaleFactor=1.7, |
|
minNeighbors=22, |
|
minSize=(25, 25) |
|
) |
|
|
|
for (x, y, w, h) in smiles: |
|
existe = "SONRISA DETECTADA" |
|
break |
|
|
|
return existe |
|
|
|
@app.post('/predict/') |
|
async def predict(file: UploadFile = File(...), rostro: str = Query(...)): |
|
try: |
|
image = Image.open(BytesIO(await file.read())) |
|
image = np.asarray(image) |
|
prediction = buscar_existe(image) |
|
return {"prediction": prediction} |
|
except Exception as e: |
|
raise HTTPException(status_code=500, detail=str(e)) |
|
|