Ejemplo n.º 1
0
def voiceiden(fname,mname):
	db = GMMVoiceDB('models')
	fname=fname.strip('.wav')
	print fname
	db.add_model(str(fname),str(mname))
	out.insertHtml(QString("<font color=\"black\">%1</font>"))
	out.insertPlainText("\nModel "+mname+" Successfully added to database\n")
def main():
    parser = argparse.ArgumentParser(version="1.0", prog="Voice Recognition")
    parser.add_argument("-a", "--add", action="store_true", help="Add a new source")
    parser.add_argument("audio", type=str, help="Name of the audio file (*.wav)")

    args = parser.parse_args()
    audio = HOME_FOLDER + args.audio
    db = GMMVoiceDB(HOME_FOLDER)

    if args.add:
        name = str(time.strftime("%d%m%Y%H%M%S"))
        db.add_model(audio.split(".")[0], name)
    else:
        v = Voiceid(db, audio)
        v.diarization()
        dic = db.get_speakers()
        dist = []
        d2u = {}
        for gender in dic:
            users = dic[gender]
            for u in users:
                dist.append(db.match_voice(audio, u, gender)[u])
                d2u[dist[-1]] = u

        dist.sort(None, None, True)
        if (dist[0] - dist[1] + CEIL) > EPS:
            return d2u[dist[0]]
        else:
            return "unkonwn"
Ejemplo n.º 3
0
def voiceiden(fname, mname):
    db = GMMVoiceDB('models')
    fname = fname.strip('.wav')
    print fname
    db.add_model(str(fname), str(mname))
    out.insertHtml(QString("<font color=\"black\">%1</font>"))
    out.insertPlainText("\nModel " + mname +
                        " Successfully added to database\n")
Ejemplo n.º 4
0
 def __init__(self, test_mode=None):
     self.voiceid = None
     #self.db = GMMVoiceDB('/home/michela/SpeakerRecognition/voiceid/scripts/test_db/')
     self.db = GMMVoiceDB(os.path.expanduser('~/.voiceid/gmm_db/'))
     #self._cluster = None
     #self._partial_record_time = 5
     self.test_mode = test_mode
     self.queue_processes = []
     self._observers = []
     self._processing_thread = None
     self._queue_thread = []
     self.thrd_n = 2
     self._scores = {}
     self.threshold = -32.160
Ejemplo n.º 5
0
def segment_input(wavfile, dbpath='./voicedb'):
	db = GMMVoiceDB(dbpath)
	v = Voiceid(db, wavfile)
	v.extract_speakers()
	
	speaker_clusters={}
	
	for c in v.get_clusters():
		cluster = v.get_cluster(c)
		print cluster
		cluster.print_segments()
		print
Ejemplo n.º 6
0
class AudioAnalyzer():
    def __init__(self):
        """ Init voice model """
        self._config = ConfigParser.ConfigParser()
        self._config.read("config.ini")
        dbPath = os.getcwd() + "/" + self._config.get("Paths", "voiceDir")
        self._db = GMMVoiceDB(dbPath)

    def addUser(self, user, audio):
        """ Add user to voice db """
        return self._db.add_model(audio, user)

    def getUserList(self):
        """ Return users of voice db """
        return self._db.get_speakers()

    def checkAudio(self, audio):
        """ Check voices inside audio file """
        v = Voiceid(self._db, audio)
        v.extract_speakers(quiet=True)
        return v

    def getTotalSpeakers(self, voiceObj):
        """ List of all speakers in voice file """
        return voiceObj.get_user()

    def getBestUser(self, voiceObj):
        """ Best near speaker in voice file """
        userList = self.getTotalSpeakers(voiceObj)
        print "UserList: " + str(userList)
        return max(userList, key=userList.get)

    def getBestUsers(self, voiceObj):
        """ Best three near speakers in voice file """
        userList = self.getTotalSpeakers(voiceObj)
        print "UserList: " + str(userList)
        if 'S0' in userList:
            del userList['S0']
        return sorted(userList, key=userList.get)[-3:]
Ejemplo n.º 7
0
 def __init__(self, test_mode=None):
     self.voiceid = None
     # self.db = GMMVoiceDB('/home/michela/SpeakerRecognition/voiceid/scripts/test_db/')
     self.db = GMMVoiceDB(os.path.expanduser("~/.voiceid/gmm_db/"))
     # self._cluster = None
     # self._partial_record_time = 5
     self.test_mode = test_mode
     self.queue_processes = []
     self._observers = []
     self._processing_thread = None
     self._queue_thread = []
     self.thrd_n = 2
     self._scores = {}
     self.threshold = -32.160
