|
|
import tensorflow as tf
|
|
|
import pickle
|
|
|
import numpy as np
|
|
|
import pandas as pd
|
|
|
|
|
|
def load_model_and_processor():
|
|
|
"""Load the trained model and processor."""
|
|
|
|
|
|
model = tf.keras.models.load_model('model.h5')
|
|
|
|
|
|
|
|
|
with open('processor.pkl', 'rb') as f:
|
|
|
processor = pickle.load(f)
|
|
|
|
|
|
return model, processor
|
|
|
|
|
|
def predict_sign(model, processor, landmark_data):
|
|
|
"""
|
|
|
Predict sign from landmark data.
|
|
|
|
|
|
Args:
|
|
|
model: Loaded Keras model
|
|
|
processor: SignLanguageProcessor instance
|
|
|
landmark_data: DataFrame with columns ['frame', 'row_id', 'x', 'y', 'z']
|
|
|
|
|
|
Returns:
|
|
|
predicted_class: Predicted sign class
|
|
|
confidence: Prediction confidence
|
|
|
"""
|
|
|
|
|
|
X, _ = processor.process_dataset(landmark_data)
|
|
|
|
|
|
if len(X) == 0:
|
|
|
return None, 0.0
|
|
|
|
|
|
|
|
|
predictions = model.predict(X)
|
|
|
predicted_class = np.argmax(predictions, axis=1)[0]
|
|
|
confidence = np.max(predictions, axis=1)[0]
|
|
|
|
|
|
|
|
|
if hasattr(processor, 'index_to_sign'):
|
|
|
sign_name = processor.index_to_sign[predicted_class]
|
|
|
return sign_name, confidence
|
|
|
|
|
|
return predicted_class, confidence
|
|
|
|
|
|
|
|
|
if __name__ == "__main__":
|
|
|
|
|
|
model, processor = load_model_and_processor()
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
print("Model and processor loaded successfully!")
|
|
|
print(f"Model input shape: {model.input_shape}")
|
|
|
print(f"Model output shape: {model.output_shape}")
|
|
|
print(f"Number of classes: {processor.sign_count}") |