Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI, UploadFile, File, Request | |
| from fastapi.responses import HTMLResponse | |
| from fastapi.templating import Jinja2Templates | |
| import shutil | |
| import io | |
| import numpy as np | |
| from PIL import Image | |
| import tensorflow as tf | |
| from tensorflow.keras.applications.mobilenet_v2 import ( | |
| MobileNetV2, preprocess_input, decode_predictions | |
| ) | |
| app = FastAPI() | |
| templates = Jinja2Templates(directory="templates") | |
| # Load the model once | |
| model = MobileNetV2(weights="imagenet") | |
| async def home(request: Request): | |
| return templates.TemplateResponse("index.html", {"request": request, "result": ""}) | |
| async def upload(request: Request, file: UploadFile = File(...)): | |
| contents = await file.read() | |
| img = Image.open(io.BytesIO(contents)).resize((224, 224)).convert("RGB") | |
| img_array = np.array(img) | |
| img_array = np.expand_dims(img_array, axis=0) | |
| img_array = preprocess_input(img_array) | |
| preds = model.predict(img_array) | |
| decoded_preds = decode_predictions(preds, top=3)[0] | |
| # Combine top 3 results | |
| result_text = "\n".join( | |
| f"{label} - {confidence * 100:.2f}%" for (_, label, confidence) in decoded_preds | |
| ) | |
| return templates.TemplateResponse("index.html", { | |
| "request": request, | |
| "result": result_text | |
| }) | |