def main():
	parser = argparse.ArgumentParser(version='1.0',prog='Voice Recognition')
	parser.add_argument("-a", "--add", action="store_true", help="Add a new source")
	parser.add_argument("audio", type=str, help="Name of the audio file (*.wav)") 

	args = parser.parse_args()
	audio = HOME_FOLDER+args.audio
	db = GMMVoiceDB(HOME_FOLDER)	
	
	if args.add:
		print('Adding User...')
		name = str(time.strftime("%d%m%Y%H%M%S"))
		db.add_model(audio.split('.')[0], name)
		print('User '+name+' Added!')
	else:
		print('Recognition...')
		v = Voiceid(db, audio)
		v.diarization()	
		dic = db.get_speakers()
		dist = []
		d2u = {}
		for gender in dic:
			users = dic[gender]
			#print('Gender: ',gender)
			for u in users:
				#print(db.match_voice(audio, u, gender))
				dist.append(db.match_voice(audio, u, gender)[u])
				d2u[dist[-1]]=u
		
		dist.sort(None, None, True)
		if (dist[0]-dist[1]+CEIL)>EPS :
			print(d2u[dist[0]])
		else:
			print('unkonwn')
		
		print "Done!"
Ejemplo n.º 9
0
def voicerec(fname):
    db = GMMVoiceDB('models')
    v = Voiceid(db, fname)
    v.extract_speakers()
    txt = ''
    for c in v.get_clusters():
        cl = v.get_cluster(c)
        cluster = str(cl)
        cluster = cluster.split(' ')
        cluster = cluster[1]
        cluster = cluster.strip('(')
        cluster = cluster.strip(')')
        txt = txt + 'Speaker : ' + cluster
        seg = str(cl.print_segments())
        txt = txt + '\n' + seg
    out.insertPlainText(txt + "\n")
Ejemplo n.º 10
0
        }
        requests.post('http://129.236.234.21:8080/message',
                      data=json.dumps(payload),
                      headers=HEADERS)
        client.publish("ais/recognize/result/" + device_id + "/" + voice_path,
                       speaker)
        os.remove(voice.get_file_basename() + '.seg')
        os.remove(voice.get_file_basename() + '.g.seg')
        os.remove(voice.get_file_basename() + '.s.seg')
        w = voice.get_file_basename() + '.wav'
        if voice.get_filename() != w:
            os.remove(w)
        shutil.rmtree(voice.get_file_basename())
    except IOError:
        print "voice file doesn't exist"
        # voice_db_lock.release()


client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
# set_maxthreads(trd)
db = GMMVoiceDB("voiceDB")

voice_db_lock = threading.Lock()
# client.connect("127.0.0.1", 1883, 60)
client.connect("iot.eclipse.org", 1883, 60)

# https://eclipse.org/paho/clients/python/docs/#network-loop
client.loop_forever()
Ejemplo n.º 11
0
 def __init__(self):
     """ Init voice model """
     self._config = ConfigParser.ConfigParser()
     self._config.read("config.ini")
     dbPath = os.getcwd() + "/" + self._config.get("Paths", "voiceDir")
     self._db = GMMVoiceDB(dbPath)
Ejemplo n.º 12
0
from voiceid.sr import Voiceid
from voiceid.db import GMMVoiceDB
import sys

#   create voice db

db = GMMVoiceDB('voiceDB')

print "DB Models:"
print db.get_speakers()

v = Voiceid(db, sys.argv[1])

v.extract_speakers(False, True)

# Set cluster speaker
c = v.get_cluster('S1')
c.set_speaker('derek')

c = v.get_cluster('S6')
c.set_speaker('derek')

# update db
v.update_db()
print "DB Models:"
print db.get_speakers()
Ejemplo n.º 13
0
#Using voiceid(google opensource project) for voice recognisation using python
from voiceid.sr import Voiceid          
from voiceid.db import GMMVoiceDB
db = GMMVoiceDB('mydir')                #creating database/directory of registered voices
db.add_model('C:\Users\raman\Documents\raman.wma', 'Raman','M')
db.add_model('C:\Users\raman\Documents\lalit.wma', 'Lalit','M')
db.add_model('C:\Users\raman\Documents\aneesha.wma', 'Aneesha','F')
db.add_model('C:\Users\raman\Documents\priyanka.wma', 'Priyanka','F')
db.get_speakers()  # this will get all the speakers in the database/directory
if(db.matchvoice('C:\Users\raman\Documents\lalit.wma', 'Lalit'))   #the matchvoice function will compare the voices
{
  print "Lalit is present" }
  else print "Lalit is absent"

