Liantsoaxx08's picture
Adding all files
658f792
Raw
History Blame Contribute Delete
1.83 kB
import gradio as gr
import tensorflow as tf
from tensorflow.keras.models import load_model
import numpy as np
from PIL import Image
# Load the pre-trained model (assumed trained on Sign Language MNIST)
model = load_model('sign_language_mnist_cnn.h5')
# Define class names (A-Z, skipping J=9 and Z=25 due to dataset constraints)
CLASS_NAMES = list('ABCDEFGHIKLMNOPQRSTUVWXY') # 24 classes (0-8, 10-24)
# Preprocessing function for Sign Language MNIST
def preprocess_image(image: Image.Image):
# Convert to grayscale
image = image.convert('L') # 'L' mode for grayscale
# Resize to 28x28 (matching dataset)
image = image.resize((28, 28))
# Convert to numpy array and normalize to 0-255 range (as in dataset)
image_array = np.array(image)
# Normalize to 0-1 range (common for model input)
image_array = image_array / 255.0
# Add batch and channel dimensions (1, 28, 28, 1)
image_array = np.expand_dims(image_array, axis=(0, -1))
return image_array
# Prediction function
def predict_sign(image):
processed_image = preprocess_image(image)
# Get model predictions (logits)
predictions = model.predict(processed_image)
probability=np.max(predictions)
target=['A','B','C','D','E','F','G','H','I','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y']
arg=np.argmax(predictions)
result={'prediction':target[arg],'probability':probability}
return result
# Gradio interface
interface = gr.Interface(
fn=predict_sign,
inputs=gr.Image(type="pil", label="Upload a Hand Gesture Image"),
outputs=gr.Textbox(label="Prediction"),
title="Sign Language MNIST Classifier",
description="Upload an image of a hand gesture to classify it as a letter (A-Z, excluding J and Z)."
)
# Launch the app
interface.launch()