Spaces:
Sleeping
Sleeping
from flask import Flask, request, jsonify | |
from werkzeug.utils import secure_filename | |
import pandas as pd | |
import numpy as np | |
import os | |
import time | |
import sys | |
from tensorflow import keras | |
#from keras.models import model_from_json | |
#from tensorflow.python.keras import optimizers | |
import os | |
import random | |
import librosa | |
emotions = {0: 'female_angry', 1 : 'female_calm', 2 : 'female_fearful', 3 : 'female_happy', 4 : 'female_sad', 5 : 'male_angry', 6: 'male_calm', 7 : 'male_fearful', 8 : 'male_happy', 9 : 'male_sad'} | |
#model = tf.keras.models.load_model('model.keras') | |
def make_predictions(inputfile): | |
cnn_model = keras.models.load_model("cnn_model2.h5") | |
prediction_data, prediction_sr = librosa.load( | |
inputfile, | |
res_type="kaiser_fast", | |
duration=3, | |
sr=22050, | |
offset=0.5, | |
) | |
mfccs = np.mean(librosa.feature.mfcc(y=prediction_data, sr=prediction_sr, n_mfcc=40).T, axis=0) | |
x = np.expand_dims(mfccs, axis=1) | |
x = np.expand_dims(x, axis=0) | |
predictions = cnn_model.predict(x) | |
emotions_dict = { | |
"0": "neutral", | |
"1": "calm", | |
"2": "happy", | |
"3": "sad", | |
"4": "angry", | |
"5": "fearful", | |
"6": "disgusted", | |
"7": "surprised", | |
} | |
return emotions_dict[str(predictions[0].argmax())] | |
# json_file = open('model.json', 'r') | |
# loaded_model_json = json_file.read() | |
# json_file.close() | |
# loaded_model = model_from_json(loaded_model_json) | |
# # load weights into new model | |
# loaded_model.load_weights("Emotion_Voice_Detection_Model.h5") | |
# print("Loaded model from disk") | |
# #opt = optimizers.adam(lr=0.00001) | |
# # evaluate loaded model on test data | |
# loaded_model.compile(loss='categorical_crossentropy', metrics=['accuracy']) | |
# def data_preprocessing(filename): | |
# X, sample_rate = librosa.load(filename,duration=2.5,sr=22050*2,offset=0.5) | |
# sample_rate = np.array(sample_rate) | |
# mfccs = np.mean(librosa.feature.mfcc(y=X, sr=sample_rate, n_mfcc=13),axis=0) | |
# featurelive = mfccs | |
# livedf2 = featurelive | |
# livedf2= pd.DataFrame(data=livedf2) | |
# livedf2 = livedf2.stack().to_frame().T | |
# twodim= np.expand_dims(livedf2, axis=2) | |
# return twodim | |
# def make_prediction(df): | |
# pred = loaded_model.predict(df, | |
# batch_size=32, | |
# verbose=1) | |
# preds1=pred.argmax(axis=1) | |
# abc = preds1.astype(int).flatten() | |
# return emotions[abc[0]] | |
app = Flask(__name__) | |
def index(): | |
return jsonify({'message': 'Welcome To Speech to Emotion'}) | |
def predict_emotion(): | |
audiofile = request.files['audiofile'] | |
filename = secure_filename(audiofile.filename) | |
temp_path = filename | |
audiofile.save(temp_path) | |
#twodim = data_preprocessing(temp_path) | |
res = jsonify({'result': make_predictions(temp_path)}) | |
os.remove(temp_path) | |
return res | |
if __name__ == '__main__': | |
app.run(debug=True) |