digits-signlang / app.py
Emeritus-21's picture
Update app.py
a0d48e7 verified
from flask import Flask, request, jsonify, render_template
import numpy as np
from tensorflow.keras.models import load_model
from tensorflow.keras.preprocessing import image
import base64
from io import BytesIO
from PIL import Image
app = Flask(__name__)
# Load your model
model = load_model('./best_model.h5', compile=False)
# Itsekiri digit labels
itsekiri_labels = [
'Méene', 'Méji', 'Métà', 'Mérin', 'Márùn',
'Méfa', 'Méje', 'Méjọ', 'Méṣan', 'Méwà'
]
IMG_SIZE = (228, 228)
def preprocess_image(base64_str):
header, encoded = base64_str.split(',', 1)
img_bytes = base64.b64decode(encoded)
img = Image.open(BytesIO(img_bytes)).convert('RGB')
img = img.resize(IMG_SIZE)
img_array = image.img_to_array(img)
img_array = np.expand_dims(img_array, axis=0)
img_array = img_array.astype('float32') / 255.0
return img_array
@app.route('/')
def index():
return render_template('index.html')
@app.route('/predict', methods=['POST'])
def predict():
data = request.get_json(force=True)
img_data = data['image']
img_array = preprocess_image(img_data)
pred_probs = model.predict(img_array)
pred_index = np.argmax(pred_probs)
pred_label = itsekiri_labels[pred_index]
confidence = float(pred_probs[0][pred_index] * 100)
return jsonify({
'prediction': pred_label,
'confidence': confidence
})
if __name__ == '__main__':
app.run(host='0.0.0.0', port=7860)