v = Voiceid(db)
v.extract_speakers()
for c in v.get_clusters():
   cluster = v.get_cluster(c)
   print cluster 
cluster.print_segments()
Ejemplo n.º 14
0
HOST_NAME = ''
#Porta do servidor
PORT_NUMBER = 9000
# A configuração: /dev/ttyACM0 é referente a porta USB que o Arduino esta ligado
ser = serial.Serial("/dev/ttyACM0", 9600)
ledLigado = "L".encode()
ledMais = "M".encode()
ledMenos = "m".encode()
fechadura = "F".encode()
tomada1 = "T".encode()
tomada2 = "t".encode()

#Configuracoes do banco de dados da API de voz
caminhoDB = '/home/smarthome/Banco/'
caminhoVoz = '/var/www/html/Voices/'
db = GMMVoiceDB(caminhoDB)


class MyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
    def do_HEAD(s):
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()

    def do_GET(s):
        s.send_response(200)
        s.send_header("Content-type", "text/html")
        s.end_headers()
        path = s.path
        if '-' in path:
            acao, nome, pessoa = path.split('-')
Ejemplo n.º 15
0
class Model:
    """ Represents and manages all data model """
    def __init__(self, test_mode=None):
        self.voiceid = None
        #self.db = GMMVoiceDB('/home/michela/SpeakerRecognition/voiceid/scripts/test_db/')
        self.db = GMMVoiceDB(os.path.expanduser('~/.voiceid/gmm_db/'))
        #self._cluster = None
        #self._partial_record_time = 5
        self.test_mode = test_mode
        self.queue_processes = []
        self._observers = []
        self._processing_thread = None
        self._queue_thread = []
        self.thrd_n = 2
        self._scores = {}
        self.threshold = -32.160

    def attach(self, observer):
        """ Attach a new observer """

        if not observer in self._observers:
            self._observers.append(observer)

    def detach(self, observer):
        """ Deatach a new observer """

        try:
            self._observers.remove(observer)
        except ValueError:
            pass

    def notify(self, modifier=None):
        """ Notify an update """

        for observer in self._observers:
            if modifier != observer:
                observer.update()

    def save_callback(self, file_=None):
        """ Adds a file to the queue after it's been saved """
        if self.test_mode == True:
            vid = Voiceid(self.db, file_, single=True)
            self.queue_processes.append((vid, None))

    def set_speaker_name(self, name, file_):
        """ Adds speaker model in db  """
        shutil.move(file_, name + ".wav")
        r = name + ".wav"
        f = os.path.splitext(r)[0]
        return self.db.add_model(str(f), name)

    def alive_threads(self, t):
        """Check how much threads are running and alive in a thread dictionary
        :param t thread dictionary 
        """
        num = 0
        for thr in t:
            if thr.is_alive():
                num += 1
        return num

    def on_process(self, conf=1):
        """ Extract speakers from each partial recording file """
        while self.record.is_recording() or self.is_process_running():
            index = 0
            for vid, result in self.queue_processes:
                if result == None:

                    if self.alive_threads(self._queue_thread) < self.thrd_n:
                        t = Thread(target=self.extract_speaker,
                                   args=(vid, index, conf))
                        self._queue_thread.append(t)
                        self.queue_processes[index] = (vid, ['running'])
                        t.start()
                    else:
                        while self.alive_threads(
                                self._queue_thread) >= self.thrd_n:
                            time.sleep(1)
                        t = Thread(target=self.extract_speaker,
                                   args=(vid, index, conf))
                        self._queue_thread.append(t)
                        self.queue_processes[index] = (vid, ['running'])
                        t.start()
                index += 1

            time.sleep(1)

    def is_process_running(self):
        if len(self.queue_processes) == 0: return True
        for vid, result in self.queue_processes:
            if result == None:
                return True
        return False

    def get_last_result(self):
        """ Return last result """
        p = self.queue_processes[:]
        p.reverse()
        for file_, result in p:
            if result != None and result[0] != "running":
                return result

        print "None last result!!"
        return None

    def start_record(self,
                     total_seconds=None,
                     partial_seconds=None,
                     stop_callback=None,
                     save_callback=None,
                     conf=1):
        """ start a new record process """

        self.queue_processes = []

        if self.test_mode == True:
            if conf == 1:
                self.record = Record('',
                                     total_seconds=total_seconds,
                                     partial_seconds=partial_seconds,
                                     stop_callback=stop_callback,
                                     incremental_mode=True,
                                     save_callback=self.save_callback)
            elif conf == 2:
                self.record = Record('',
                                     total_seconds=total_seconds,
                                     partial_seconds=partial_seconds,
                                     stop_callback=stop_callback,
                                     incremental_mode=False,
                                     save_callback=self.save_callback)
            else:
                self.record = Record('',
                                     total_seconds=partial_seconds,
                                     partial_seconds=partial_seconds,
                                     stop_callback=stop_callback,
                                     incremental_mode=False,
                                     save_callback=self.save_callback)

        else:
            self.record = Record('training',
                                 total_seconds,
                                 stop_callback=stop_callback,
                                 save_callback=save_callback)

        self.record.start()
        self._processing_thread = Thread(target=self.on_process, args=(conf, ))
        if self.test_mode == True: self._processing_thread.start()

    def set_test_mode(self, mode):
        """ Set mode to record - True for test mode False otherwise """

        self.test_mode = mode

    def get_test_mode(self):
        """ Return mode to record - True for test mode False otherwise """

        return self.test_mode

    def stop_record(self):
        """ Stop record process """
        print "stop"
        self.record.stop()

    def get_process_status(self):
        if self.test_mode == True:
            q = self.queue_processes[:]
            for file_, result in q:
                if result == None or result[0] == 'running':
                    return False
            return True

    def extract_speaker(self, vid, index, conf):
        """ Extract speaker from a wave """
        vid.extract_speakers(quiet=True, thrd_n=16)
        if conf == 1:
            self.queue_processes[index] = (
                vid, vid.get_cluster('S0').get_best_five())
        elif conf == 2 or conf == 3:
            last_scores = vid.get_cluster('S0').speakers

            for i in last_scores:
                if i in self._scores:
                    self._scores[i] += 60 + last_scores[i]
                else:
                    self._scores[i] = 60 + last_scores[i]

            self.queue_processes[index] = (vid,
                                           sorted(self._scores.iteritems(),
                                                  key=lambda (k, v): (v, k),
                                                  reverse=True)[:5])

        #print "extract finish",self.queue_processes[index]
        #c= sorted(self._scores.iteritems(), key=lambda (k,v): (v,k),reverse=True)
        #print c

        self.notify()
