|
|
import io |
|
|
from fastapi import FastAPI, UploadFile, File, Form |
|
|
from fastapi.middleware.cors import CORSMiddleware |
|
|
from fastapi.responses import JSONResponse |
|
|
import gradio as gr |
|
|
|
|
|
app = FastAPI() |
|
|
app.add_middleware( |
|
|
CORSMiddleware, |
|
|
allow_origins=["*"], |
|
|
allow_credentials=True, |
|
|
allow_methods=["*"], |
|
|
allow_headers=["*"], |
|
|
) |
|
|
|
|
|
THRESH = 0.65 |
|
|
|
|
|
@app.post("/verify") |
|
|
async def verify(name: str = Form(...), image: UploadFile = File(...)): |
|
|
try: |
|
|
data = await image.read() |
|
|
score = min(0.99, 0.6 + (len(data) % 400) / 1000) |
|
|
decision = "Access Granted" if score >= THRESH else "Access Denied" |
|
|
return {"decision": decision, "score": round(score, 3), "token": ""} |
|
|
except Exception as e: |
|
|
return JSONResponse( |
|
|
{"decision": "Access Denied", "score": 0.0, "error": str(e)}, |
|
|
status_code=500, |
|
|
) |
|
|
|
|
|
def demo_verify(name, img): |
|
|
if not name or img is None: |
|
|
return "Missing input", 0.0 |
|
|
buf = io.BytesIO() |
|
|
img.save(buf, format="PNG") |
|
|
data = buf.getvalue() |
|
|
score = min(0.99, 0.6 + (len(data) % 400) / 1000) |
|
|
decision = "Access Granted" if score >= THRESH else "Access Denied" |
|
|
return decision, round(score, 3) |
|
|
|
|
|
demo = gr.Interface( |
|
|
fn=demo_verify, |
|
|
inputs=["text", "image"], |
|
|
outputs=["text", "number"], |
|
|
title="EMMYS Verify API" |
|
|
) |
|
|
|
|
|
app = gr.mount_gradio_app(app, demo, path="/") |
|
|
|