Abdullah104's picture
Create app.py
bb121c7 verified
from fastapi import FastAPI, UploadFile, File
from fastapi.staticfiles import StaticFiles
from fastapi.responses import FileResponse
import tensorflow as tf
import numpy as np
from PIL import Image
from io import BytesIO
app = FastAPI()
app.mount("/", StaticFiles(directory="frontend", html=True), name="static")
# Load TFLite model
interpreter = tf.lite.Interpreter(model_path="model.tflite")
interpreter.allocate_tensors()
input_details = interpreter.get_input_details()
output_details = interpreter.get_output_details()
CLASS_NAMES = ["cat", "dog", "..."] # Your classes here
def preprocess(data):
image = Image.open(BytesIO(data)).convert("RGB")
image = image.resize((256, 256))
img = np.array(image) / 255.0
return np.expand_dims(img, axis=0).astype(np.float32)
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
image = preprocess(await file.read())
interpreter.set_tensor(input_details[0]['index'], image)
interpreter.invoke()
output = interpreter.get_tensor(output_details[0]['index'])
pred = CLASS_NAMES[np.argmax(output[0])]
conf = float(np.max(output[0]))
return {"class": pred, "confidence": conf}