Ejemplo n.º 16
0
class Model:
    """ Represents and manages all data model """

    def __init__(self, test_mode=None):
        self.voiceid = None
        # self.db = GMMVoiceDB('/home/michela/SpeakerRecognition/voiceid/scripts/test_db/')
        self.db = GMMVoiceDB(os.path.expanduser("~/.voiceid/gmm_db/"))
        # self._cluster = None
        # self._partial_record_time = 5
        self.test_mode = test_mode
        self.queue_processes = []
        self._observers = []
        self._processing_thread = None
        self._queue_thread = []
        self.thrd_n = 2
        self._scores = {}
        self.threshold = -32.160

    def attach(self, observer):
        """ Attach a new observer """

        if not observer in self._observers:
            self._observers.append(observer)

    def detach(self, observer):
        """ Deatach a new observer """

        try:
            self._observers.remove(observer)
        except ValueError:
            pass

    def notify(self, modifier=None):
        """ Notify an update """

        for observer in self._observers:
            if modifier != observer:
                observer.update()

    def save_callback(self, file_=None):
        """ Adds a file to the queue after it's been saved """
        if self.test_mode == True:
            vid = Voiceid(self.db, file_, single=True)
            self.queue_processes.append((vid, None))

    def set_speaker_name(self, name, file_):
        """ Adds speaker model in db  """
        shutil.move(file_, name + ".wav")
        r = name + ".wav"
        f = os.path.splitext(r)[0]
        return self.db.add_model(str(f), name)

    def alive_threads(self, t):
        """Check how much threads are running and alive in a thread dictionary
        :param t thread dictionary 
        """
        num = 0
        for thr in t:
            if thr.is_alive():
                num += 1
        return num

    def on_process(self, conf=1):
        """ Extract speakers from each partial recording file """
        while self.record.is_recording() or self.is_process_running():
            index = 0
            for vid, result in self.queue_processes:
                if result == None:

                    if self.alive_threads(self._queue_thread) < self.thrd_n:
                        t = Thread(target=self.extract_speaker, args=(vid, index, conf))
                        self._queue_thread.append(t)
                        self.queue_processes[index] = (vid, ["running"])
                        t.start()
                    else:
                        while self.alive_threads(self._queue_thread) >= self.thrd_n:
                            time.sleep(1)
                        t = Thread(target=self.extract_speaker, args=(vid, index, conf))
                        self._queue_thread.append(t)
                        self.queue_processes[index] = (vid, ["running"])
                        t.start()
                index += 1

            time.sleep(1)

    def is_process_running(self):
        if len(self.queue_processes) == 0:
            return True
        for vid, result in self.queue_processes:
            if result == None:
                return True
        return False

    def get_last_result(self):
        """ Return last result """
        p = self.queue_processes[:]
        p.reverse()
        for file_, result in p:
            if result != None and result[0] != "running":
                return result

        print "None last result!!"
        return None

    def start_record(self, total_seconds=None, partial_seconds=None, stop_callback=None, save_callback=None, conf=1):
        """ start a new record process """

        self.queue_processes = []

        if self.test_mode == True:
            if conf == 1:
                self.record = Record(
                    "",
                    total_seconds=total_seconds,
                    partial_seconds=partial_seconds,
                    stop_callback=stop_callback,
                    incremental_mode=True,
                    save_callback=self.save_callback,
                )
            elif conf == 2:
                self.record = Record(
                    "",
                    total_seconds=total_seconds,
                    partial_seconds=partial_seconds,
                    stop_callback=stop_callback,
                    incremental_mode=False,
                    save_callback=self.save_callback,
                )
            else:
                self.record = Record(
                    "",
                    total_seconds=partial_seconds,
                    partial_seconds=partial_seconds,
                    stop_callback=stop_callback,
                    incremental_mode=False,
                    save_callback=self.save_callback,
                )

        else:
            self.record = Record("training", total_seconds, stop_callback=stop_callback, save_callback=save_callback)

        self.record.start()
        self._processing_thread = Thread(target=self.on_process, args=(conf,))
        if self.test_mode == True:
            self._processing_thread.start()

    def set_test_mode(self, mode):
        """ Set mode to record - True for test mode False otherwise """

        self.test_mode = mode

    def get_test_mode(self):
        """ Return mode to record - True for test mode False otherwise """

        return self.test_mode

    def stop_record(self):
        """ Stop record process """
        print "stop"
        self.record.stop()

    def get_process_status(self):
        if self.test_mode == True:
            q = self.queue_processes[:]
            for file_, result in q:
                if result == None or result[0] == "running":
                    return False
            return True

    def extract_speaker(self, vid, index, conf):
        """ Extract speaker from a wave """
        vid.extract_speakers(quiet=True, thrd_n=16)
        if conf == 1:
            self.queue_processes[index] = (vid, vid.get_cluster("S0").get_best_five())
        elif conf == 2 or conf == 3:
            last_scores = vid.get_cluster("S0").speakers

            for i in last_scores:
                if i in self._scores:
                    self._scores[i] += 60 + last_scores[i]
                else:
                    self._scores[i] = 60 + last_scores[i]

            self.queue_processes[index] = (
                vid,
                sorted(self._scores.iteritems(), key=lambda (k, v): (v, k), reverse=True)[:5],
            )

        # print "extract finish",self.queue_processes[index]
        # c= sorted(self._scores.iteritems(), key=lambda (k,v): (v,k),reverse=True)
        # print c

        self.notify()
