Spaces:
Sleeping
Sleeping
File size: 1,721 Bytes
db9df18 aac2b7e e94ce10 db9df18 aac2b7e e94ce10 db9df18 e94ce10 db9df18 e94ce10 db9df18 aac2b7e db9df18 aac2b7e e94ce10 db9df18 e94ce10 db9df18 aac2b7e db9df18 aac2b7e db9df18 aac2b7e e94ce10 db9df18 e94ce10 db9df18 e94ce10 db9df18 e94ce10 db9df18 e94ce10 db9df18 e94ce10 db9df18 e94ce10 db9df18 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | from fastapi import FastAPI, UploadFile, File, Form
from PIL import Image
import mediapipe as mp
import numpy as np
import io
from mediapipe.tasks import python
from mediapipe.tasks.python import vision
app = FastAPI()
MODEL_PATH = "gesture_recognizer.task"
MAP = {
"Thumb_Up": "YES",
"Thumb_Down": "NO",
"Open_Palm": "HI",
"Closed_Fist": "NO",
"Victory": "HI",
}
# Load recognizer once
base_options = python.BaseOptions(
model_asset_path=MODEL_PATH
)
options = vision.GestureRecognizerOptions(
base_options=base_options
)
recognizer = vision.GestureRecognizer.create_from_options(options)
@app.get("/")
def home():
return {
"message": "Realtime Gesture API Running"
}
@app.post("/detect")
async def detect(
file: UploadFile = File(...),
target_sign: str = Form(...)
):
contents = await file.read()
image = Image.open(
io.BytesIO(contents)
).convert("RGB")
image_np = np.array(image)
mp_image = mp.Image(
image_format=mp.ImageFormat.SRGB,
data=image_np
)
result = recognizer.recognize(mp_image)
detected_sign = "UNKNOWN"
confidence = 0.0
if result.gestures:
top = result.gestures[0][0]
raw_name = top.category_name
confidence = float(top.score)
detected_sign = MAP.get(raw_name, raw_name)
status = (
"CORRECT"
if detected_sign.upper() == target_sign.upper()
else "WRONG"
)
return {
"target_sign": target_sign,
"detected_sign": detected_sign,
"confidence": round(confidence, 2),
"status": status
} |