multi / app.py
rishab1090's picture
Update app.py
4e2e70c verified
from fastapi import FastAPI, UploadFile, File, HTTPException, Header
from fastapi.responses import JSONResponse
from PIL import Image
import numpy as np
import io
from keras.models import load_model
import os
model_path = os.path.join(os.path.dirname(__file__), "converted_model.keras")
model = load_model(model_path)
app = FastAPI()
CLASS_NAMES = ['Fungi', 'Healthy', 'Nematode', 'Pest', 'Phytopthora', 'Virus']
API_KEY = "mysecretkey"
@app.post("/predict")
async def predict(file: UploadFile = File(...), x_api_key: str = Header(None)):
if x_api_key != API_KEY:
raise HTTPException(status_code=401, detail="Invalid or missing API Key")
try:
contents = await file.read()
image = Image.open(io.BytesIO(contents)).convert("RGB")
image = image.resize((224, 224))
img_array = np.array(image).astype("float32")
img_array = np.expand_dims(img_array, axis=0)
prediction = model.predict(img_array)
predicted_class = int(np.argmax(prediction[0]))
predicted_label = CLASS_NAMES[predicted_class]
return {
"prediction": predicted_label,
"probabilities": {
CLASS_NAMES[i]: float(round(prediction[0][i], 4)) for i in range(6)
}
}
except Exception as e:
return JSONResponse(status_code=500, content={"error": str(e)})