def train(): """ trains data on our model :return: no return value """ speakers_file = "./speakers.txt" try: os.remove(speakers_file) except OSError as e: print("Error: " + str(e)) for f in os.listdir('./'): if re.search('marf*', f): os.remove(os.path.join('./', f)) name_list = speakers folder_path = './train_data/' recog = recognition.SpeakerRecognizer() recog.debug = True # setting classifier recog.set_feature_option('-noise -raw -aggr -eucl') for i in range(len(name_list)): recog.speaker_name = name_list[i] path = os.path.join(folder_path, name_list[i]) print("Speaker Name: {} speaker_data: {}".format( name_list[i], name_list[i])) recog.train_new_data(path)
def trainPiWho(self): # TODO fix piwho and remove this if False and (self.getPiWhoTrainingDataLastModified() > 0 and self.isPiWhoTrainingDataModified()): print('start training') recog = recognition.SpeakerRecognizer() print('got recog') try: os.remove(self.piwho_speakers) except: pass print('rm speakers') for f in os.listdir(self.piwho_model): if os.path.isfile(f) and "marf" in f and ".gzbin" in f: os.remove(os.path.join(self.piwho_model, f)) print('rm marf') print("training folder has {}".format( os.listdir(self.piwho_training_data))) for d in os.listdir(self.piwho_training_data): if os.path.isdir(os.path.join(self.piwho_training_data, d)): print("train {}".format(d)) recog.speaker_name = d os.chdir(self.piwho_model) recog.train_new_data( os.path.join(self.piwho_training_data, d), d) print('trained marf for {}'.format(d)) print('trained marf')
def find_speaker(flag): recog = recognition.SpeakerRecognizer() # Record voice until silence is detected # save WAV file #vad.record() record(5, 'test.wav') # use newly recorded file for recognition name = [] name = recog.identify_speaker('test.wav') dictn = recog.get_speaker_scores() print(name[0]) print(dictn) if flag == 1: if float(dictn[name[0]]) < 0.5: print('Congratulation !!! with distance ' + dictn[name[0]]) return "CONGRATULATIONS!" else: print('Sorry... with distance ' + dictn[name[0]]) return "Please retry." elif flag == -1: if float(dictn[name[0]]) < 0.4: print('Congratulation !!! with distance ' + dictn[name[0]]) return "CONGRATULATIONS!" else: print('Sorry... with distance ' + dictn[name[0]]) return "Please retry."
def find_speaker(): r = sr.Recognizer() with sr.Microphone() as source: r.adjust_for_ambient_noise(source) os.system("beep") print("Speaker needs to be identified. Say something..") audio = r.listen(source) s = "results.wav" with open(s, "wb") as f: f.write(audio.get_wav_data()) recog = recognition.SpeakerRecognizer() name = [] name = recog.identify_speaker('results.wav') dictn = recog.get_speaker_scores() i = float(dictn.get(name[0])) #print("Voice close to "+name[0]) if (i > 0.55): print("Voice not secure enough to proceed") os.system("streamer -f jpeg -o INTRUDER.jpeg") os.system( "espeak -s 150 'Intruder alert , Intruder alert , Intruder alert .'" ) exit(0) alert("Hello there !!")
def test_create_database_entry(self): recog = recognition.SpeakerRecognizer() recog._create_entry('Test', 'Test.wav') self.assertTrue(os.path.isfile('./speakers.txt')) try: os.remove('./speakers.txt') except IOError: raise
def train(): recog = recognition.SpeakerRecognizer() recog.debug = True for i in range(len(speakers)): recog.speaker_name = speakers[i] path = os.path.join(folder_path, data_folders[i]) print("speaker name: {} speaker_data: {}".format( speakers[i], data_folders[i])) recog.train_new_data(path)
def test_directory_as_constructor_argument(self): recog = recognition.SpeakerRecognizer(DATA_DIR_PATH) self.assertEqual(recog.dirpath, os.path.abspath(DATA_DIR_PATH)) self.assertEqual(recog.debug, False) self.assertEqual(recog.filepath, None) self.assertEqual(recog.feature, ' -endp -lpc -cheb') self.assertEqual(recog.last_recognized_file, None) self.assertEqual(recog.last_trained_file, None)
def train_speaker(name, *args): recog = recognition.SpeakerRecognizer('{0}{1}'.format(model_path_dir,name)) recog.speaker_name = name if(len(args)==1): recog.train_new_data(args[0]) else: recog.train_new_data() print recog.get_speakers()
def test_default_constructor(self): recog = recognition.SpeakerRecognizer() self.assertEqual(recog.dirpath, os.getcwd()) self.assertEqual(recog.debug, False) self.assertEqual(recog.filepath, None) self.assertEqual(recog.feature, ' -endp -lpc -cheb') self.assertEqual(recog.last_recognized_file, None) self.assertEqual(recog.last_trained_file, None)
def test_correct_entry_in_databse_file(self): recog = recognition.SpeakerRecognizer() recog._create_entry('Test', 'ABC.wav') entry = '0,Test,ABC.wav|\n' with open('./speakers.txt', 'r') as reader: self.assertEqual(entry, reader.readline()) try: os.remove('./speakers.txt') except IOError: raise
def test_convert_file_into_8khz(self): recog = recognition.SpeakerRecognizer() recog._convert_file(os.path.join(DATA_DIR_PATH, 'arctic_a0001.wav'), os.path.join(DATA_DIR_PATH, 'converted.wav')) self.assertTrue( os.path.isfile(os.path.join(DATA_DIR_PATH, 'converted.wav'))) try: os.remove(os.path.join(DATA_DIR_PATH, 'converted.wav')) except IOError: raise
def train(): # use recently added file from the directory 'recordings' recog = recognition.SpeakerRecognizer('/home/pi/jasper/recordings/') # set speaker lable for training recog.speaker_name = 'Aditya' # this will print some useful logs for debugging # you should see a message saying "done training with [filename].wav" recog.debug = True # train model recog.train_new_data()
def test_subprocess_function(self): recog = recognition.SpeakerRecognizer() filename = os.path.join(DATA_DIR_PATH, 'arctic_a0001.wav') cmd = 'cp ' + filename + ' ' + os.path.join(DATA_DIR_PATH, 'copy.wav') recog._start_subprocess(cmd) self.assertTrue(os.path.isfile(os.path.join(DATA_DIR_PATH, 'copy.wav'))) try: os.remove(os.path.join(DATA_DIR_PATH, 'copy.wav')) except IOError: raise
def find_speaker(): recog = recognition.SpeakerRecognizer() #recording the voice #saving the recording vad.record #using the newly recorded file to test name = [] name = recog.identify_speaker() return name
def test_identify_recently_added_file(self): recog = recognition.SpeakerRecognizer(DATA_DIR_PATH) recog.speaker_name = 'Test' recog.train_new_data() recog.last_trained_file = None recog.speaker_name = 'Test2' recog.train_new_data() name = None name = recog.identify_speaker() self.assertNotEqual(name, None) self.assertEqual(name[0], 'Test') self.assertEqual(name[1], 'Test2')
def test_training_an_entire_folder(self): recog = recognition.SpeakerRecognizer() recog.speaker_name = 'Test' recog.train_new_data(os.path.join(DATA_DIR_PATH)) model = glob.glob('*.gzbin') self.assertTrue(os.path.isfile('./' + ''.join(model))) self.assertTrue(os.path.isfile('./speakers.txt')) try: os.remove('./' + ''.join(model)) os.remove('./speakers.txt') except IOError: raise
def test_training_with_specified_file(self): recog = recognition.SpeakerRecognizer() recog.speaker_name = 'Test' recog.train_new_data(os.path.join(DATA_DIR_PATH, 'arctic_a0001.wav')) model = glob.glob('*.gzbin') self.assertTrue(os.path.isfile('./' + ''.join(model))) self.assertTrue(os.path.isfile('./speakers.txt')) try: os.remove('./' + ''.join(model)) os.remove('./speakers.txt') except IOError: raise
def test_get_speaker_from_database(self): recog = recognition.SpeakerRecognizer(DATA_DIR_PATH) recog.speaker_name = 'Test' recog.train_new_data() recog = recognition.SpeakerRecognizer(DATA_DIR_PATH) recog.speaker_name = 'Test1' recog.train_new_data() speakers = [] speakers = recog.get_speakers() self.assertEqual(speakers[0], 'Test') self.assertEqual(speakers[1], 'Test1') model = glob.glob('*.gzbin') self.assertTrue(os.path.isfile('./' + ''.join(model))) self.assertTrue(os.path.isfile('./speakers.txt')) try: os.remove('./' + ''.join(model)) os.remove('./speakers.txt') except IOError: raise
def __init__( self, mqtt_hostname=os.environ.get('mqtt_hostname', 'mosquitto'), mqtt_port=os.environ.get('mqtt_port', 1883), hotword_model=os.environ.get('hotword_model', 'resources/snowboy.umdl'), hotword=os.environ.get('hotword', 'snowboy'), sensitivity=os.environ.get('hotword_sensitivity', '0.5'), listen_to=os.environ.get('hotword_listen_to', 'default'), ): SnipsMqttServer.__init__(self, mqtt_hostname, mqtt_port) self.hotword = hotword self.hotword_model = hotword_model self.listen_to = listen_to self.subscribe_to = 'hermes/hotword/+/toggleOff,hermes/hotword/+/toggleOn,hermes/audioServer/+/audioFrame' # PIWHO self.piwho_model = os.path.dirname( os.path.abspath(__file__)) + '/piwho/' self.piwho_speakers = self.piwho_model + '/speakers.txt' self.piwho_training_data = os.path.dirname( os.path.abspath(__file__)) + '/piwho/data' self.recog = None self.clientList = [] self.allowedClientList = listen_to.split(',') self.client_buffer = {} self.client_recognition = {} self.client_talking = {} self.record = {} self.messageCount = 0 self.detection = snowboydecoder.HotwordDetector( hotword_model, sensitivity=sensitivity) for client in self.allowedClientList: self.client_buffer[client] = AudioBuffer( self.detection.detector.NumChannels() * self.detection.detector.SampleRate() * 20) self.client_recognition[client] = AudioBuffer( self.detection.detector.NumChannels() * self.detection.detector.SampleRate() * 2) self.client_talking[client] = False self.record[client] = False self.trainPiWho() if (self.piwho_enabled()): self.recog = recognition.SpeakerRecognizer()
def handle(self, text, mic): recog = recognition.SpeakerRecognizer('/home/pi/jasper-client/recordings/') name = [] name = recog.identify_speaker() if name[0] == 'Aditya': mic.say("Good morning "+ name) else: if name[0] == 'unknown': gen = gd.identify_gender(recog.get_recently_added_file()) if gen == 'M': mic.say("Good morning sir") elif gen == 'F': mic.say("Good morning madam")
def find_speaker(): recog = recognition.SpeakerRecognizer() # Record voice until silence is detected. # save WAV file r = sr.Recognizer() with sr.Microphone() as source: r.adjust_for_ambient_noise(source) vad.record() # use newly recorded file. name = [] name = recog.identify_speaker() dictn=recog.get_speaker_scores() print (dictn) return name
def test_identify_specified_file(self): recog = recognition.SpeakerRecognizer() name = None name = recog.identify_speaker( os.path.join(DATA_DIR_PATH, 'arctic_a0001.wav')) self.assertNotEqual(name, None) self.assertEqual(name[0], 'Test') model = glob.glob('*.gzbin') self.assertTrue(os.path.isfile('./' + ''.join(model))) self.assertTrue(os.path.isfile('./speakers.txt')) try: os.remove('./' + ''.join(model)) os.remove('./speakers.txt') except IOError: raise
def sayHello(mic): recog = recognition.SpeakerRecognizer('/home/pi/jasper/recordings/') name = [] name = recog.identify_speaker() # I have trained the model with 30 voice clips with lable 'Aditya' # These sound clips contain only my voice. if 'Aditya' in name: mic.say("Good morning " + name) # Then trained the SAME model with 40 random voice clips with lable 'unknown' # excluding my voice. # This makes it easy to distinguish between two speakers. elif 'unknown' in name: gender = gd.identify_gender(recog.get_recently_added_file()) if 'M' in gender: mic.say('Good morning Sir') elif 'F' in gender: mic.say('Good morning Madam')
def test_speaker_scores(self): recog = recognition.SpeakerRecognizer(DATA_DIR_PATH) recog.speaker_name = 'Test' recog.train_new_data() recog.last_trained_file = None recog.speaker_name = 'Test2' recog.train_new_data(os.path.join(DATA_DIR_PATH, 'arctic_a0001.wav')) recog.identify_speaker() dictn = recog.get_speaker_scores() self.assertTrue(dictn) model = glob.glob('*.gzbin') self.assertTrue(os.path.isfile('./' + ''.join(model))) self.assertTrue(os.path.isfile('./speakers.txt')) try: os.remove('./' + ''.join(model)) os.remove('./speakers.txt') except IOError: raise
def determine_speaker(): """ takes speaker input data from the microphone and determines who was speaking :return: a sorted list of scores for each team member from out distance classifier """ recog = recognition.SpeakerRecognizer() # for now, set to classification by euclidean distance recog.set_feature_option('-noise -raw -aggr -eucl') name = recog.identify_speaker('./speak_detect.wav') print(name) scores = recog.get_speaker_scores() sorted_scores = {k: float(v) for k, v in scores.iteritems()} sort_s = sorted(sorted_scores.items(), key=operator.itemgetter(1)) # print full dictionary of scores for k, v in sort_s: print("%s: %f" % (k, v)) return sort_s
def test_is_good_wav_file(self): recog = recognition.SpeakerRecognizer() filepath = os.path.join(DATA_DIR_PATH, 'arctic_a0001.wav') self.assertTrue(recog._is_good_wave(filepath))
def test_get_recently_added_file_in_directory(self): recog = recognition.SpeakerRecognizer(DATA_DIR_PATH) filename = None filename = recog.get_recently_added_file() self.assertNotEqual(filename, None)
def test_feature_option(self): recog = recognition.SpeakerRecognizer() recog.set_feature_option('-lpc -cheb') self.assertEqual(recog.feature, ' -lpc -cheb ')
def test_speaker_name(self): recog = recognition.SpeakerRecognizer() recog.speaker_name = 'Test' self.assertEqual(recog.speaker_name, 'Test')
def test_recently_added_file_exception(self): recog = recognition.SpeakerRecognizer('/dev/null/') self.assertRaises(ValueError, recog.get_recently_added_file)