Spaces:
Sleeping
Sleeping
from fastapi import FastAPI, File, UploadFile | |
from fastapi.responses import StreamingResponse | |
from retinaface import RetinaFace | |
import cv2 | |
import numpy as np | |
from typing import Any | |
from rembg import remove | |
from PIL import Image | |
import io | |
app = FastAPI() | |
def convert_to_python_types(obj: Any) -> Any: | |
if isinstance(obj, np.integer): | |
return int(obj) | |
elif isinstance(obj, np.floating): | |
return float(obj) | |
elif isinstance(obj, np.ndarray): | |
return obj.tolist() | |
elif isinstance(obj, dict): | |
return {key: convert_to_python_types(value) for key, value in obj.items()} | |
elif isinstance(obj, list): | |
return [convert_to_python_types(item) for item in obj] | |
else: | |
return obj | |
async def detect_faces(file: UploadFile = File(...)): | |
contents = await file.read() | |
nparr = np.frombuffer(contents, np.uint8) | |
image = cv2.imdecode(nparr, cv2.IMREAD_COLOR) | |
# Detect faces | |
faces = RetinaFace.detect_faces(image) | |
return convert_to_python_types(faces) | |
async def remove_background(file: UploadFile = File(...)): | |
contents = await file.read() | |
image = Image.open(io.BytesIO(contents)) | |
image_rembg = remove(image) | |
image_np = np.array(image_rembg) | |
image = Image.fromarray(image_np) | |
# Convert the image to bytes | |
img_byte_arr = io.BytesIO() | |
image.save(img_byte_arr, format='PNG') | |
img_byte_arr.seek(0) | |
return StreamingResponse(io.BytesIO(img_byte_arr.read()), media_type="image/png") | |
def greet_json(): | |
return {"Hello": "World!"} |