File size: 2,970 Bytes
cc43219
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
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__)



@app.route('/')
def index():
    return jsonify({'message': 'Welcome To Speech to Emotion'})

@app.route('/api/media-file', methods=['POST'])
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)