Ejemplo n.º 17
0
        if wav_file.find("##")==-1:
            print "ERROR: MALFORMED WAV FILE ", wav_file
            return False             
        ns=wav_file.split("##")[0]
        if ns.split("_")==-1:
            print "ERROR: MALFORMED WAV FILE ", wav_file
            return False             
        return True
def get_simbol(wav):
    tmp=wav.split("##")[0]
    ns=tmp.split("_")
    return ns[0]+ns[1]

if __name__ == '__main__':
    all_wav =[]
    for f in os.listdir(DIR_PATH):
        if fnmatch.fnmatch(f, '*.wav') and f.find("##")>-1:
            all_wav.append(f)   
    print all_wav
    #all_wav=["/Users/labcontenuti/Documents/workspace/activevoice/voiceid/Talk_Radio##S10.wav"]
    #all_wav=["/Users/labcontenuti/Music/Renato_Soru0##S0.wav"]
    all_wav=["/Users/labcontenuti/Music/RenatoSoruS0.wav"]
    db = GMMVoiceDB(DB_PATH)

    for wav in all_wav:
        #db.add_model(DIR_PATH+wav, get_simbol(wav))
        db.add_model(wav, "RenatoSoru")
        print "added ", wav

    print "RND"
Ejemplo n.º 18
0
def showsp():
	db = GMMVoiceDB('models')
	spk= str(db.get_speakers())
	out.insertHtml(QString("<font color=\"black\">%1</font>").arg(spk))
Ejemplo n.º 19
0
def showsp():
    db = GMMVoiceDB('models')
    spk = str(db.get_speakers())
    out.insertHtml(QString("<font color=\"black\">%1</font>").arg(spk))