ArsanForEver's picture
Update app.py
db215a1 verified
raw
history blame
1.49 kB
from fastapi import FastAPI, UploadFile, File
import tensorflow as tf
import numpy as np
from PIL import Image
import io
import uvicorn
app = FastAPI()
# Load model Keras
model = tf.keras.models.load_model("lontara_model_finetuning.keras")
# Label kelas sesuai model
labels = [
"Tu", "He", "We", "No", "Mu", "Bu", "Ji", "Jo", "I", "Nro", "Cu", "Na", "Bo", "Yi", "Se", "Nyi",
"So", "Wa", "Ko", "Ge", "E", "Yo", "Ngu", "Ra", "Wo", "Ta", "Pe", "Nra", "Da", "Ci", "Lo", "Nci",
"U", "Ro", "Mo", "Nre", "Du", "Be", "Mpu", "Hu", "Ne", "Nyo", "Ncu", "Su", "Ju", "Gu", "Nu", "Di",
"Nri", "Gi", "Co", "Nca", "Ri", "Si", "Ja", "Bi", "Ke", "Wu", "Nki", "Te", "Go", "Ya", "Nku", "Pu",
"Nka", "Ba", "Mpe", "A", "Nya", "Me", "Nge", "Mpa", "Ma", "Mpi", "O", "Mi", "Re", "Po", "Ti", "Je",
"Nco", "Pa", "Ho", "Nko", "Ce", "Li", "Nke", "Ru", "Ca", "Ke_", "Do", "Ga", "Mpo", "Nye", "Nru", "Nga",
"Lu", "Pi", "Ku", "Ni", "Nce", "Le", "Ngo", "De", "Ki", "Wi", "Hi", "Ye", "Ngi", "Ka", "Nyu", "La",
"Ha", "Sa"
]
@app.get("/")
def home():
return {"message": "Aksara Lontara API is running"}
@app.post("/predict")
async def predict(file: UploadFile = File(...)):
# Baca gambar
image = Image.open(io.BytesIO(await file.read())).convert("L").resize((128, 128))
image = np.array(image) / 255.0
image = image.reshape(1, 128, 128, 1)
# Prediksi
prediction = model.predict(image)
label = labels[np.argmax(prediction)]
return {"prediction": label}