Swarno-Coder's picture
Upload folder using huggingface_hub
1a4a0d3 verified
Raw
History Blame Contribute Delete
1.41 kB
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)