wolf / det.py
Nikhil0987's picture
Upload 13 files
ea908d6
import os
import pickle
import warnings
import numpy as np
warnings.filterwarnings("ignore")
class GenderIdentifier:
def __init__(self, females_files_path,males_model_path, females_model_path ,males_files_path):
self.females_training_path = females_files_path
self.males_model_path = males_model_path
self.error = 0
self.total_sample =0
self.features_extractor = FeaturesExtractor()
#load models
self.females_gmm = pickle.load(open(females_model_path, 'rb'))
self.males_gmm = pickle.load(open(males_model_path, 'rb'))
def process(self):
files = self.get_file_path(self.females_training_path, self.males_training_path)
#read the test directory and get the list of test audio files
for file in files:
self.total_sample +=1
print("%10s %8s %1s" % ("--> TESTING",":", os.path.basename(file)))
vector = self.features_extractor.extract_features(file)
winner = self.identity_gender(vector)
expected_gender = file.split("/")[1][:-1]
print("%10s %6s %1s" % ("+ EXPECTATION",":", expected_gender))
print("%10s %3s %1s" % ("+ IDENTIFICATION",":", winner))
if winner != expected_gender: self.error +=1
print("--------------------------")
accuracy =(float(self.total_sample - self.error) / float(self.total_sample)) * 100
accuracy_msg = "*** Accuracy = " + str(round(accuracy ,3)) + "% ***"
print(accuracy_msg)
def get_file_paths(self, females_training_path, males_training_path):
females = [ os.path.join(females_training_path, f) for f in os.listdir(females_training_path) ]
males = [ os.path.join(males_training_path, f) for f in os.listdir(males_training_path) ]
files = females + males
return files
def identify_gender(self, vector):
# female hypothesis scoring
is_female_scores = np.array(self.females_gmm.score(vector))
is_female_log_likelihood = is_female_scores.sum()
# male hypothesis scoring
is_male_scores = np.array(self.males_gmm.score(vector))
is_male_log_likelihood = is_male_scores.sum()
print("%10s %5s %1s" % ("+ FEMALE SCORE",":", str(round(is_female_log_likelihood, 3))))
print("%10s %7s %1s" % ("+ MALE SCORE", ":", str(round(is_male_log_likelihood,3))))
if is_male_log_likelihood > is_female_log_likelihood: winner = "male"
else : winner = "female"
return winner
if __name__== "__main__":
gender_identifier = GenderIdentifier("TestingData/females", "TestingData/males", "females.gmm", "males.gmm")
gender_identifier.process()