File size: 2,912 Bytes
4571b9b
 
 
aa8449f
4571b9b
aa8449f
4571b9b
cc1914d
 
 
4571b9b
 
 
 
 
 
 
 
 
 
 
cc1914d
 
 
 
 
 
 
 
 
 
 
4571b9b
cc1914d
 
 
 
 
 
 
4571b9b
cc1914d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4571b9b
 
 
 
 
 
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
import numpy as np
import pandas as pd
import librosa
import skops.io as sio
import gradio as gr
import warnings

def remove_warnings():
    warnings.filterwarnings('ignore')
    
## Voice Data Feature Extraction

### extract the features from the audio files using mfcc
def feature_extracter(fileName):
    audio,sample_rate = librosa.load(fileName,sr=None, mono=True,  dtype=np.float32,res_type='kaiser_fast')
    mfcc_features = librosa.feature.mfcc(y=audio,sr=sample_rate,n_mfcc=30)
    mfccs_scaled_features = np.mean(mfcc_features.T, axis=0)
    
    return list(mfccs_scaled_features)

def prediction_age_gender(fileName):
        
      remove_warnings()  
      col_name = ['Feature_1', 'Feature_2', 'Feature_3', 'Feature_4', 'Feature_5','Feature_6', 'Feature_7', 'Feature_8', 'Feature_9', 'Feature_10','Feature_11', 'Feature_12', 'Feature_13', 'Feature_14', 'Feature_15','Feature_16', 'Feature_17', 'Feature_18', 'Feature_19', 'Feature_20','Feature_21', 'Feature_22', 'Feature_23', 'Feature_24', 'Feature_25','Feature_26', 'Feature_27', 'Feature_28', 'Feature_29', 'Feature_30']

      observation = [feature_extracter(fileName)]
      observation = pd.DataFrame(observation, columns = col_name)

      ## scaling the observation
      scaler = sio.load('scaler')
      scaled_observation = scaler.transform(observation)
      scaled_observation = pd.DataFrame(scaled_observation, columns = col_name)  

      ### Gender classification model
      gender_model = sio.load('KNN_gender_detection')
      gender_predict = gender_model.predict_proba(scaled_observation.values)
      ## considering the labels 1 = male 0 = female
      gender_dict = {}
      gender_dict['Female'] = gender_predict[0][0]
      gender_dict['Male'] = gender_predict[0][1]

      ### Age classification model
      age_model = sio.load('KNN_age_model')
      age_predict = age_model.predict_proba(scaled_observation.values)
      age_dict = {}
      age_dict['Eighties'] = age_predict[0][0]
      age_dict['Fifties'] = age_predict[0][1]
      age_dict['Fourties'] = age_predict[0][2]
      age_dict['Seventies'] = age_predict[0][3]
      age_dict['Sixties'] = age_predict[0][4]
      age_dict['Teens'] = age_predict[0][5]
      age_dict['Thirties'] = age_predict[0][6]
      age_dict['Twenties'] = age_predict[0][7]
      age_dict['Other'] = 1 - age_dict['Eighties'] - age_dict['Fifties'] - age_dict['Fourties'] - age_dict['Seventies'] - age_dict['Sixties']  - age_dict['Teens'] - age_dict['Thirties'] - age_dict['Twenties']

      #final = "The person is a: " + gender + " of the age group: " + age
      return gender_dict, age_dict
    
demo = gr.Interface(
    prediction_age_gender,
    inputs = [gr.Audio(sources=["microphone","upload"], type = 'filepath')],
    outputs = [gr.Label(num_top_classes=2, label = 'Gender'), gr.Label(num_top_classes=9, label = 'Age Class')],
    #gr.Text()
).launch(share=True, debug = True)