ArsanForEver's picture
Create app.py
ee6eac0 verified
raw
history blame
1.48 kB
from fastapi import FastAPI, UploadFile, File
import tensorflow as tf
import numpy as np
from PIL import Image
import io
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}