Swarno-Coder's picture
Upload folder using huggingface_hub
1a4a0d3 verified
from fastapi import FastAPI, UploadFile, File
from fastapi.responses import JSONResponse
import onnxruntime as ort
import numpy as np
from src.preprocess import preprocess_image
from src.gradcam import GradCAM # Note: GradCAM uses PyTorch, so for ONNX we approximate or skip full CAM
import cv2
from PIL import Image
import io
app = FastAPI(title="AutoVision API")
# Load ONNX model
ort_session = ort.InferenceSession('../models/resnet18_anomaly.onnx')
classes = ['crazing', 'inclusion', 'patches', 'pitted_surface', 'rolled-in_scale', 'scratches']
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
contents = await file.read()
image = Image.open(io.BytesIO(contents))
image_np = np.array(image)
input_data = preprocess_image(image_np)
ort_inputs = {ort_session.get_inputs()[0].name: input_data.astype(np.float32)}
ort_outs = ort_session.run(None, ort_inputs)
pred = np.argmax(ort_outs[0])
confidence = np.max(ort_outs[0])
# For Grad-CAM, we'd need to load PyTorch model separately for explainability
# Here, return pred and conf; overlay handled in UI
return JSONResponse({
"prediction": classes[pred],
"confidence": float(confidence),
"class_id": int(pred)
})
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)