shivanshg's picture
Update app.py
07855a5
raw
history blame
2.93 kB
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', label = 'Audio File')],
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)