コード例 #1
0
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)
コード例 #2
0
    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')
コード例 #3
0
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."
コード例 #4
0
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 !!")
コード例 #5
0
 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
コード例 #6
0
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)
コード例 #7
0
    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)
コード例 #8
0
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()
コード例 #9
0
    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)
コード例 #10
0
 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
コード例 #11
0
 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
コード例 #12
0
ファイル: mtrain.py プロジェクト: uidmice/voiceProject
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()
コード例 #13
0
 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
コード例 #14
0
ファイル: livetesting.py プロジェクト: uidmice/voiceProject
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
コード例 #15
0
 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')
コード例 #16
0
 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
コード例 #17
0
 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
コード例 #18
0
    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
コード例 #19
0
    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()
コード例 #20
0
ファイル: devgender.py プロジェクト: uidmice/voiceProject
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")  
コード例 #21
0
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
コード例 #22
0
 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
コード例 #23
0
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')
コード例 #24
0
    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
コード例 #25
0
    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
コード例 #26
0
 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))
コード例 #27
0
 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)
コード例 #28
0
 def test_feature_option(self):
     recog = recognition.SpeakerRecognizer()
     recog.set_feature_option('-lpc -cheb')
     self.assertEqual(recog.feature, ' -lpc -cheb ')
コード例 #29
0
 def test_speaker_name(self):
     recog = recognition.SpeakerRecognizer()
     recog.speaker_name = 'Test'
     self.assertEqual(recog.speaker_name, 'Test')
コード例 #30
0
 def test_recently_added_file_exception(self):
     recog = recognition.SpeakerRecognizer('/dev/null/')
     self.assertRaises(ValueError, recog.get_recently_added_file)