ah_ad / app.py
marcjordan's picture
Create app.py
962e656 verified
import os
from io import BytesIO
from typing import Dict
import uvicorn
from fastapi import FastAPI, File, UploadFile
from PIL import Image
from pydantic import BaseModel
import tensorflow as tf
# Carga el modelo SavedModel (ajusta la ruta si es necesario)
model = tf.saved_model.load("./efficientnet_alzheimer")
app = FastAPI(title="API de clasificaci贸n de Alzheimer")
# Define la funci贸n de preprocesamiento de im谩genes (la misma que en inference.py)
def preprocess_image(image):
image = image.resize((200, 200))
image = np.array(image) / 255.0
image = np.expand_dims(image, axis=0)
return image
# Define el formato de la respuesta de la API
class Prediction(BaseModel):
prediction: str
confidence: float
# Endpoint para la predicci贸n
@app.post("/predict", response_model=Prediction)
async def predict_image(image: UploadFile = File(...)):
# Lee la imagen
contents = await image.read()
image = Image.open(BytesIO(contents))
# Preprocesa la imagen
processed_image = preprocess_image(image)
# Realiza la predicci贸n
predictions = model(processed_image)
# Obt茅n la clase predicha y la probabilidad
predicted_class = np.argmax(predictions)
confidence = np.max(predictions)
# Mapea la clase num茅rica al nombre de la clase (igual que en inference.py)
class_names = {
0: "VeryMildDemented",
1: "NonDemented",
2: "ModerateDemented",
3: "MildDemented"
}
predicted_class_name = class_names.get(predicted_class, "Clase desconocida")
# Devuelve la predicci贸n y la confianza
return {"prediction": predicted_class_name, "confidence": confidence.item()}
# Punto de entrada para ejecutar la aplicaci贸n con Uvicorn
if __name__ == "__main__":
uvicorn.run(app, host="0.0.0.0", port=int(os.environ.get("PORT", 8000)))