Habeeb Okunade
Updating the predict endpoint
ce0c2e5
from transformers import AutoImageProcessor, AutoModelForImageClassification
from fastapi import FastAPI, UploadFile, File
from PIL import Image
import torch
import io
processor = AutoImageProcessor.from_pretrained("NeuronZero/EyeDiseaseClassifier")
model = AutoModelForImageClassification.from_pretrained("NeuronZero/EyeDiseaseClassifier")
app = FastAPI()
@app.get("/")
def home():
return {"message": "Habeeb"}
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
# Read file into memory
contents = await file.read()
# Load as PIL image
image = Image.open(io.BytesIO(contents)).convert("RGB")
# Preprocess
inputs = processor(images=image, return_tensors="pt")
# Run inference
with torch.no_grad():
outputs = model(**inputs)
logits = outputs.logits
predicted_class_idx = logits.argmax(-1).item()
confidence = torch.softmax(logits, dim=-1)[0][predicted_class_idx].item()
result = model.config.id2label[predicted_class_idx]
return {
"filename": file.filename,
"classification": result,
"confidence": round(confidence, 4)
}