| | import torch
|
| | import os
|
| | from fastapi import FastAPI, File, UploadFile, HTTPException
|
| | import cv2
|
| | from PIL import Image
|
| | import numpy as np
|
| | from io import BytesIO
|
| |
|
| |
|
| | os.environ["TORCH_HOME"] = "/tmp/torch_cache"
|
| |
|
| |
|
| | app = FastAPI()
|
| |
|
| |
|
| | model = torch.hub.load('ultralytics/yolov5', 'yolov5s')
|
| |
|
| |
|
| | def buscar_existe(image):
|
| | existe = "No detectado"
|
| | gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
|
| |
|
| |
|
| | models = [
|
| | ('haarcascade_eye.xml', 'ojos'),
|
| | ('haarcascade_eye_tree_eyeglasses.xml', 'ojos detr谩s de gafas'),
|
| | ('haarcascade_smile.xml', 'sonrisa')
|
| | ]
|
| |
|
| |
|
| | for model_file, descripcion in models:
|
| | print(f"Probando modelo Haar: {model_file}")
|
| | cascade = cv2.CascadeClassifier(model_file)
|
| | if cascade.empty():
|
| | print(f"El modelo {model_file} no se pudo cargar.")
|
| | continue
|
| | detecciones = cascade.detectMultiScale(gray, 1.3, 5, minSize=(10, 10))
|
| | if len(detecciones) > 0:
|
| |
|
| | if descripcion != "sonrisa":
|
| | existe = f"Detectado: {descripcion}"
|
| | break
|
| | else:
|
| | existe = "No se detect贸 sonrisa, pero otras caracter铆sticas podr铆an haber activado el modelo."
|
| | continue
|
| |
|
| |
|
| | if existe == "No detectado":
|
| |
|
| | pil_image = Image.fromarray(image)
|
| | pil_image = pil_image.convert("RGB")
|
| |
|
| |
|
| | results = model(pil_image)
|
| |
|
| |
|
| | detected_objects = results.pandas().xywh[0]
|
| |
|
| | print(detected_objects)
|
| |
|
| |
|
| | if 'chair' in detected_objects['name'].values:
|
| | existe = "Detectado: silla"
|
| | else:
|
| | existe = "No se detect贸 silla."
|
| |
|
| | return existe
|
| |
|
| |
|
| | @app.post('/predict/')
|
| | async def predict(file: UploadFile = File(...)):
|
| | 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))
|
| |
|