Full text
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 1 RESUM Aquest projecte presenta el disseny de una aplicació de reconeixement de veu. Aquesta aplicació té dos utilitats una és la conversió de veu a text i l’altre de text a veu. En primer lloc s’han analitzat els diferents elements o motors de reconeixement de veu actuals del mercat amb la posterior decisió de quin és el més adequat per a una aplicació de reconeixement de veu capaç de controlar gairebé qualsevol dispositiu, senzillament realitzant petites modificacions de codi. És una aplicació que permet ús de dispositius de àudio inalàmbrics, per poder utilitzar-lo a una distància raonable del dispositiu on s’executi l’aplicació. A més a més és una aplicació robusta davant de qualsevol usuari. Independentment del tipus de veu o de la persona, té un funcionament correcte. Finalment, a part de que és personalitzable segons les necessitats del programador, també permet establir connexió amb dispositius a través de internet. A continuació s’ha desenvolupat l’aplicació tant la part gràfica, com la part de codi. S’ha compilat en un arxiu executable i a partir de l’aplicació funcional s’ha realitzat un test de robustesa per a veure que amb diferents condicions de contorn tant internes com externes, el motor de reconeixement de veu respon segons l’esperat. Finalment per a validar el funcionament de reconeixement de veu s’ha desenvolupat un petit dispositiu de prototipatge. Aquest dispositiu es basa en una televisió i una làmpada els quals es poden controlar a través de la veu amb unes petites modificacions de les connexions i utilitzant un petit ordinador de pont entre la interfície sobre la que corre l’aplicació i els dispositius a controlar.
Pág. 2 Disseny i aplicació d’un sistema de reconeixement de veu ÌNDEX RESUM ______________________________________________________ 1 ÌNDEX _______________________________________________________ 2 1. OBJECTIU _______________________________________________ 4 2. MOTIVACIÓ ______________________________________________ 5 3. ABAST __________________________________________________ 6 4. ESTAT DEL ART __________________________________________ 7 4.1. Aplicacions de reconeixement de veu ........................................................... 7 4.1. Tecnologies de reconeixement de veu ........................................................ 12 5. ESPECIFICACIONS BÀSIQUES _____________________________ 21 6. DESENVOLUPAMENT DEL PROJECTE ______________________ 23 6.1. Introducció ................................................................................................... 23 6.2. Visual Studio 2013 ....................................................................................... 24 6.3. Raspberry Pi ................................................................................................ 28 6.4. Diagrama de funcionament ......................................................................... 30 6.5. Programa servidor ....................................................................................... 32 6.6. Aplicació de reconeixement de veu ............................................................. 37 6.7. Robustesa .................................................................................................... 45 6.8. Connexions de hardware ............................................................................. 51 7. PRESSUPOST ___________________________________________ 53 7.1. Pressupost de recursos humans ................................................................. 53 7.2. Pressupost recursos materials .................................................................... 54 7.3. Pressupost total del projecte ....................................................................... 55 8. IMPACTE MEDIAMBIENTAL ________________________________ 56 9. PLANIFICACIÓ ___________________________________________ 57 AGRAÏMENTS _______________________________________________ 58 BIBLIOGRAFÍA _______________________________________________ 60 CONCLUSIONS ________________ ERROR! BOOKMARK NOT DEFINED.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 3 ANNEX A: CODIGO DE LA APLICACIÓ MOCK UP __________________ 61
Pág. 4 Disseny i aplicació d’un sistema de reconeixement de veu 1. Objectiu L’objectiu d’aquest projecte consisteix en mitjançant un prototip, demostrar que sobre un computador amb interfície Windows, que és un dispositiu que actualment es troba a la majoria de llars, es poden crear aplicacions de reconeixement de veu per a controlar qualsevol dispositiu mecànic o electrònic. Tot això de forma inalàmbrica, mitjançant la connexió a internet, i l’establiment de una connexió client-servidor. En aquest cas s’utilitzarà una Raspberry Pi com a servidor informàtic, el qual servirà de pont entre la aplicació i els dispositius mecànics. Gràcies a aquest sistema es podran controlar els dispositius des de la aplicació de reconeixement de veu, corrent sobre un sistema operatiu Windows.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 5 2. Motivació Tota idea parteix de una experiència. En aquest cas el projecte ha sorgit del programa de practiques de la universitat juntament amb la empresa de tecnologia HP Inc. que ha permès al autor obtenir la experiència laboral. Gràcies al coneixements adquirits en el departament de I+D d’aquesta empresa multinacional va sorgir la idea de crear aquesta aplicació de reconeixement de veu. Una de les inclinacions sempre ha estat la programació i aquest projecte permetia entrar completament a aquest món vist des de un altre punt de vista que el que havia obtingut de les assignatures de informàtica a la universitat. Aquest nou punt de vista és, que existeixen varis llenguatges de programació i varies interfícies o programes que permeten crear aplicacions segons el sistema operatiu que s’utilitzi per a córrer la aplicació. A la universitat tota la programació estava centrada en Linux, mentre que aquí l’autor s’ha aventurat en el món de Windows. A més a més, el lloc de treball que m’han ofert a l’empresa em proveïa de totes les facilitats que eren necessàries per a dur a terme la aplicació. La oportunitat de disposar de software avançat que facilitava la programació del projecte i el suport a nivell de coneixement ja que es pot recórrer a professionals especialitzats, amb molta experiència i coneixements. A més a més, la companyia també disposava del material electrònic necessari per al prototipatge. Gràcies a tot el comentat anteriorment es va començar a tirar endavant aquest projecte.
Pág. 6 Disseny i aplicació d’un sistema de reconeixement de veu 3. Abast L’abast del projecte engloba el desenvolupament d’una aplicació de reconeixement de veu inclòs la creació d’un prototip per a poder demostrar que el dispositiu funciona i que es pot utilitzar en altres aplicacións que apareguin. Tot i això el projecte no contempla més que la creació del primer prototip de demostració. Això significa que faltarà validar el concepte, sotmetent el prototip a una gran varietat de veus, masculines i femenines, per poder confirmar que aquest dispositiu es pot comercialitzar o integrar en algun producte. L’abast detallat del projecte és el següent: Anàlisis d’alguns dels actuals hardwares que incorporen reconeixement de veu a les seves plaques i que es poden adaptar segons les necessitats del usuari. Anàlisis d’algunes de les llibreries de reconeixement de veu existents que permeten personalitzar el software a gust del usuari. Selecció del millor motor de veu que ofereix el mercat per a poder complir amb l’objectiu del projecte. Investigació de les aplicacions actuals del reconeixement de veu. Disseny de un prototip per a la demostració de l’aplicació de reconeixement sobre el sistema operatiu Windows. Disseny de un servidor Linux per poder executar-lo a la Raspberry Pi que servirà per a la connexió entre l’aplicació i el dispositiu mecànic, la làmpada i la televisió. Prototipatge i connexió entre el servidor (Raspberry Pi) i el client (l’aplicació), juntament amb les adequades connexions elèctriques per a controlar els dispositius electrònics, per a demostrar les oportunitats de l’aplicació. Pressupost de la realització del projecte. Estudi d’altres oportunitats que ofereix l’aplicació desenvolupada en el projecte. El punt que no es tindrà en compte és la definició del procés de fabricació ni de l’aplicació ni de tot el muntatge de la televisió o de el control de un llum. Per tant el projecte constarà de veure quines són les possibilitats d’aquest software de reconeixement de veu juntament a un prototip per veure que el sistema és funcional.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 7 4. Estat del art 4.1. Aplicacions de reconeixement de veu Els sistemes de reconeixement de veu és un tipus de tecnologia molt nova que encara està en una etapa molt prematura de desenvolupament. Aquests tipus de tecnologia es va inventar el 1940 amb la col·laboració de dues empreses americanes, Bell i AT&T. Aquestes dues companyies van desenvolupar un aparell molt senzill que era capaç de reconèixer la veu. A partir d’aquí es va crear un camí cap al progrés d’aquests sistemes, centrat en les millores de precisió i robustesa d’aquesta tecnologia. No és fins el 1960 que una altre gran empresa americana, Texas Instruments, crea una tecnologia de reconeixement de veu a la que se l’hi pot donar una utilitat. Com a tot primer dispositiu tecnològic, sempre tenen opcions de millora. És un dispositiu que requereix de fer pauses entre paraula i paraula per a que el sistema sigui capaç de reconèixer el que l’usuari està dient. El 1970 apareix el primer producte de reconeixement de veu, el VIP100 de Threshold Technology Inc., un software que tenia un diccionari petit, que depenia del usuari i que només reconeixia paraules discretes. Durant aquesta dècada els governs comencen a investigar sobre aquest tipus de tecnologia, sobretot la agencia ARPA 1 , una divisió del departament de defensa dels Estats Units. 1 ARPA (Advanced Research Projects Agency), agència creada el 1958 als EE.UU. en resposta al desenvolupament militar i tecnològic de la URSS durant la Guerra freda. També és l’empresa que va assentar les bases de la red global de computadors. Figura 1: Logo agencia ARPA
Pág. 8 Disseny i aplicació d’un sistema de reconeixement de veu Finalment el 1980 apareixen ja sistemes de reconeixement de veu més avançats, amb una gran quantitat de paraules en les seves llibreries, i que fan que aquesta tecnologia sigui més accessible. Algunes d’aquestes empreses són Philips, Speechworks, Intel, Dragon Systems o Microsoft. El reconeixement de veu és un sector que porta uns anys de creixement exponencial com la majoria de les tecnologies. Cada cop són més les aplicacions que s’han donat en aquests sistemes, degut a que també milloren les tecnologies referents a aquesta funcionalitat. Actualment les aplicacions on més s’està utilitzat el reconeixement de veu són: Contestadors automàtics. Una de les primeres utilitats de reconeixement de veu va ser la de distribuir les trucades entrants en el servei d’assistència telefònica de varies companyies, com Telefònica, Vodafone o Orange en el nostre país, mitjançant preguntes automàtiques i on es reconeixen les respostes dels usuaris utilitzant un motor de veu, de manera que segons les respostes dels usuaris la trucada es dirigeix automàticament a un departament o un altre dins de la mateixa companyia. Figura 2: Empreses que utilitzen un sistema de reconeixement de veu.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 9 Assistents personals. Són un servei que s’utilitzen en la majoria de dispositius de computació, ordinadors personals, ordinadors dels cotxes o els smartphones, on es controlen les aplicacions que formen part d’aquests dispositius mitjançant el reconeixement de veu. Aquest tipus d’aplicacions s’anomenen assistents personals. Actualment s’estan centrant en els dispositius mòbils amb les aportacions de Siri, Cortana o Google Now, els tres formen part de diferents plataformes però tenen en comú que són motors de veu amb els quals pots conversar i realitzen les accions que se’ls ordena. Tot i això també existeixen assistents personals per a computadors personals, com poden ser Jarvis o Julius, que són projectes en desenvolupament que es van actualitzant amb l’aparició de nous algoritmes, cada cop més precisos, de reconeixement de veu. Utilitzant aquestes aplicacions s’han realitzat molts projectes personals de control de veu de robots, com controlar el moviment de un petit vehicle robot o el moviment d’un braç robòtic. Automatització de les vivendes (casa domòtica). Dins aquest conjunt, en formen part, la il·luminació de les diferents habitacions, un sistema intel·ligent de calefacció on es pot controlar la temperatura simplement amb la veu, dispositius electrònics com poden ser la televisió, un despertador o un sistema electrònic de música i, fins i tot, sistemes mecànics automatitzats com pot ser el moviment vertical d’una taula - que ho permet-hi - o el moviment de compartiments amagats en els sostre de la casa i, fins i tot, el control del fluids dins de les tuberes, modificant el comportament de les vàlvules de les tuberes de gas o les tuberes d’aigua. Figura 3: Asistents de reconeixement de veu per a smartphones actuals, Cortana i Siri.
Pág. 16 Disseny i aplicació d’un sistema de reconeixement de veu Un cop generades les comandes funciona exactament igual que el anterior, és el mòdul l’encarregat del reconeixement de veu i l’Arduino s’encarrega del post procés. El cost d’aquest dispositiu és major que l’anterior, aproximadament 43,5$ per unitat. Però incorpora la llicència del software de configuració. Figura 9: Finestra de inici del software .
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 17 LC LD3320 ASR Aquest dispositiu també és una placa PCB com les altres. Però té una virtut respecte les altres i és que no necessita configuració prèvia. Senzillament converteix la veu que rep a text i la expulsa per un dels ports de connexió que suporta. Aquesta placa es pot controlar mitjançant qualsevol dispositiu que suporta interfície de connexió en paral·lel 6 o SPI 7 , dos protocols diferents. La Arduino o altres single board computers com la Raspberry Pi (de la qual parlarem més endavant) suporten aquests protocols. Per tant seria necessari un altre dispositiu per al post processat del reconeixement de veu. En aquest dispositiu, al no necessitar una preconfiguració, totes les comandes són SI i per tant el pot usar qualsevol usuari i hauria de reconèixer la veu d’aquests sense cap problema. 6 La interfície paral·lel és una connexió entre un ordinador i un perifèric amb la peculiaritat que s’envien paquets de bits de dades en forma de bytes, en comptes de enviar la información bit a bit. 7 La inerfície SPI (Serial Peripheral Interface) és un estàndard de comunicació que s’utilitza per a la transferència de información entre circuits integrts electrònics, té dos peculiaritats, una que és la interfície més rápida d’aquest tipus i laltre que no és estable si s’utilitzen cables llargs. Figura 10: Placa PCB del sistema de reconeixement de veu LC LD3320 ASR
Pág. 18 Disseny i aplicació d’un sistema de reconeixement de veu BitVoicer Un cop contemplades totes les opcions de hardware on el reconeixement de veu està integrat en un dispositiu físic, es compararan amb les opcions de software/firmware. El primer sistema de reconeixement de veu basat en software és el BitVoicer. És un software que permet incorporar en un microcontrolador un sistema de reconeixement de veu. El punt fort d’aquest software és que és totalment personalitzable. És capaç de capturar àudio i processar-lo en un microcontrolador de manera que el resultat és un text. Suporta molts idiomes, els més utilitzats en el món i altres com el danès o el finlandès. Aquest tipus de reconeixement de veu és totalment configurable: El volum mínim a partir del qual comença a ser efectiu el reconeixement de veu, deixant a part l’àudio amb un volum menor. El nivell de confiança entre la paraula pertanyent a la llibreria i la paraula reconeguda per el software. El nivell de latència entre que l’usuari diu alguna cosa fins que el microcontrolador reporta el text. Una paraula clau a partir de la qual s’activa el reconeixement de veu. Figura 11: Software BitVoicer
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 19 Un altre avantatge és que es pot comunicar amb altres dispositius, tant per USB com a través de una xarxa de internet, de manera que no són necessaris fils si es disposa de WIFI. Disposa d’una interfície gràfica que permet tenir controlats tots aquests elements i el estatus actual del reconeixement de veu a través de un PC que tingui aquest software instal·lat. A més a més aquest software permet dotar de reconeixement de veu una Arduino de la qual s’ha parlat anteriorment. Aquest software no disposa de llicencia lliure i té un cost mensual de 4,5$. Dragon Naturally Speaking 13 Aquest és el software de reconeixement de veu més treballat sobre Windows. És un software capaç de comunicar-se amb qualsevol aplicació de Windows i a més a més té la virtut que no és necessari cap tipus de coneixement de programació ja que és plug&play. El problema principal és que aquest software ja està creat, i té una empresa darrere. Per tant no es pot accedir al codi i modificar-lo per a adaptar-lo a aquest projecte concret. Les especificació més limitant d’aquest software és que només es pot instal·lar sobre el sistema operatiu Microsoft Windows. Sobre aquest sistema operatiu és capaç de controlar la majoria d’aplicacions. Té una resposta molt ràpida a la veu i gran precisió, comandes de veu configurables o també és capaç de interpretar el dictat de text. Té uns requisits de l’ordinador sobre el que s’instal·la molt elevats comparat amb el software anterior. Aquest software també incorpora la funcionalitat de assistent personal de l’ordinador, permet controlar totes les funcions de l’ordinador per veu, una característica innecessària però que suposa un cost afegit en el preu final del producte. Figura 12: Producte Dragon Naturally Speaking 13.
Pág. 20 Disseny i aplicació d’un sistema de reconeixement de veu Windows speech platform Finalment actualment hi ha una altre opció de software en la que es necessiten coneixements de programació no molt elevats però sí que s’ha de conèixer un llenguatge típic en programació com és el C, C++ o el C#. Tots 3 variants de un mateix llenguatge. Aquest software consisteix en varies llibreries organitzades en un SDK (software devolopment kit) que són les eines necessàries per a crear un software en aquest cas de reconeixement de veu. Amb aquest kit de eines juntament amb les eines bàsiques de programació ja es pot crear una aplicació de Windows totalment personalitzada i capaç de realitzar totes les funcions inherents al sistema operatiu. Tot això amb un sistema de reconeixement de veu incorporat. El punt fort d’aquest software és que la llicència d’aquestes eines va lligat a la del sistema operatiu, és a dir, la pròpia empresa Microsoft allibera la possibilitat de tenir problemes legals sempre i quan s’executi aquesta aplicació sobre una copia del sistema operatiu original. Més d’un 80% de la població mundial disposa de un dispositiu amb aquest sistema operatiu. Això significa que és una bona plataforma sobre la que treballar el sistema de reconeixement de veu. Aquesta forma de concebre el concepte de una aplicació de reconeixement de veu permet modificar la aplicació a petició del usuari. Per tant no té una única aplicació directe al món real sinó una gran varietat. Figura 13: Logo de Microsoft Windows.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 21 5. Especificacions bàsiques Abans de poder decidir quina és la millor opció de les comentades anteriorment , s’han de valorar quines són les necessitats i els requeriments d’aquest projecte. Al inici del projecte s’han presentat les següents necessitats: Un sistema de reconeixement robust per què es pugui utilitzar en moltes aplicacions. Un sistema fàcil de configurar i de utilitzar. És important que les llibreries de paraules capaces de reconèixer tinguin una fàcil configuració. Incorporació dels fonemes i els sons més habituals per a un millor reconeixement. Suport en els llenguatges més utilitzats arreu del món per a una possible personalització de l’aplicació segons la localització. L’anglès, el castellà, el francès, el xinès, l’alemany, el japonès i el català. Tenir el suport de una companyia que garanteixi que les llibreries utilitzades no es quedin obsoletes en poc temps. Suport de auriculars inalàmbric ja sigui per bluetooth, radiofreqüència, WIFI o utilitzant un dongle (llapis USB), per a poder utilitzar auriculars amb micròfon a distància i no dependre d’estar a prop de l’ordinador o la placa. Reconeixement de veu independent de la persona que l’estigui utilitzant, és a dir un sol reconeixement global per a la majoria de usuaris segons el dialecte, de manera que no s’hagi de fer la àrdua tasca de configurar per a cada usuari l’aplicació. Evitar que les llicencies suposin una barrera a l’hora de implementar el dispositiu escollit. La millor opció és buscar una solució open source de manera que no hi hagi cap problema legal o de Copyright al implementar el hardware o software en el producte. En cas que no sigui possible aquesta opció, l’altre cosa que s’ha de mirar és que la llicència sigui comercial i que es pugui disposar de ella fàcilment.
Pág. 22 Disseny i aplicació d’un sistema de reconeixement de veu Finalment l’últim requeriment, però no menys important, és que la aplicació es pugui personalitzar segons les necessitats de cadascú. Un cop establerts els requeriments del projecte només falta decidir quina és la opció de les comentades anteriorment que les compleix totes. Fent una comparació de totes les solucions als problemes que hi ha en el mercat, i que s’han detallat anteriorment, s’ha escollit el sistema de reconeixement de veu Microsoft Windows Platform, ja que té un valor afegit i és que permet crear una aplicació totalment des de zero i personalitzar-la i configurar-la tant gràficament com les funcionalitats. Requeriments Elechouse Voice Recognition Module Easy Vr Shield 3.0 LC LD3320 ASR BitVoicer Dragon Naturally Speaking 13 Windows speech platform Cost 6 4 7 8 1 10 Requeriments obligatoris Speaker dependent (SD) NO NO SÍ SÍ SÍ SÍ Àudio WIFI NO NO NO SÍ SÍ SÍ Llicència oberta NO NO NO NO NO SÍ Taula 1: Comparació dels sistemes de reconeixement de veu.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 23 6. Desenvolupament del projecte 6.1. Introducció Primer de tot es s’ha procedit a programar l’aplicació de reconeixement de veu utilitzant un software de desenvolupament d’aplicacions per a Windows, el Visual Studio 2013, amb el llenguatge de programació C#, una variant del conegut llenguatge C, però més intuïtiu per a la gent que està començant en aquesta branca de coneixement, la programació. Aquesta aplicació s’anomenarà Mock Up. Un cop feta l’aplicació el següent pas és establir la connexió entre la aplicació de Windows i el mini computador (la Raspberry Pi). S’ha instal·lat sobre el ordinador de placa única el sistema operatiu Raspbian el qual és una variant del sistema operatiu lliure Linux optimitzat i adaptat per a el correcte funcionament sobre una Raspberry Pi. Per a aconseguir això s’ha desenvolupat un programa servidor per a establir la connexió mitjançant una xarxa de internet. Aquest servidor s’ha programat utilitzant el llenguatge de programació TCL, que és un dels més utilitzats per a crear servidors. El segon pas ha sigut crear les funcions que donen ordres a la Raspberry Pi, de manera que serveix per a controlar els dispositius electrònics que van connectats a aquesta placa. Finalment el que s’ha fet a sigut crear un prototip de l’aplicació, juntament amb l’ordinador amb sistema operatiu Windows i el ordinador amb sistema operatiu Raspbian, per a demostrar que el projecte és una realitat i no només una teoria. Aquesta fase és la més important ja que és quan es reflecteix tot l’esforç realitzat durant el projecte i si tot el que s’ha estudiat en aquest projecte concorda amb el funcionament real. Figura 14: Esquemàtic de funcionament general del prototip.
Pág. 24 Disseny i aplicació d’un sistema de reconeixement de veu 6.2. Visual Studio 2013 L’aplicació Visual Studio és una eina per a poder programar de manera senzilla dins d’una plataforma que simplifica molt les coses al usuari sobretot quan es tracta de fer aplicacions per a la interfície Windows. Aquest programa disposa de una infinitat de eines útils, però en aquest projecte només se’n han utilitzat una desena. En aquest programa es pot utilitzar varis llenguatges de programació, el Visual Basic, Visual C#, Visual C++, Visual F# o JScript. Entre tots aquests s’ha escollit el Visual C# que és molt senzill d’entendre i programar. Per a crear el programa de reconeixement de veu s’ha creat un projecte de Visual Studio del tipus Windows Form Aplication a on tot el codi va referenciat a una finestra o interfície gràfica. L’arbre de l’aplicació consisteix en varies formes les quals contenen un codi que es crea automàticament i que defineix la posició, forma, text i color de l’element que conté la finestra principal i a més a més inclou un altre arxiu de codi (.cs) que és la part programable. Figura 15: Finestra inicial del Visual Studio 2013 Ultimate
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 25 A part de les formes, del programa principal també pengen altres finestres com les propietats del projecte o les referències. En aquest projecte s’han deixat les propietats per defecte. En canvi les referencies si que s’han modificat, ja que aquesta pestanya conté les llibreries que es volen utilitzar en el projecte (SDK 8 ). Per l’aplicació de reconeixement de veu s’ha utilitzat el software de desenvolupament anomenat “Microsoft Speech SDK 5.3 (SAPI)” juntament amb el “Microsoft Speech platform runtime 11”. La llibreria “Microsoft Speech SDK 5.3 (SAPI)” és la que s’ha inclòs a la pestanya referències i que permet executar funcions especifiques de reconeixement de veu com executar el motor de reconeixement de veu. El “Microsoft Speech platform runtime 11” és l’encarregat de buscar i executar les llibreries dels diferents llenguatges tant de reconeixement de veu com la conversió de veu a text, quan el programa principal de l’aplicació en fa referencia. La SAPI s’ha de incloure a les referències mitjançant l’acció add references. 8 SDK (software development kit) és un conjunct de eines de desenvolupament de software que permet al programador crear softwares o aplicacions per a un sistema concret. Llibreria de reconeixement de veu de Microsoft Finestra principal Codi automàtic referenciat a la forma principal Codi creat per l’usuari Figura 16: Arbre de funcions del projecte en Visual Studio
Pág. 32 Disseny i aplicació d’un sistema de reconeixement de veu Programa servidor Com s’ha comentat anteriorment per a que el sistema sigui funcional és necessari que hi hagi una plataforma on es pugui connectar la aplicació per enviar les ordres necessàries als dispositius. Aquesta plataforma s’anomena servidor. Un servidor és un programa informàtic capaç de emmagatzemar i executar les ordres de més d’un computador a la vegada mitjançant una connexió de xarxa. En aquest projecte s’ha dissenyat un senzill servidor TCP, protocol de comunicació que s’utilitza per a les connexions dins de una mateixa xarxa que funcionen a través de internet. Aquest protocol funciona a través de un socket, que és un port de connexió no tangible on un ordinador es pot connectar mitjançant una adreça IP, número de identificació de cada dispositiu connectat a una mateixa xarxa de internet, i un numero de port que és la interfície per on es rep i s’envia la informació. Aquest servidor ha estat programat en TCL un llenguatge de programació que permet crear un servidor amb les seves funcions executables en el mateix paquet d’arxius de manera que des de un altre ordinador (client) es pot cridar directament a aquestes funcions amb la única condició d’haver establert anteriorment la connexió amb el servidor. Per a crear el servidor el primer que s’ha fet ha sigut crear un arxiu amb extensió TCL. Concretament s’ha creat el TclServer.tcl arxiu en el qual s’ha construït el programa per establir connexió. Inicialment es crida el paquet per executar arxius en format TCL i a la vegada es càrrega l’arxiu tclserverVR.so que conté les funcions que posteriorment es poden cridar mitjançant comandes des de el client. Un cop cridat tots els arxius necessaris, es procedeix a declarar les variables que s’utilitzaran a les següents funcions. Com es pot veure s’inicialitza el port amb un valor de 9104, número el qual s’ha de posar en el client per a crear la connexió. I també s’inicialitza una variable timeout que estableix el temps màxim que pot tardar en establir-se la
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 33 connexió, en cas de que una connexió amb aquest client respongués més tard de 10 segons, la connexió es perdria i sortiria un error. Un cop definit tot el necessari, es continua amb una subrutina, que s’encarrega de comprovar l’estat de la connexió client-servidor. En cas de que el client tanqui la connexió del seu port, el servidor imprimeix en pantalla el missatge “CLOSE!!!”. Si per altre banda el client envia una comanda el servidor imprimeix en pantalla la comanda que ha rebut encara que no coincideixi amb cap de les funcions incloses al arxiu tclserverVR.so. Si realment la comanda no coincideix amb cap funció a continuació el servidor envia un missatge d’error. Seguidament es crea una altre subrutina anomenada “accept” que com indica el nom de la rutina es dedica a acceptar les connexions dels clients. Quan un client intenta connectar-se al socket d’aquest servidor, el propi servidor identifica la adreça IP del client i la imprimeix per pantalla juntament amb el missatge “Accepted connection”. A part un cop establerta la connexió la rutina crida a la funció descrita anteriorment per comprovar l’estat de la connexió i si rep algun missatge del client.
Pág. 34 Disseny i aplicació d’un sistema de reconeixement de veu Finalment es crea la rutina principal del servidor el qual està en espera mentre no rep una petició de connexió, però quan rep una petició, crida la subrutina “accept" que s’ha explicat anteriorment. Quan una de les subrutines finalitzen com pot ser el cas de que es tanqui una connexió, el programa torna a la rutina principal per esperar una nova connexió d’algun client. Aquest codi és el que quan s’executa l’arxiu genera un servidor que es capaç de enviar i rebre missatges i interpretar-los. Però per això es necessari disposar de les funcions a executar que com s’ha comentat està en el arxiu tclserverVR.so que prové de dos arxius compilats en un únic arxiu. Per a fer la compilació es disposa d’un arxiu “Makefile” que incorpora a dintre totes les comandes de compilació necessàries per a generar el fitxer amb extensió .so que ens interessa. Per a poder executar el “Makefile” es necessari disposar de dos fitxers, un escrit en C++ i l’altre on només s’han de llistar els noms de les diferents funcions, amb extensió .i (del anglès input). El primer fitxer escrit en llenguatge C++, anomenat tclserverVR.cpp consisteix en el següent. És on s’escriuen les funcions que després el client vol executar. En el cas que ens ateny les funcions que s’han afegit al fitxer ha estat la funció encendre i la funció apaga. La primera funció s’encarrega de precisament fixar la direcció i el valor de un dels ports de la Raspberry Pi (GPIO), concretament en aquest cas es fixa el port numero 17 com a port de sortida i amb un valor de sortida de 0 Volts. Això ho fa modificant els fitxers interns de la Raspberry Pi que controlen aquests ports i que es troben en el camí root/sys/class/gpio.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 35 Per a executar aquest programa senzillament cal introduir en el prompt del terminal de la Raspberry Pi la següent línia de text: >>> ./TclServer.tcl . En l’altre funció que s’anomena apaga tenim un codi igual que l’anterior però en comptes de fixar el valor de sortida del port a 0 Volts el fixa a 3,3 Volts que és el valor màxim al que poden treballar aquests ports.
Pág. 36 Disseny i aplicació d’un sistema de reconeixement de veu Per a executar aquest programa senzillament cal introduir en el prompt del terminal de la Raspberry Pi la següent línia de text: >>> ./TclServer.tcl .
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 37 6.6. Aplicació de reconeixement de veu Un cop fets tots els elements complementaris, es comença amb el nucli del projecte que és la pròpia aplicació de reconeixement de veu, el Mock Up. Aquesta aplicació està programada en llenguatge Visual C# un llenguatge molt senzill i molt fàcil d’entendre. A més a més també s’utilitzen varies funcions de la llibreria Microsoft.speech que es pot descarregar de la següent pagina web de forma gratuïta, https://www.microsoft.com/enus/download/details.aspx?id=11670 . Un cop es disposa d’aquesta llibreria s’ha de incloure tant en el projecte de Visual estudio, com en el codi de l’aplicació com es veu en la imatge següent. El primer pas ja s’ha explicat quan s’ha parlat de les referències en el punt 5.2., però per afegir-ho a el codi encara és més senzill, només s’han d’afegir les següents línies al inici de tot. Aquest codi està dins d’un fitxer, el fitxer principal, anomenat Form1.cs a on està el nucli del programa. Seguidament un cop iniciada la llibreria de Microsoft tant de reconeixement de veu com de síntesis de text a veu també s’afegeixen les llibreries que permeten establir una connexió TCP amb el servidor que s’ha explicat al punt anterior a través d’un socket. Definides ja les llibreries característiques d’aquest projecte es comença ja amb el programa principal. El llenguatge C# és un llenguatge centrat en la creació de classes. Aquestes classes tenen funcions internes anomenades void, de funcions void n’hi ha de diferents classes però en aquesta aplicació només s’utilitzen funcions publiques (private void) que permeten cridar-les només dins de la classe on han estat creades. Per tant el primer que és fa es crear la classe principal anomenada igual que l’arxiu, es a dir Form1. Aquesta classe va lligada a una interfície gràfica que té el mateix nom, ja que es tracta d’un projecte amb suport gràfic.
Pág. 38 Disseny i aplicació d’un sistema de reconeixement de veu Dins d’aquesta classe el primer que es fa és inicialitzar les variables. S’inicialitzen 3 variables importants, primer la “cultureInfoConfig” que conté el nom informàtic del llenguatge seleccionat, després el “syn” a on s’inicialitza el sintetitzador de veu que es capaç de transformar el text a veu i finalment la variable “s” que correspon al socket que s’utilitzarà per connectar-se al servidor. Un cop definits els elements a la classe principal, dins d’aquesta es crea una subrutina que fa referència a la selecció del llenguatge. Aquesta subrutina conté un petit diccionari amb les paraules o frases que ha de ser capaç de reconèixer el motor de reconeixement de veu i també de les paraules o frases que es vol que el programa envií via àudio obtenint la bidireccionalitat de l’aplicació. Segons l’idioma seleccionat per a l’usuari s’escull un o altre diccionari i la variable “cultureInfoConfig” ja definida obté el valor del nom de l’idioma que l’ordinador es capaç d’entendre.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 39 A continuació el programa inicialitza tots els elements necessaris per a que funcioni el reconeixement de veu i el sintetitzador de text a veu. Primer es configura el llenguatge del sistema utilitzant el identificador definit en el diccionari, de manera que quan comencin a funcionar els motors de veu, agafin com a idioma aquest i busquin dins de les llibreries instal·lades tant la gramàtica com la pronunciació com el lèxic d’aquesta llengua. Seguidament s’inicialitza el sintetitzador de veu, per a fer això es mira en el computador quins són els llenguatges instal·lats i a partir d’aquí es compara si alguna part del nom dels
Pág. 40 Disseny i aplicació d’un sistema de reconeixement de veu llenguatges coincideix amb l’identificador de llengua “cultureInfoConfig” i el llenguatge amb el que coincideix es selecciona i utilitzant la funció “selectVoice” es tria quina veu i en quin llenguatge es vol utilitzar. A més a més també es selecciona que tot l’àudio que expulsi la aplicació la reprodueix-hi a través del sistema de àudio predeterminat. Finalment s’inicialitza el motor de reconeixement de veu, només cal passar-li l’idioma en que es vol que s’executi i com en el sintetitzador quin és el dispositiu d’entrada de veu, que en aquest cas també és el predeterminat del ordinador a on s’executi. Un cop ja definit el motor també es crea un esdeveniment on es posaran per a cada paraula distingida quina acció ha de realitzar la aplicació. Tot i que ja estan iniciats tots els elements necessaris per a començar el reconeixement de les paraules obtingudes per el motor gràfic falta introduir en el motor els diccionaris definits al inici d’aquesta classe. Això es fa creant un element “Choices” a on s’afegeix un a un totes les paraules del apartat “voiceCommands” del diccionari. Un cop es tenen totes les paraules dins d’aquest element “Choices” s’afegeixen en un constructor de gramàtica (GrammarBuilder) i posteriorment en una categoria de gramàtica (Grammar), finalment aquesta gramàtica s’introdueix a dins del motor de reconeixement de veu utilitzant la funció “LoadGrmmarAsync”.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 41 Un cop tot està configurant només manca que el programa es posi a escoltar i mirar de reconèixer tot el que entra per el sistema d’entrada d’àudio. Això es fa amb la funció RecognizeAsync, que quan rep àudio per el canal d’entrada escolta de manera asíncrona fins que considera que l’usuari ha parat de parlar degut a un silenci llarg o que ha passat més d’un cert temps internament establert. Tot aquest arxiu de àudio el processa el motor de reconeixement de veu per transformar-lo en text. La funció RecognizeAsync un cop té un àudio que es capaç de processar envia la informació en forma de una classe anomenada Result dins del esdeveniment creat durant la inicialització del motor de reconeixement de veu, aquesta classe conté varies funcions específiques dues de les quals s’utilitzen en aquest programa. La primera és la funció Result. Text que retorna en forma de text la paraula o frase que ha entès el motor i que ha de coincidir amb una paraula del diccionari ja que el motor quan s’executa compara el fitxer d’àudio amb totes les paraules del diccionari per veure a quina s’assembla més. L’altre funció és la Result.Confidence que et diu amb quin percentatge la paraula que ha dit l’usuari s’assembla a la paraula que retorna el motor de reconeixement de veu, aquest percentatge pren un valor del 0.00 al 1.00. Per a obtenir certa robustesa es fixa un valor llindar a partir del valor aquest de confiança, de manera que només es considera com a bona la paraula que té un valor superior a aquest llindar. En el cas que sigui així el programa mira a quina paraula correspon el que ha dit l’usuari i executa una funció o una altre, en aquest cas la funció on() o la funció off().
Pág. 48 Disseny i aplicació d’un sistema de reconeixement de veu Per veure com afecta el ús d’aquestes tecnologies a l’aplicació de reconeixement de veu, s’ha fet un test utilitzant unes 30 paraules i un micròfon amb cancel·lació de soroll comparat amb el mateix test utilitzant un micròfon convencional sense cap característica especial. El resultat en percentatge d’encerts és el següent: Com es pot observar en els gràfics anteriors, utilitzant el micròfon amb les característiques recomanades s’obté més del 90% d’encert en un entorn amb soroll i amb poca variabilitat. En canvi amb un micròfon estàndard el percentatge d’encert és menor del 80% i amb molta variabilitat, per tant clarament el software de reconeixement de veu és més robust utilitzant el hardware adequat. L’altre eina important que permet obtenir una millora en la precisió del sistema de reconeixement de veu i així evitar errors és un valor intern del sotware de l’aplicació, que defineix el percentatge de semblança entre la paraula interpretada per l’àudio i la paraula escrita en text de la biblioteca de paraules. Aquest valor s’anomena treshold i s’introdueix dintre de la funció RecognizedPhrase.Result.Confidence en percentatge sobre 1. Sobre aquest valor s’ha fet un estudi per veure quin és el més òptim utilitzant paraules usualment utilitzades en el àmbit domòtic com poden ser encendre, apagar, cancel·lar, parar, comença, encendre llum, apagar llum, etc... fins a un total de unes 30 paraules o frases diferents. D’aquest estudi s’han obtingut els resultats de la següent figura. Figura 25: Comparativa de un micròfon estàndard respecte un micròfon amb cancel·lació de soroll.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 49 Com es pot veure en les figures anteriors l’estudi només contempla el rang de valors del treshold 12 entre el 60% fins al 80% ja que un valor més elevat donaria la majoria de paraules incorrectes i en canvi un valor menor donaria com a vàlides paraules totalment diferents de les que composen la biblioteca. El nombre de paraules correctes en funció del valor del treshold no varia més que la variabilitat del àudio. Llavors per poder escollir un valor de treshold s’ha dissenyat un model lineal tenint en compte les paraules que s’han fallat a cada test i les paraules del test que s’han confós, es a dir, l’usuari volia dir una paraula i el sistema de reconeixement n’ha reconegut com a bona una altre. 12 Treshold és el valor llindar a partir del qual la aplicación considera com a bona la paraula Figura 26: Test de comandes correctes respecte el treshold. Figura 27: Model lineal del test per a determinar el millor valor del treshold.
Pág. 50 Disseny i aplicació d’un sistema de reconeixement de veu El model segueix la següent equació, 0,3*paraules incorrectes + 0,7*paraules confoses. D’aquest model s’ha vist que el valor òptim del treshold és el 0,7 i per tant s’escollirà aquest valor com a predeterminat en la aplicació. Tot i això es posarà una pestanya per a poder canviar el valor segons convingui depenent si s’utilitza una llengua nativa o una llengua estrangera.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 51 6.7.1. Connexions de hardware Per a demostrar la utilitat de una aplicació de reconeixement de veu personalitzada s’ha construït un prototip. En aquest cas el projecte s’ha centrat en demostrar que la aplicació funciona utilitzant un llum i una televisió establint varies connexions entre la Raspberry Pi i els dispositius amb varis elements electrònics necessaris enmig. A continuació es mostra quin ha estat el esquema de connexions entre la Raspberry Pi i el llum i la televisió. Utilitzant aquestes connexions i els programes anteriors es pot controlar un televisor i una làmpada a través de la veu. Figura 28: Diagrama de connexions del circuit elèctric del prototip.
Pág. 52 Disseny i aplicació d’un sistema de reconeixement de veu Per a permetre el control de encès i apagat de les funcions de la televisió s’han utilitzat transistors substituint els polsadors de existents en la televisió. La diferència entre un polsador i un transistor es senzillament que un tanca un circuit elèctric de forma mecànica ( en el polsador l’usuari prem el botó per a tancar el circuit) i en canvi el transistor es controla elèctricament ( la Raspberry Pi dóna una ordre a un dels seus pins de que circuli corrent, aquest pin està connectat a la base del transistor i quan es dóna corrent a la base del transistor llavors es tanca el circuit entre el col·lector i el emissor). Per a controlar la làmpada s’ha utilitzat un altre sistema que utilitza un relé enlloc de transistors, ja que els relés són dispositius mecànics capaços de treballar a tensions i corrents més elevats que els transistors. Tot i això la funció és la mateixa que els transistors, la funció de interruptor, treballant a 230 V. .
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 53 7. Pressupost En aquest projecte per a fer el pressupost, s’han dividit les despeses que s’han produït durant el recorregut del projecte en dos apartats, unes son les despeses referents a els recursos humans i les altres despeses fent referència a les despeses materials necessàries per al projecte 7.1. Pressupost de recursos humans S’ha definit una taula on es contemplen les despeses de recursos humans referents als costs generats per la participació de les persones en aquest projecte. Tenint en compte que la duració del projecte ha estat de aproximadament de 6 mesos. Cost de recursos humans Descripció Temps [h] Preu [€/h] Cost [€] 1 Enginyer en pràctiques 300 7 2100 Documentació i aprenentatge del Visual Studio 60 Desenvolupament de la aplicació 100 Tests de robustesa 60 Selecció del hardware 20 Disseny del prototip 60 Cost de S.S. estudiant en pràctiques 1 Enginyer superior 30 30 900 Cost de S.S. enginyer superior(33%) 297 Total 3297 Taula 2: Pressupost dels recursos humans del projecte.
Pág. 54 Disseny i aplicació d’un sistema de reconeixement de veu 7.2. Pressupost recursos materials En aquest apartat es desglossarà les despeses del recursos materials utilitzats durant el projecte, dividint-los en dos categories diferents, les llicències de software i els components físics utilitzats tant per a crear la aplicació com per a construir el prototip del projecte. Per a avaluar les despeses dels elements que disposen duna amortització més llarga que el temps del projecte s’ha considerat només el cost dels 6 mesos que ha durat el projecte. Cost de recursos materials Descripció Cost inicial [€] Temps d'amortització [anys] Amortització anual [€/any] Duració [anys] Amortització total [€] Software 97,5 Llicència Visual Studio 2013 650 4 163 0,5 81,3 Llicència sistema operatiu Raspbian 0 4 0 0,5 0 Llicència Microsoft Office 2013 130 4 32,5 0,5 16,3 Hardware 479 Televisió 200 200 Làmpada 30 30 Ordinador portàtil 1000 5 200 0,5 100 Raspberry Pi 2 60 60 Cablejat 5 5 Resistències 2 2 Transistors 2 2 Impressió 80 80 Total 576,5 Taula 3: Pressupost dels recursos materials del projecte.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 55 7.3. Pressupost total del projecte Finalment un cop estudiats quins són les despeses particulars i detallades del projecte a la següent taula es fa un balanç final del projecte, tenint en compte els impostos que el contractista ha de abonar en la realització de qualsevol projecte. Aquests impostos depenen del lloc de facturació, en aquest cas España. Cost de recursos humans Descripció Cost [€] Cost de recursos humans 3297 Cost de recursos materials 576,5 PRESUPOST TOTAL SENSE IVA 3873,5 IVA (21%) 813,435 PRESSUPOST TOTAL IVA INCLUIT 4686,935 En resum el pressupost total del projecte és de un valor de 4388 €. Taula 4: Pressupost total del projecte, amb el IVA inclòs.
Pág. 56 Disseny i aplicació d’un sistema de reconeixement de veu 8. Impacte Mediambiental Al tractar-se d’un projecte centrat en una aplicació informàtica l’impacte mediambiental és escàs i es podria considerar gairebé nul. Ja que no es produeix cap consum energètic afegit més enllà de tenir unes hores més engegat el ordinador centrar per a poder tenir constantment en funcionament la aplicació. Tot i això els dispositius que s’utilitzen en el prototip, la televisió i la làmpada tenen un impacte mediambiental. Aquests dos dispositius en conjunt tenen un consum aproximat entre 200-250 W d’energia elèctrica. També hi ha altres dispositius com la Raspberry Pi o el ordinador que s’ha estat utilitzant durant la programació de l’aplicació i que també són necessaris per a controlar el prototip. Aquests dos dispositius tenen un consum energètic de 3 i 100 Watts respectivament. Com es pot veure el consum de la Raspberry Pi es menyspreable davant del consum de un ordinador. Suposant que utilitzar un Watt d’energia elèctrica suposa una emissió de 0,7 grams de CO2 a la hora, resulta que l’impacte mediambiental en unitats de gas contaminant del projecte és del voltant de 245 g de CO2 per hora. Considerant que un cotxe genera aproximadament 100 g/km i que la mitjana de velocitat és de 50 km/h, un cotxe arriba a consumir 5000 g de CO2 per hora. Respecte aquest valor el impacte mediambiental del projecte és relativament petit. Per tant concloure que a nivell mediambiental aquesta aplicació no suposa cap avantatge, però tampoc implica un consum afegit. Només es necessita energia en el cas que s’utilitzi el televisor o la làmpada, cost independent de si s’està fent ús de la aplicació de reconeixement de veu. En alguns casos concrets fins i tot pot suposar un estalvi energètic ja que es pot consultar l’estat de la làmpada o de la televisió sense estar en la mateixa sala d’un mateix domicili i apagar-la des de allà.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 57 9. Planificació Figura 29: Diagrama de Gantt del projecte.
Pág. 64 Disseny i aplicació d’un sistema de reconeixement de veu S’han utilitzat imatges del codi, per a que es pogui distinguir el codi de colors del sript de la aplicació o Mock Up, que dóna informació més visual que no posant senzillament el text del codi.
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 65
Pág. 66 Disseny i aplicació d’un sistema de reconeixement de veu ANNEX B: Codi del programa en TCL servidor. Makefile
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 67 TclServer.tcl
Pág. 68 Disseny i aplicació d’un sistema de reconeixement de veu Tclserver.cpp
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 69
Pág. 70 Disseny i aplicació d’un sistema de reconeixement de veu
Disseny i aplicació d’un sistema de reconeixement de veu Pág. 71