Spaces:
Sleeping
Sleeping
| import gradio as gr | |
| import numpy as np | |
| import librosa | |
| import time | |
| from tensorflow.keras.models import load_model | |
| # Load the emotion prediction model | |
| def load_emotion_model(model_path): | |
| try: | |
| model = load_model(model_path) | |
| return model | |
| except Exception as e: | |
| print("Error loading emotion prediction model:", e) | |
| return None | |
| model_path = 'mymodel_SER_LSTM_RAVDESS.h5' | |
| model = load_emotion_model(model_path) | |
| # Function to extract MFCC features from audio | |
| def extract_mfcc(wav_file_name): | |
| try: | |
| y, sr = librosa.load(wav_file_name) | |
| mfccs = np.mean(librosa.feature.mfcc(y=y, sr=sr, n_mfcc=40).T, axis=0) | |
| return mfccs | |
| except Exception as e: | |
| print("Error extracting MFCC features:", e) | |
| return None | |
| # Emotions dictionary | |
| emotions = {1: 'neutral', 2: 'calm', 3: 'happy', 4: 'sad', 5: 'angry', 6: 'fearful', 7: 'disgust', 8: 'surprised'} | |
| # Function to predict emotion from audio | |
| def predict_emotion_from_audio(wav_filepath): | |
| try: | |
| test_point = extract_mfcc(wav_filepath) | |
| if test_point is not None: | |
| test_point = np.reshape(test_point, newshape=(1, 40, 1)) | |
| predictions = model.predict(test_point) | |
| predicted_emotion_label = np.argmax(predictions[0]) + 1 | |
| return emotions[predicted_emotion_label] | |
| else: | |
| return "Error: Unable to extract features" | |
| except Exception as e: | |
| print("Error predicting emotion:", e) | |
| return None | |
| # Predict emotion from audio | |
| def get_predictions(audio_input): | |
| emotion_prediction = predict_emotion_from_audio(audio_input) | |
| return emotion_prediction # Return a single prediction instead of a list | |
| # Create the Gradio interface | |
| with gr.Blocks() as interface: | |
| gr.Markdown("Emotional Machines test: Load or Record an audio file to speech emotion analysis") | |
| with gr.Tabs(): | |
| with gr.Tab("Acoustic and Semantic Predictions"): | |
| with gr.Row(): | |
| input_audio = gr.Audio(label="Input Audio", type="filepath") | |
| submit_button = gr.Button("Submit") | |
| output_label = gr.Label("Prediction") # Use a single Label instead of a list | |
| # Set the function to be called when the button is clicked | |
| submit_button.click(get_predictions, inputs=input_audio, outputs=output_label) | |
| interface.launch() | |