aiapi / app.py
history008's picture
Create app.py
e297dff verified
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse
from PIL import Image as PILImage
from transformers import AutoImageProcessor, SiglipForImageClassification
import torch
import io
import warnings
MODEL_IDENTIFIER = "Ateeqq/ai-vs-human-image-detector"
DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# Suppress warnings
warnings.filterwarnings("ignore", message="Possibly corrupt EXIF data.")
# Load processor and model once
processor = AutoImageProcessor.from_pretrained(MODEL_IDENTIFIER)
model = SiglipForImageClassification.from_pretrained(MODEL_IDENTIFIER).to(DEVICE)
model.eval()
# FastAPI app
app = FastAPI()
@app.get("/")
def root():
return {"message": "AI vs Human image detector is running."}
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
try:
image_bytes = await file.read()
image = PILImage.open(io.BytesIO(image_bytes)).convert("RGB")
inputs = processor(images=image, return_tensors="pt").to(DEVICE)
with torch.no_grad():
outputs = model(**inputs)
probs = torch.softmax(outputs.logits, dim=-1)[0]
results = {
model.config.id2label[i]: round(prob.item(), 4)
for i, prob in enumerate(probs)
}
return JSONResponse(content={"prediction": results})
except Exception as e:
return JSONResponse(content={"error": str(e)}, status_code=500)