"Riconoscimento Vocale e Smartphones":

Dimensione: px
Iniziare la visualizzazioe della pagina:

Download ""Riconoscimento Vocale e Smartphones":"

Transcript

1 UNIVERSITÀ POLITECNICA DELLE MARCHE FACOLTÀ DI INGEGNERIA Corso di Laurea in Ingegneria Informatica e dell'automazione "Riconoscimento Vocale e Smartphones": Sviluppo di un'applicazione capace di dialogo su piattaforma Android Tesi di: Nicola Sturari Relatore: Prof. Aldo Franco Dragoni Anno Accademico 2011/2012

2 Indice Generale Introduzione Il Sistema Android Panoramica Struttura del sistema Activity Sviluppare per Android 8 2. Riconoscimento Vocale Panoramica Principi di funzionamento Sviluppi recenti Lo Standard VoiceXML Origine Tag Considerazioni su VoiceXML L'interprete VoiceXML Interpreti gratuiti e open-source Il parsing VxmlInterpreter Realizzazione dell'applicazione Il primo prototipo App finale Conclusioni 30 Appendice A..31 Diagramma delle classi...31 Diagramma di sequenza..32 Codici relativi all interprete 33 Appendice B..44 Codice dell Activity 44 Bibliografia 48 2

3 Introduzione Questo lavoro nasce dalla volontà di esplorare ed integrare due tecnologie nate in periodi diversi, verso cui si manifesta un crescente interesse da parte dei produttori di software, dalle grandi aziende, come Google, ai piccoli sviluppatori indipendenti, come noi durante il nostro tirocinio. I primi due capitoli di questa tesi si concentrano quindi sull esplorare e spiegare i due grandi temi che la caratterizzano, da una parte il sistema Android, di cui ormai anche chi non si intende di informatica e nuove tecnologie avrà almeno sentito parlare, e dall altra il Riconoscimento Vocale, una tecnologia sempre più presente nella vita di ogni persona. Il tirocinio, svoltosi presso il Dipartimento di Ingegneria dell Informazione dell Università Politecnica delle Marche, ha avuto come obiettivo finale la realizzazione di un applicazione Android capace di dialogare con l utente. Nel tirocinio ha lavorato con me un altro studente del corso di Ingegneria Informatica e dell Automazione, Emanuele Cardelli. Pur affrontando insieme tutti i problemi, ognuno di noi si è dedicato maggiormente ad aree diverse del progetto, motivo per cui questo elaborato non tratta in modo specifico della Sintesi Vocale, tecnologia anch essa necessaria e presente nell applicazione finale. Inoltre, durante lo sviluppo, per gestire la logica dei dialoghi, abbiamo deciso di utilizzare un particolare linguaggio di markup che si propone come standard per le applicazioni vocali: VoiceXML. A questo argomento è dedicato il terzo capitolo. Per poter utilizzare il linguaggio VoiceXML si rende necessario disporre di un interprete ed è in questa parte del lavoro che abbiamo incontrato le maggiori difficoltà, non riuscendo ad utilizzare con successo interpreti open-source prodotti da terze parti. Di ciò si parla nel quarto capitolo, che illustra anche la nascita di una soluzione temporanea a questi problemi, un interprete VoiceXML realizzato da noi. Infine nel quinto capitolo si analizzano le varie fasi dello sviluppo della applicazione, con spiegazione di alcuni dei meccanismi di funzionamento, dal primo prototipo al prodotto finale. Il capitolo conclusivo contiene considerazioni sull esperienza complessiva e le prospettive future di questo lavoro. Nelle appendici trovano posto due diagrammi, che aiutano la comprensione della struttura dell interprete e del suo funzionamento in relazione con il thread principale dell applicazione, e i codici finali del progetto. 3

4 1. Il Sistema Android 1.1. Panoramica Android è un sistema operativo basato su Linux, ideato principalmente per dispositivi mobili come smartphones e tablet. Il progetto ha avuto origine con la società Android, Inc. fondata a Palo Alto, California nell Ottobre del 2003 da Andy Rubin, Rich Miner e Chris White per sviluppare dispositivi mobili più intelligenti che siano più consapevoli della posizione e delle preferenze del proprio possessore. Nell Agosto del 2005 viene acquisita da Google mantenendo nello staff i membri chiave del progetto originale. Il 5 Novembre 2007, l associazione Open Handset Alliance, composta da 86 aziende che si occupano di hardware, software e prodotti per le telecomunicazioni, tra cui Google, Broadcom Corporation, HTC, Intel, LG, Marvell Technology Group, Motorola, Nvidia, Qualcomm, Samsung Electronics, T-Mobile e Texas Instruments, si rivela al pubblico con lo scopo dichiarato di sviluppare standard aperti per dispositivi mobili. Nello stesso giorno viene svelato il loro primo prodotto: Android. La versione originale è rilasciata sotto licenza Apache e si basa sul kernel Linux versione 2.6, a cui si aggiungono librerie e API scritte in C e una speciale Java Virtual Machine. Discuteremo il sistema nel dettaglio più avanti nel corso di questo capitolo. Lo sviluppo e la manutenzione di Android sono affidati all AOSP (Android Open Source Project), che cerca di realizzare una singola implementazione, ulteriormente personalizzabile dalle aziende partecipanti, come Samsung, HTC, LG. Gli smartphones dei diversi produttori, infatti, presentano sistemi leggermente diversi e con differenti applicativi, mantenendo però una completa compatibilità. Pochi giorni dopo l uscita della beta di Android, viene rilasciato il Software Development Kit, un insieme di strumenti necessari per lo sviluppo delle applicazioni. La mossa di Google potrebbe sembrare azzardata, perché vengono investite grandi risorse su Android senza che ci sia inizialmente un prodotto commerciale a sfruttarlo. Questa strategia si rivela però vincente in quanto al momento del lancio commerciale di Android 1.0 nel Settembre del 2008 con il primo dispositivo Android, l HTC Dream, si è già formata un ampia e attiva comunità di sviluppatori pronti ad offrire le loro applicazioni sull Android Market. Da questo momento si susseguono una serie di versioni a distanza di pochi mesi l una dall altra, 4

5 Android 1.1 (Febbraio 2009), Android 1.5 Cupcake (Aprile 2009), Android 1.6 Donut (Settembre 2009), Android 2.0 Éclair (Ottobre 2009), Android 2.2 Froyo (Maggio 2010), Android 2.3 Gingerbread (Dicembre 2010), tutte basate su linux kernel 2.6. Vengono introdotte sempre nuove funzionalità e miglioramenti a quelle esistenti, di particolare interesse per questo lavoro risultano le funzionalità di Voice Input e Text-to-Speech dalla versione 1.6 in avanti. Nel Febbraio 2011 esce Android 3.0 Honeycomb, versione dedicata esclusivamente ai tablet. Infine nell Ottobre 2011 viene rilasciata pubblicamente l ultima versione, Android 4.0 Ice Cream Sandwich, basata su kernel Linux 3.0. Per dare un idea delle dimensioni raggiunte, nell Ottobre del 2011 erano presenti più di 500,000 applicazioni disponibili per Android con un numero stimato di download totali superiore ai 10 miliardi dall Android Market. Già dalla fine del 2010 Android è diventata la piattaforma più usata per gli smartphones, nel primo quadrimestre del 2012 ha una quota di mercato del 59% con una base di 331 milioni di dispositivi Struttura del sistema Android è composto da un kernel basato su Linux, al quale sono aggiunti i driver per il controllo dell hardware come lo schermo, la tastiera, la fotocamera. 5

6 Appena sopra il kernel troviamo una serie di librerie di base, tutte open-source, che offrono funzionalità importanti per il sistema, per citarne alcune OpenGL per la grafica, SQLite che permette di avere database relazionali basati su SQL, con un motore estremamente leggero. Abbiamo poi un blocco fondamentale, Android Runtime, che costituisce l ambiente di esecuzione di tutte le applicazioni sviluppate per Android. Qui sono presenti una macchina virtuale, la Dalvik Virtual Machine, e un insieme di librerie Java, che derivano in gran parte dalla Standard Edition, ma senza contenerla totalmente, e in parte sono specifiche per la piattaforma Android, infatti il prefisso del nome di molti package è android. Anche la Dalvik si differenzia da una Java Virtual Machine tradizionale, in quanto non esegue Java bytecode, ma uno speciale formato.dex (Dalvik Executable), che generalmente è tradotto dal Java bytecode. Questa macchina virtuale inoltre è stata creata in modo specifico per Android e quindi ottimizzata per i dispositivi che costituiscono il target di questo sistema. Il penultimo strato è composto da una serie di servizi di cui fanno uso direttamente o indirettamente le applicazioni e che sono indispensabili per il loro funzionamento. Tra gli altri citiamo il Location Manager e il Resource Manager, che servono rispettivamente a fornire la posizione del dispositivo e a richiamare risorse esterne necessarie all applicazione. Da ultimo, al livello più alto, troviamo le applicazioni, alcune delle quali standard e pre-installate come il browser e l app telefono, ma anche tutte quelle scaricate e aggiunte dall utente. Di default ogni applicazione Android viene fatta girare su un proprio processo Linux con una propria virtual machine. Il sistema avvia il processo ogni qual volta c è bisogno di eseguire un componente (ad esempio se un altra app chiede una funzione eseguibile da un componente della prima, come nel caso in cui abbiamo bisogno di scattare una foto o, come nel nostro progetto, di eseguire un riconoscimento vocale) Activity I componenti più presenti nelle applicazioni sono senza dubbio le Activity. Una Activity potrebbe essere identificata come una singola azione che l utente vuole compiere, ma, a livello più pratico, è un compente dell applicazione che fornisce all utente una schermata con cui interagire per fare qualcosa. Ciascuna Activity ha una finestra su cui viene disegnata l interfaccia, solitamente è a tutto schermo, ma può anche essere più piccola e trovarsi sopra ad altre finestre. Generalmente un applicazione Android è composta da più Activity, una delle quali è definita come main ed è quella mostrata all utente all avvio dell app, ma questa non è l unico punto di ingresso, infatti una seconda applicazione può lanciare direttamente una delle altre Activity. 6

7 Ogni volta che viene creata una nuova Activity questa viene messa in primo piano e ottiene il focus (ad essa viene indirizzato l input dell utente), mentre la precedente viene messa in una pila, che prende il nome di Back Stack, gestita con disciplina Last-In-First-Out. L operazione di impilare un nuovo elemento è fatta al lancio di una nuova Activity, mentre un elemento viene rimosso dalla cima quando termina il compito per cui era stato lanciato o quando l utente preme il tasto back per tornare all Activity precedente. Come si può intuire da quanto appena detto, ogni Activity ha un suo ciclo di vita caratterizzato da una serie di transizioni di stato, che possono essere causate dall utente, ma anche dal sistema se ad esempio ha bisogno di liberare memoria. Vediamo un altro diagramma che mostra molto bene questi passaggi. Al lancio l Activity transita per tre differenti stati, creazione, avvio e ripristino, prima di iniziare la vera e propria esecuzione. Questi eventi possono essere intercettati con gli appositi metodi che appaiono nella figura. Quando una nuova Activity passa in primo piano, quella corrente viene messa in pausa, se, ad esempio, arriva una telefonata mentre stiamo usando il browser. In questo caso è possibile riprendere rapidamente l attività precedente. Se invece l utente passa ad una nuova attività che rende la precedente non più visibile, dopo essere 7

8 messa in pausa viene anche sospesa. Anche qui è possibile un ritorno abbastanza rapido, sempre che l attività non sia stata distrutta. Infatti in caso di mancanza di memoria, il sistema può distruggere le attività sospese e in pausa, salvandone però lo stato, in modo da poterle ricreare con i dati presenti alla chiusura quando l utente vuole ritornare ad esse. Abbiamo precedentemente detto che possiamo lanciare nuove attività da quella attualmente in esecuzione, questo viene fatto tramite il metodo startactivity() che è fornito dalla classe Activity. L argomento principale che dobbiamo passare per lanciare una nuova attività è un oggetto di tipo Intent, letteralmente intenzione, che individua quale Activity vogliamo mandare in esecuzione. Questo oggetto Intent può individuare una specifica Activity se lo creiamo riferendoci direttamente alla classe (Intent esplicito), oppure possiamo soltanto indicare l azione che vogliamo eseguire, ad esempio Intent.ACTION_SEND per l invio di una mail (Intent implicito). Nell oggetto Intent, inoltre, possono essere aggiunte opzioni aggiuntive, flag per specificare in che modo deve essere avviata la nuova attività e i dati su cui deve lavorare. Si tratta dunque di un oggetto potenzialmente molto complesso. In alcuni casi è necessario ottenere un risultato dall attività lanciata, per questo esiste il metodo startactivityforresult() analogo al precedente che prende come argomento aggiuntivo un codice per identificare l Activity al momento di ricevere i risultati. La ricezione si ottiene implementando il metodo onactivityresult(), che ha come parametri il codice di riconoscimento usato al momento del lancio, un codice per indicare come si è conclusa l attività e, da ultimo, il risultato, che viene passato sotto forma di Intent Sviluppare per Android Per sviluppare applicazioni in grado di girare su sistemi Android, è necessario installare un apposito kit di sviluppo, il già citato Android SDK, completo di librerie, emulatore e documentazione. È fornito gratuitamente nel sito dedicato agli sviluppatori android e per essere funzionante, visto che le applicazioni android sono scritte in Java, richiede la presenza del kit di sviluppo Java (JDK). Questa è la base, tuttavia, per uno sviluppo efficiente, non si può fare a meno di utilizzare un ambiente di sviluppo integrato. La scelta in questo caso è quasi obbligata, perché Android ha deciso di supportare ufficialmente Eclipse, un IDE conosciuto e ampiamento usato, totalmente gratuito e open-source. Nello stesso sito in cui si trova l SDK è disponibile per il download il plug-in Android Development Tools for Eclipse (ADT) che ci permette di creare applicazioni in modo molto naturale, quasi come fossero normali programmi Java. 8

9 Direttamente dall IDE possiamo avviare l AVD Manager, lo strumento che ci permette di gestire i nostri Android Virtual Device. Questi sono a tutti gli effetti delle macchine virtuali android, è possibile, in fase di creazione, impostarne le proprietà, come dimensioni e tipo di schermo, caratteristiche hardware e versione del sistema operativo. Questo si rivela molto utile per testare il comportamento delle applicazioni sulle diverse versioni di android. Una volta impostata, è possibile avviare la macchina emulata, ottenendo una finestra simile a quanto si vede nell immagine sottostante. Questa ci permette di interagire con il device virtuale, anche se ovviamente ci sono delle limitazioni, trattandosi di un emulatore. Quando vogliamo provare un applicazione l IDE Eclipse provvederà a richiamare il tool apposito dell SDK Android per installarla nel dispositivo emulato e avviarla in automatico. Per quanto riguarda lo sviluppo vero e proprio, la stesura del codice non è differente dallo scrivere un applicazione con interfaccia grafica in Java, una volta che abbiamo creato e definito i componenti grafici si scrivono le funzione per gestire gli eventi di interazione con l utente, come il click su un bottone, il cambiamento del contenuto di una casella di testo. Essendo Java non si può fare a meno di programmare secondo i principi della Programmazione ad Oggetti, la cui trattazione esula gli scopi di questo elaborato, in ogni caso Eclipse è un buon IDE che aiuta notevolmente nella scrittura del codice. Nella parte finale di questo capitolo, vogliamo parlare degli elementi più caratteristici dei progetti 9

10 delle applicazioni android, in particolare la gestione dell interfaccia grafica e delle risorse esterne. I componenti grafici sono per lo più quelli tradizionali che siamo abituati a vedere in quasi tutti i programmi, cioè pulsanti, checkbox, caselle di testo editabili, etichette. In Android sono divisi in due grandi tipologie, i ViewGroup, che hanno la funzione di contenitori, e le View che sono i veri e propri elementi grafici.. Il layout grafico delle activity viene definito in un file XML all interno della cartella res/layout. Questo particolare è molto importante, in quanto la gestione dei file aggiuntivi delle nostro progetto deve seguire una specifica organizzazione, ogni elemento trova il suo posto, ad esempio le immagini devono essere inserite nelle cartelle res/drawable. Come si può vedere dalla figura precendente è possibile creare graficamente l interfaccia. Questo funzione è fornita dal plug-in ADT per Eclipse che comprende un editor grafico per i file.xml principali. Possiamo trascinare, aggiungere e modificare gli elementi e verrà automaticamente generato il codice xml corrispondente. Oltre al layout, troviamo il file AndroidManifest.xml, che descrive le caratteristiche principali della nostra applicazione, e nella cartella res/values il file strings.xml dove possono essere inseriti i valori delle stringhe da usare nel nostro programma. Anche questi file possono essere modificati con l editor grafico. Ad ognuno di questi elementi, valori delle stringhe, componenti grafici, possiamo associare un 10

11 identificativo. Questo ci permette di ritrovarli all interno del codice del programma, grazie ad una speciale classe R che ci consente di ottenere l ID dell oggetto desiderato passando dall ID che abbiamo assegnato all elemento nel file xml corrispondente. A questo punto tramite degli appositi metodi possiamo ottenere un riferimento all oggetto passando come argomento l ID, per fare un esempio findviewbyid(r.id.salva) può essere utilizzato per trovare un ipotetico pulsante per il salvataggio. Le applicazioni Android sono distribuite sotto forma di file APK (Android Package). Al loro interno vengono raccolti gli eseguibili in formato DEX, le eventuali risorse associate e una serie di descrittori, tra cui il manifest. Infine le app sviluppate possono essere inserite sull Android Market, ora Google Play, e rese disponibili agli utenti finali per l acquisto e il download. 11

12 2. Riconosimento Vocale 2.1. Panoramica Un sistema di riconoscimento vocale ha come obiettivo quello di associare ad un input audio (un parlato) una stringa di caratteri, o meglio una sequenza coerente di parole. L ambito di lavoro di questa tecnologia è piuttosto complesso, infatti generalmente ci si trova ad operare in un ambiente rumoroso che non consente di avere una buona qualità del segnale in ingresso. Inoltre, per sua stessa natura, il parlato varia con il genere, l età, la provenienza geografica dell interlocutore e anche con il suo stato emotivo. Nonostante queste difficoltà, l interazione vocale è uno dei modi più naturali per comunicare e la possibilità di avere a disposizione un sistema affidabile di riconoscimento ha molte applicazioni di notevole interesse, dai sistemi automatici per la dettatura, ai servizi di assistenza via telefono, fino ad applicazioni di tipo command & control per comandare dispositivi elettromeccanici e sistemi intelligenti. Le ricerche su questo argomento iniziano già negli anni 50, inizialmente con lo scopo di effettuare un riconoscimento all interno di un set molto limitato di vocaboli. Nel 1952 dai laboratori Bell viene sviluppato il primo sistema in grado di riconoscere le cifre da 0 a 9 dettate al telefono con una percentuale di successo del 98%. Importanti sviluppi nascono dal programma Speech Understanding Research presso la Carnegie Mellon University a partire dagli anni 70, ma la potenza di calcolo richiesta per l epoca è enorme. Con il passare gli anni le capacità dei calcolatori sono aumentate esponenzialmente, rimangono tuttavia alcuni notevoli problemi: L ampiezza del vocabolario; idealmente per poter riconoscere un parlato naturale serve un vocabolario estremamente ampio, ma con l aumentare delle dimensione diminuiscono le prestazioni del sistema, sia in termini di efficienza computazionale che di percentuale di errore. In questo senso non aiuta la presenza di parole con pronunce molto simili che aumenta la difficoltà del riconoscimento. Indipendenza dal soggetto parlante; i modelli utilizzati attualmente si basano tutti su una fase di training per poter effettuare con successo il riconoscimento. Può essere fatta sull utente finale per poter avere migliori risultati, però questa strategia non si rivela adatta a sistemi utilizzati da molti utenti diversi per brevi periodi di tempo, nel qual caso il training è 12

13 effettuato in fase di sviluppo e su un campione eterogeneo, garantendo tuttavia risultati peggiori. Parlato continuo; molti dei sistemi presenti, per avere buoni risultati richiedono di scandire e separare le parole, limitando in questo modo le alterazioni della pronuncia che si generano tra parole vicine e identificare più facilmente dove iniziano e finiscono. Questo ovviamente non permette all utente di avere un dialogo naturale Principi di funzionamento Il primo passo del riconoscimento consiste nell analizzare il segnale del parlato, campionandolo ad una determinata frequenza generalmente 16KHz o 8KHz e quantizzando l insieme dei valori che assume per poterlo rappresentare con un numero finito di bit. A questo punto il segnale viene ulteriormente processato con tecniche quali la trasformata di Fourier (nella versione Fast Fourier Transformation), o l analisi cepstrale, un applicazione della TdF che passa attraverso il logaritmo dello spettro di potenza, per poterlo comprimere e evidenziare le componenti più importanti. Il risultato è una sequenza di finestre temporali ad ognuna delle quali è associata una serie di coefficienti che rappresentano il parlato originale. Questo è l input per l analisi acustica, un processo che rientra nella categoria dei metodi di Pattern Recognition e che può essere effettuata basandosi su diversi modelli. L approccio più semplice si basa su un confronto diretto con una serie di schemi conosciuti scegliendo come risultato l elemento più simile. Questa tecnica presenta notevoli svantaggi perché non può modellare variazioni, ad esempio nella pronuncia di una parola, se non prevedendo più elementi per ognuna, ed è in pratica utile solo per modelli di confronto sull intera parola e in sistemi di dimensioni ridotte. Una tecnica più flessibile consiste nel modellare una parola come una sequenza di stati e ad ognuno di essi assegnare una distribuzione di probabilità che rappresenta i suoni che è possibile udire in quel segmento della parola. La lunghezza di questo segmento può essere un fonema, l unità fondamentale del parlato, ma anche un difono o un trifono. Questo modello necessità di una fase di training per stimare i parametri inserite nelle funzioni di probabilità. La tecnica più flessibile e tradizionalmente usata con successo è quella basata su degli Hidden Markov Model (Modello Markoviano Nascosto). Un HMM è un insieme di stati collegati da archi di transizione, ad ognuno dei quali è associata la probabilità di transizione, con uno degli stati definito come iniziale. 13

14 Ogni stato inoltre si caratterizza da una serie di output che può produrre, ciascuno con una determinata probabilità (posto che la somma di queste debba essere 1, cioè l evento unione è l evento certo, come anche per gli archi di transizione in uscita da un determinato stato). In generale le probabilità sugli archi di transizione e degli output può essere nota, ciononostante il modello viene definito come nascosto perché non è possibile osservare la sequenza degli stati, ma soltanto la sequenza degli output. Pur con delle semplificazioni questa tecnica fornisce una buona modellazione del fenomeno del parlato ed ha il vantaggio che può essere applicata gerarchicamente a più livelli, fonema, parola o frase. È da notare che in questo caso le transizioni sono vincoli temporali e le uniche permesse sono il ritorno sullo stato attuale, che indica un protrarsi nel tempo, e il passaggio allo stato successivo. Nell ambito dell Automatic Speech Recognition, questo modello va allenato con un processo di tentativi e feedback per migliorare le stime delle probabilità che non sono conosciute a priori. A seconda del modello scelto, abbiamo a disposizione diversi algoritmi, tra cui il Dynamic Time Warping e l algoritmo di Viterbi, che ci permettono di ottenere il risultato finale, cioè una sequenza di parole con un indice di confidenza, anche se spesso si preferisce fornire più risultati alternativi in una lista ordinata in base all accuratezza. Allo stato dell arte le ultime tecniche sviluppate fanno uso di reti neurali, anche affiancate ai modelli stocastici descritti precedentemente, che offrono come vantaggi una maggiore robustezza e flessibilità, nonché un parallelismo naturale che le rende compatibili a sistemi di calcolo fortemente paralleli. 14

15 2.3. Sviluppi recenti Un nuovo impulso nell ambito della ricerca sul riconoscimento vocale è venuto negli ultimi anni da Google. Il colosso dell informatica ha mosso i primi passi rendendo disponibile l applicazione Google Voice Search per i cellulari Android. Questa app fornisce all utente la possibilità di effettuare una ricerca sul web pronunciando a voce le parole chiave. Per quanto possa risultare non entusiasmante di per sé, la tecnologia sviluppata per questa prima funzione ha trovato un numero crescente di applicazioni. Dalla versione 2.2 di Android è iniziato il supporto alle Voice Actions, con la possibilità di effettuare una chiamata o mandare una totalmente con la voce; inoltre, in fase sperimentale, è possibile la generazione automatica dei sottotitoli per i video di Youtube (anche se, onestamente, per ora questa beta feature non mostra buoni risultati). In ogni caso è notevole l interesse e lo sforzo di Google per migliorare questa tecnologia ed integrarla in un numero crescente di servizi, dalle parole dello stesso Mike Cohen, a capo della sezione che sviluppa il sistema, l obiettivo a lungo termine è di renderla totalmente onnipresente. Qualunque sia l applicazione, qualunque sia quello che stai cercando di fare con il tuo telefono, vogliamo che tu sia in grado di parlarci. La chiave del funzionamento del sistema di Google, al di là dei modelli e degli algoritmi, risiede nell avere a disposizione enormi centri di calcolo con immense quantità di dati immagazzinate, in grado di fornire materiale per il training e tempi di risposta decisamente rapidi. Il riconoscimento vocale di Google, infatti, avviene nel cloud, cioè l utente registra il parlato e lo invia agli appositi server di Google, che si occupano di elaborare e soddisfare la richiesta restituendo poi i risultati come una lista di frasi possibili abbinate ognuna ad un indice di confidenza. Nell ultimissima versione annunciata di Android, la 4.0, è stata ulteriormente aggiornata la tecnologia del riconoscimento, offrendo all utilizzatore un microfono sempre aperto per un riconoscimento del parlato in streaming. Al di là delle modalità di funzionamento e dell efficacia di questa nuova introduzione, che sono ancora da verificare al momento della stesura di questo elaborato, una cosa è certa: Google sta lavorando molto su questa tecnologia e sicuramente non mancheranno novità interessanti nei prossimi anni. 15

16 3. Lo Standard VoiceXML 3.1. Origine VoiceXML è uno standard basato su XML, sviluppato per creare dialoghi che prevedono sintesi vocale, riconoscimento vocale e di input telefonici, registrazione di parlato e conversazioni ad iniziativa mista. Le origine del VoiceXML risalgono al 1995, anno in cui una divisione di ricerca dell azienda americana AT&T inizia presso i suoi laboratori lo sviluppo di un progetto chiamato Phone Markup Language. Nel frattempo anche Lucent e Motorola sviluppano i propri linguaggi per applicazioni vocali e, in seguito, si aggiungono ulteriori compagnie ognuna intenta a sviluppare un proprio linguaggio. Nel 1998 il World Wide Web Consortium (W3C) organizza una conferenza sui browser vocali, a cui partecipano le aziende già citate, nonché compagnie del calibro di IBM e HP. A seguito di questo incontro viene costituito un forum, comprendente le aziende interessate, per raggruppare gli sforzi di ricerca, con lo scopo di definire un linguaggio standard per creare dialoghi che gli sviluppatori potessero usare per costruire le loro applicazioni vocali. Come base di partenza viene scelto l XML (extensible Markup Language) una tecnologia dalla grande flessibilità che si affermava sempre più in numerosi campi differenti. Nel 2000 viene annunciato al pubblico la prima versione, VoiceXML 1.0, e a breve distanza viene esposto al W3C per essere la base di partenza di un nuovo standard internazionale. Da questo momento i gruppi di lavoro del W3C, grazie al feedback pubblico e delle aziende partecipanti, proseguono l evoluzione di questo linguaggio, arrivando a rilasciare nel 2000 la nuova versione, VoiceXML 2.0, che introduce novità essenziali. Seguono poi rispettivamente nei mesi di Giugno del 2007 e del 2009, le versioni 2.1 e 3.0 che mantengono la retrocompatibilità, aggiungendo nuove estensioni. 16

17 3.2. Tag In un file VoiceXML il primo tag che incontriamo e che si chiude soltanto alla fine del documento è <vxml>. La sua funzione è proprio quella di caratterizzare il nostro file come un VoiceXML e non un XML generico. Gli attributi principali e immancabili sono la versione dello standard che stiamo utilizzando, il namespace con il suo nome e l indicazione della locazione a cui si trova lo schema delle linguaggio. Questi attributi sono importanti per andare a verificare se il file è scritto correttamente e permettono per esempio ad un generico parser XML di lavorare su questo documento che contiene dei propri tag particolari. All interno di questo primo tag trovano posto tutti gli altri, innanzitutto quelli relativi ai dialoghi. Lo standard VoiceXML ne prevede essenzialmente due tipi, <form> e <menu>, entrambi caratterizzati da un attributo identificativo id che serve a riferirsi allo specifico dialogo in ogni parte del documento. Un dialogo di tipo form prevede l interazione con l utente che deve fornire informazioni per riempire un certo numero di campi, può essere utilizzato, ad esempio, per effettuare una prenotazione o inoltrare una richiesta. All inizio della conversazione, generalmente, si vuole dare un benvenuto e una piccola introduzione all utente, questo viene fatto tramite il tag <prompt> che è utilizzato ogni qual volta l applicazione deve generare un output sonoro, sia esso un suono registrato o una frase per il sintetizzatore vocale. L altro tag fondamentale che troviamo all interno del form è <field> che serve proprio a rappresentare i campi di si parlava precedentemente. Ognuno di essi ha un attributo per indicarne il nome e all interno un ulteriore tag <prompt> che viene riprodotto quando l applicazione chiede all utente di riempire quello specifico campo. Un altro importante elemento che troviamo principalmente nei form è costituito dalle grammatiche. Queste sono realizzate attraverso il tag <grammar> e possono essere inserite al livello del dialogo per avere validità per tutta la sua durata o a livello del singolo campo. La loro funzione è quella di specificare che tipo di input ci aspettiamo dall utente, ad esempio un numero per un ipotetico campo età. Le grammatiche a livello di dialogo sono più complesse in quando servono ad intercettare l evento in cui l interlocutore esprime una frase in grado di riempire più campi contemporaneamente, del tipo Voglio ordinare una pizza margherita per le 8. Lo standard VoiceXML supporta delle grammatiche predefinite, come per i numeri, le date, i valori booleani, ma è possibile crearne di personalizzate nella forma Speech Recognition Grammar Specification [SRGS], sempre proposta dal W3C, addirittura mettendo la definizione in un file separato e indicandone la locazione all interno del tag <grammar>. 17

18 L algoritmo che si occupa di interpretare il dialogo (Form Interpretation Algorithm) scorre ogni volta gli elementi del form eseguendo il primo che non è stato marcato come completato. I campi vengono contrassegnati come completati quando l utente fornisce un input valido che rispetti le grammatiche attive. Al termine del dialogo trovano posto dei tag del tipo <submit> e <goto> che servono a direzionare l applicazione alla riproduzione di un nuovo dialogo, il primo dei due invia anche i dati immessi nei campi del form, e <exit> per uscire dall applicazione e ritornare il controllo all interprete. Un dialogo di tipo menu, invece, ha la funzione di offrire all utente delle scelte per decidere in che direzione far andare la conversazione. Una speciale forma di menu è quello DTMF in cui la scelta viene effettuata premendo uno dei tasti del telefono. Anche nel menu si trova generalmente un <prompt> iniziale che si caratterizza per la possibilità di inserire al suo interno un tag <enumerate> che serve ad elencare le scelte disponibili. Ognuna di queste è rappresentata da un tag <choice> il cui contenuto è di default utilizzato nell elencazione generata dal tag <enumerate> e anche dall interprete del dialogo per confrontare l input dell utente e individuare la scelta effettuata. Ad ogni scelta è associato anche un attributo next che serve per indicare il dialogo da riprodurre successivamente se l utente la seleziona. Esiste infine una serie di altri tag più avanzati, come <script>, <var>, <catch>, utilizzati rispettivamente per lanciare l esecuzione di uno script, creare una variabile a cui è possibile riferirsi all interno del dialogo, intercettare eventi, cioè particolari condizioni nella riproduzione del dialogo, come la mancanza di input, o frasi pronunciate dall utente, come una richiesta di aiuto. La lista completa dei tag ovviamente non si esaurisce qui e ognuno di essi possiede attributi aggiuntivi che possono modificare il funzionamento standard. Quanto qui esposto è comunque volto a fornire una comprensione di base del VoiceXML che è sufficiente per il progetto su cui si basa questo elaborato. In ogni caso la specifica completa può essere consultata all indirizzo ufficiale del W3C per questo standard che è grazie alla quale sono stati sviluppati i contenuti di questa sezione. 18

19 3.3. Considerazioni su VoiceXML In questa ultima sezione vogliamo sviluppare alcune considerazioni su VoiceXML, in particolare sul target per cui nasce e la sua conseguente architettura, e illustrare i vantaggi offerti che ci hanno portato a scegliere di inserirlo nel nostro progetto. L architettura di riferimento è mostrata nella figura sottostante. Il Document Server si occupa di fornire i dialoghi all interprete che esegue il suo lavoro all interno di un contesto. L interprete e il suo Context comunicano direttamente con la Implementation Platform che ha il compito di gestire l interazione con l utente. Va ricordato che questo linguaggio nasce inizialmente per sviluppare applicazioni vocali a cui si accede via telefono e, con la seguente cura da parte del W3C, si apre a portali vocali con l aiuto della tecnologia VoIP (Voice over Internet Protocol). Le richieste e l invio dei dati delle form, secondo la specifica del W3C, dovrebbero avvenire attraverso metodi http. Fondamentalmente il modello di interazione è di tipo client-server, in cui gli utilizzatori delle applicazioni vocali si collegano al fornitore di servizi attraverso il telefono o programmi specifici di tipo Voice Browser. In alcuni casi l interprete si trova sul lato server, per ovvi motivi nel caso di accesso da telefono, ma anche per ridurre lo sforzo computazionale a carico dei client nelle altre situazioni. Vediamo infine i principali vantaggi dell utilizzo di VoiceXML: Facilità di scrittura e lettura dei dialoghi essendo un derivato del linguaggio XML Possibilità di creazione grafica con appositi tool Separazione della logica del dialogo dal codice dell applicazione, questo permette una più facile manutenzione e possibilità di cambiare i dialoghi senza riscrivere tutto il codice 19

20 4. L interprete VoiceXML 4.1. Interpreti gratuiti e open-source Per poter utilizzare il linguaggio VoiceXML serve uno specifico programma interprete in grado di analizzare il documento, comprenderne gli elementi e gestire il flusso del dialogo, oltre che relazionarsi con la Implementation Platform per l input e l output vocale. Software di questo tipo sono stati sviluppati da diverse aziende che forniscono la possibilità di acquistare la licenza d uso o di usufruire dei servizi direttamente dai loro server, previo un contratto che prevede un compenso in base al numero utenti serviti. Nel nostro progetto, che ha lo scopo di esplorare le potenzialità dell interazione vocale su smartphone, queste soluzioni ci sono apparse sconvenienti, nonostante alcune di esse offrano brevi periodi di prova gratuiti. Quello che ci è sembrato ideale per la nostra applicazione è un interprete gratuito, che si possa integrare bene con un programma Java, possibilmente open-source per poterne comprendere meglio il funzionamento, effettuare più facilmente eventuali modifiche per il porting su Android e realizzare il collegamento con il riconoscimento vocale e il sintetizzatore forniti dal sistema. Con una breve ricerca è stato possibile trovare un progetto che corrispondeva esattamente a tutte queste caratteristiche, un interprete open-source totalmente scritto in Java: JVoiceXML. Questo progetto è stato avviato da Dirk Schnelle-Walka nel 2005 durante il suo dottorato presso la Technical University di Darmstadt (Germania), il cui obiettivo era di utilizzare interfacce vocali, tra cui VoiceXML, in ambienti intelligenti ; la necessità di realizzare un interprete nasceva dal fatto che i sistemi commerciali disponibili al momento erano troppo costosi per un istituto di ricerca e quelli gratuiti supportavano solo l accesso via telefono. Negli anni successivi nuovi membri si sono aggiunti al progetto, occupandosi, per interesse o per scopi accademici, quali tesi di laurea o master, delle differenti sezioni, dal processore per le grammatiche alle librerie per i tag VoiceXML. JVoiceXML è rilasciato sotto la licenza GNU Library General Public License, è attivo e in sviluppo al momento della stesura di questo elaborato e le persone che se ne occupano cercano di renderlo sempre più conforme alle specifiche del W3C. Purtroppo il suo utilizzo nella nostra applicazione non si è rivelato semplice come inizialmente sperato. 20

21 Una volta acquisite le informazioni sul progetto abbiamo deciso di effettuare dei test su i nostri pc prima di tentare di portarlo su Android. Qui sono iniziati i problemi perché si tratta di un progetto piuttosto vasto e complesso che richiede precise configurazioni. I tentativi effettuati, in parallelo su due macchine diverse una Windows e una Linux, hanno compreso diverse installazioni con più o meno implementazioni aggiuntive per la sintesi e il riconoscimento, la modifica delle variabili d ambiente del sistema, dei file di configurazione nelle cartelle del progetto, il debug passo passo cercando di interpretare le eccezioni riportate sulla console al lancio. Dopo più di una settimana di prove siamo giunti a delle considerazioni che ci hanno portato a desistere: L architettura di JVoiceXML prevede che l interprete venga lanciato come un servizio e che le applicazioni, che ne hanno bisogno e girano su altre JVM, accedano in remoto grazie alla Java Naming and Directory Interface e al protocollo di Remote Method Invocation. Questo modello si rivela un po troppo elaborato per il nostro progetto che è idealmente costituito da un unica applicazione che ingloba al suo interno un modulo per l interprete. Potrebbe inoltre sorgere un ulteriore problema poiché le librerie per queste tecniche di accesso sono piuttosto avanzate e non è detto che siano supportate dalla piattaforma Java presente su Android che ricordiamo essere diversa dalla Java SE. Proprio durante lo svolgimento del tirocinio siamo venuti a conoscenza della nascita di un progetto di porting su Android a cura dello stesso team che si occupa dell originale; ci è sembrato più opportuno evitare di investire ulteriori risorse nel cercare di effettuare un nostro porting, attendendo che il lavoro degli sviluppatori arrivi ad uno stadio maturo per poterlo integrare nella nostra applicazione. 21

22 Il porting in questione ha pochi mesi di vita ed è consultabile all indirizzo Dopo aver ricercato altre soluzioni adatte al nostro caso, senza successo, volevamo comunque arrivare a produrre un applicazione capace di dialogo senza rinunciare al VoiceXML. Per questo abbiamo deciso di realizzare un nostro semplice interprete Il parsing Il primo passo per lavorare con un file xml è quello di effettuarne il parsing. Questa operazione consiste nell analizzare il file, che è di base una sequenza di caratteri, e individuare gli elementi (tag), i loro attributi e la struttura gerarchica in cui sono ordinati. Il risultato di questa analisi è diverso a seconda dell approccio che decidiamo di utilizzare e ne esistono fondamentalmente due tipologie, SAX e DOM. Un parser SAX (Simple Api for Xml) è di tipo event-driven: ogni qual volta incontra un tag genera un evento che deve essere intercettato; è presente un gestore di default (default-handler) che può essere esteso (e generalmente questo è indispensabile) per effettuare azioni specifiche a seconda del tag incontrato. Questo tipo di approccio è piuttosto difficile da gestire perché bisogna sostanzialmente implementare un metodo per ogni differente azione che vogliamo eseguire e ognuno di questi gestori di eventi va registrato nel parser. Il vantaggio è dato dalla velocità e poca memoria richiesta, ma non è possibile lavorare sul documento in toto, è possibile farlo solo sequenzialmente tag per tag. L altro modello a disposizione è DOM (Document Object Model), una specifica del W3C ormai consolidata al punto che il gruppo di lavoro relativo è stato chiuso nel DOM è un interfaccia indipendente dalla piattaforma e dal linguaggio per permettere a programmi e script di accedere e modificare contenuto, struttura e stile dei documenti, nel nostro caso file xml. Sostanzialmente il documento viene rappresentato come un albero che rispecchia la struttura gerarchica del file ed è possibile accedere ad ognuno dei nodi, modificarlo, cancellarlo o crearne uno nuovo. Questa tecnica permette di lavorare più facilmente con il file xml perché abbiamo una sua rappresentazione completa accessibile in ogni parte, con un prezzo da pagare in una velocità di parsing inferiore e una maggiore occupazione di memoria. Vista la maggiore vicinanza con lo stile di programmazione Java che è ad oggetti abbiamo deciso di adottare questo secondo modello, considerando che nelle librerie standard di Java è incluso il parser 22

23 Xerces di Apache, che è in grado sia di generare eventi SAX sia di produrre un albero DOM, e i package org.xml.sax e org.w3c.dom per utilizzare entrambi gli approcci. Lavorando con questo modello ci siamo resi conto di alcune limitazioni dovute alla neutralità rispetto al linguaggio di questa specifica, che può essere implementata anche in linguaggi non ad oggetti; per citarne alcune la possibilità di effettuare ricerche selettive solo dal nodo radice, la presenza di tantissimi nodi vuoti che si incontrano navigando l albero, il testo compreso in un tag non memorizzato all interno del nodo che rappresenta l elemento ma in un nodo figlio a parte. Il risultato è che gli algoritmi scritti per navigare l albero ed estrarre le informazioni desiderate risultano più complessi e contorti di quando sarebbe necessario con una struttura più pulita e che sfrutti appieno le potenzialità di Java. Fortunatamente non siamo i soli ad aver fatto queste considerazioni, infatti da esse ed altre sull implementazione Java di DOM, è nato nel 2000 il progetto JDOM, che è disponibile con una licenza open-source in stile Apache e consiste in una libreria specifica per Java per operare con file xml. Il progetto non costituisce un implementazione di DOM, anche se si può interfacciare sia con oggetti di quel tipo che con sequenze di eventi SAX, ma piuttosto un alternativa che va incontro alle aspettative e al modo di pensare dei programmatori Java, offrendo loro numerose funzioni utili, oggetti che fanno uso della classi standard Java per le collezioni e risulta alla fine molto più comoda. Per questi motivi abbiamo deciso di utilizzarla nel nostro interprete e ne abbiamo tratto notevoli vantaggi in fase di sviluppo. Una volta creato l oggetto JDOM che rappresenta il file xml, l interprete, tramite apposite funzioni, che estrapolano le informazioni contenute nei vari nodi, genera ulteriori oggetti java con i quali effettua poi la riproduzione dei dialoghi. Struttura e funzionamento dell interprete sono descritti nel capitolo successivo, mentre nell appendice A trova posto il codice dell interprete che contiene anche le funzioni relative al parsing, tutte definite static; in particolare nella classe Vxml si trovano parsefile che è la funzione in cui viene creato il parser e sono effettuate le prime operazioni per ottenere un oggetto JDOM passando prima attaverso un oggetto DOM, parsedoc che viene richiamata dalla precedente per lavorare sull oggetto appena ottenuto, parseform e parsemenu che si occupano di generare gli oggetti che rappresentano i dialoghi delle due differenti tipologie. 23

24 4.3. VxmlInterpreter L obiettivo del nostro interprete è quello di riprodurre dialoghi semplici, senza funzioni avanzate. Per questo ci siamo limitati a supportare i tag principali (quelli in più eventualmente presenti non creano problemi venendo semplicemente ignorati), una struttura in cui i dialoghi sono tutti in uno stesso file xml, niente grammatiche perché sarebbe stato necessario un ulteriore modulo apposito per processarle. Il package realizzato è vxmlinterpreter, che contiene al suo interno diverse classi, per la cui comprensione può risultare utile consultare il diagramma delle classi presente nell appendice A. La classe principale è Vxml, che, oltre ad esporre le funzioni per il parsing come metodi statici, funge anche da contenitore per i dialoghi, che sono inseriti in una struttura HashMap con l id dei dialoghi a fare da chiave. Un istanza di questa classe rappresenta a tutti gli effetti l interprete, espone infatti la funzione playdialog() che avvia la riproduzione del primo dialogo trovato nel file xml e una sua versione in overload che accetta come argomento l id del dialogo da cui iniziare. Come si può vedere dall architettura del VoiceXML discussa nel capitolo 3, l interprete non interagisce direttamente con l utente, ma lo fa comunicando con la Implementation Platform. Nella nostra implementazione questo modello è realizzato utilizzando l interfaccia SpeechPlatform, che prevede sostanzialmente tre metodi da implementare, uno per riprodurre l output, uno per ottenere l input (in cui va eseguito anche l eventuale il riconoscimento vocale) e un ultimo per l invio dei dati ottenuti dai form. Nel package è presente la classe Utils che fornisce un implementazione banale di questa interfaccia, basata su I/O testuale da console, utilizzata nella fase di sviluppo dell interprete avvenuta separatamente dall applicazione Android. Un istanza di Utils è automaticamente assegnata al campo platform_ dell oggetto Vxml in fase di inizializzazione, ma è possibile specificare una piattaforma diversa con il metodo setplatform(speechplatform platform). Ulteriori elementi presenti in Vxml e alcune particolarità dei metodi, qui non descritti, derivano da un problema di sincronizzazione di cui si discute nel capitolo successivo. La rappresentazione dei dialoghi è basata sulla classe astratta Dialog, che espone il metodo astratto play(), richiamato dall oggetto Vxml nella funzione playdialog(). La gestione di come effettuare la riproduzione è quindi delegata dall interprete ai dialoghi, questo per poter differenziare la logica dei form da quella dei menu e perché in questo modo l accesso alle informazioni necessarie richiede meno passaggi. Questa soluzione pone tuttavia un problema nell effettuare operazioni di I/O che i dialoghi non possono svolgere autonomamente dovendo passare attraverso l oggetto Vxml, perciò ogni dialogo ha bisogno del riferimento all interprete, memorizzato nel campo voiceapplication_ e 24

25 impostabile con il metodo setinterpreter (Vxml interpreter). La funzione play() ha un valore di ritorno di tipo stringa che rappresenta l id del dialogo successivo da eseguire, in caso di stringa vuota (non un riferimento nullo, ma una stringa di zero caratteri) l esecuzione termina. La classe Dialog contiene anche il campo id e un valore di default da assegnare ad esso nel caso non sia specificato l attributo id del dialogo nel file xml. L implementazione del metodo play() è fornita dalle classi Menu e Form che ereditano da Dialog e segue le due logiche differenti di interazione spiegate nel capitolo 3, cioè una lista di elementi da riprodurre e contrassegnare come completati per il form e una scelta da individuare per direzionare al dialogo successivo nel caso di un menu. Gli elementi all interno dei dialoghi sono modellati dalla classe astratta Item che si specializza in Command, Prompt, Field, Choice. L attributo abstract assegnato in questo caso alla classe non è dovuto tanto a ragioni tecniche quali metodi non implementati, ma è motivata dalla non esistenza di oggetti Item non specializzati. Riguardo le classi figlie, Prompt, Field e Choice sono una rappresentazione abbastanza fedele, con qualche semplificazione, degli omonimi tag. Command raggruppa invece i vari <goto>, <submit>, <exit> che prevedono un passaggio da un dialogo ad un altro con eventuale invio dei dati. 25

26 5. Realizzazione dell applicazione 5.1. Il primo prototipo La prima fase del tirocinio su Android è stata dedicata all acquisire conoscenze sul sistema, su come si sviluppano applicazioni, facendo le prime prove che partono dal classico Hello World per prendere praticità con gli strumenti e l ambiente. Una volta apprese le basi ci siamo dedicati all obiettivo specifico del nostro progetto, cioè fare uso del riconoscimento vocale e del sintetizzatore. Il primo traguardo che abbiamo fissato è stato quello di realizzare un applicazione pappagallo con una semplicissima interfaccia, un bottone espanso a tutto schermo con un immagine di sfondo per renderlo più presentabile. Il funzionamento è il seguente: al click sul bottone (qualsiasi punto della schermata in pratica va bene) compare un breve messaggio di avviso, viene lanciato il riconoscimento, si prende come risultato la stringa con il punteggio di confidenza più alto e questa viene inviata al sintetizzatore per la riproduzione. Il passaggio più importante è di creare l Intent per l attività di riconoscimento, con l istruzione Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), a cui vanno aggiunte ulteriori opzioni tramite il medoto intent.putextra( ). A questo punto si può lanciare l activity che effettua il riconoscimento nel modo già descritto nel capitolo 1, cioè con il metodo startactivityforresult(intent intent, Int codice_riconoscimento). Per quanto riguarda la ricezione dei risultati, nel metodo onactivityresult() è presente un istruzione del tipo mresult=data.getstringarraylistextra(recognizerintent.extra_results).get(0), che serve ad ottenere in primo luogo un ArrayList di String che rappresenta tutti i risultati e poi selezionarne il primo elemento. L interazione con il sintetizzatore si rivela lievemente più semplice, in quanto le librerie di Android già dalla versione utilizzata nel nostro progetto, contengono la classe TextToSpeech che permette di istanziare e inizializzare un sintetizzatore, nel nostro caso questo viene fatto all interno di oncreate(), e di inviare ad esso le stringhe da sintetizzare con il metodo speak(). Va rilevato che, nonostante le apparenze, anche la sintesi vocale viene effettuata al di fuori della nostra activity, è infatti possibile avviare il sintetizzatore in modo simile a quanto fatto per il riconoscimento ottenendo lo stesso effetto. La classe TextToSpeech serve quindi a mascherare il funzionamento interno e semplificarne l utilizzo per lo sviluppatore di applicazioni, in perfetta linea con i principi della programmazione ad oggetti. In versioni successive delle librerie è presente una 26

27 classe analoga per il riconoscimento, il cui utilizzo rimane comunque più complicato di quello del sintetizzatore, per cui abbiamo deciso di mantenere il codice originale. Anche in questa prima fase non sono mancati i problemi: in particolare sul sitema Android pulito del device virtuale non vi è installata di default un applicazione in grado di effettuare il riconoscimento, per cui è stato necessario reperire un file apk e procedere all installazione sul dispositivo emulato tramite il tool adb fornito con l sdk di Android. Nonostante questo, all avvio del riconoscimento si è presentato un problema audio, che dopo un alcune ricerche e tentativi di debugging, sembra dovuto all impossibilità da parte dell emulatore di interfacciarsi con successo al microfono del pc, per cui abbiamo dovuto rinunciare alla possibilità di effettuare il testing sull avd e provare installando l applicazione su un dispositivo reale. Questo è uno dei motivi per cui poi lo sviluppo dell interprete, discusso nel capitolo precedente, è avvenuto in un package separato ed indipendente, anche per una maggiore velocità nell effettuare i test e mantenere separati i blocchi funzionali. Il primo prototipo è stato comunque un successo che ci ha spinto a dedicarci alla gestione della logica dei dialoghi con VoiceXML, di cui si è parlato nei capitoli 3 e 4, e infine all integrare i vari moduli per realizzare il prodotto completo. 27

28 5.2. App finale L ultimo passo del progetto è stato di inserire l interprete VoiceXML da noi realizzato all interno dell activity. Per fare questo abbiamo importato il package vxmlinterpreter nel progetto Android e aggiunto la clausola per implementare l interfaccia SpeechPlatform nella nostra activity. Abbiamo quindi inserito il codice precedentemente sviluppato per il riconoscimento e la sintesi vocale all interno dei metodi input() e output() e implementato sendresults() per concatenare i risultati dei form in un unica stringa. Poiché l unica parte del codice in cui è possibile ricevere i risultati del riconoscimento è il metodo onactivityresult(), si è reso necessario limitare la funzione input() all effettuare solo una richiesta di riconoscimento e aggiungere un metodo setinput() all interprete per comunicare che il riconoscimento è avvenuto e inviarne il risultato. L interfaccia è stata aggiornata e prevede una casella di testo editabile, sei differenti bottoni per svolgere le seguenti funzioni: effettuare un riconoscimento, sintetizzare la stringa presente nella casella di testo, riprodurre tre differenti dialoghi d esempio salvati su differenti file xml, l ordinazione di una pizza, un sondaggio di sport ed un esempio di applicazione di supporto all anziano; l ultimo bottone serve ad aggiornare la casella di testo dopo la riproduzione di un dialogo, questo perché si è rivelato necessario eseguire l interprete come un thread separato e Android impedisce l aggiornamento dell interfaccia grafica da thread differenti da quello principale dell activity (UIThread). Esistono dei metodi per eseguire questa operazione in modo più elegante senza richiedere un interazione da parte dell utente ma per il nostro progetto abbiamo preferito utilizzare questa soluzione più semplice. La trasformazione dell oggetto Vxml in un thread è stata una scelta obbligata per un problema di sincronizzazione: l esecuzione dell activity principale non viene interrotta per la sintesi del parlato, che avviene in background senza che un nuovo componente debba prendere posto sulla schermata del cellulare, né per il riconoscimento, che, pur prevedendo un componente grafico da visualizzare all utente, non blocca immediatamente il thread dell activity. Ricordiamo che il sistema Android è multiprogrammato in grado di eseguire più thread contemporaneamente, benché lo stato delle attività non visibili sia in sospeso. Gli effetti negativi causati da questo comportamento sono l avvio del riconoscimento mentre è ancora in corso la riproduzione da parte del sintetizzatore e anche sovrapposizioni, troncamenti o inversioni dell output. La soluzione iniziale prevedeva di bloccare l activity o impegnarla in un ciclo di busy waiting ad ogni operazione di riconoscimento o sintesi, fino al loro termine, che nel caso della sintesi può essere controllato con il metodo isspeaking() dell oggetto TextToSpeech. Questa tecnica porta il sistema Android a sollevare un application error: application not 28

29 responding, infatti il thread dell activity non può essere bloccato o impegnato in alcuna operazione che duri più di pochi secondi, deve essere sempre libero per ricevere segnalazioni di eventi da parte del sistema, in particolare le interazione dell utente. Abbiamo quindi modificato la classe Vxml per estendere la classe Thread che fornisce un metodo start() per avviarlo, nella nostra applicazione è invocato quando viene premuto uno dei bottoni corrispondenti ai dialoghi. La sincronizzazione avviene nel seguente modo: quando il thread dell interprete deve effettuare una sintesi testa il valore della variabile speaking_ dell activity che indica se è in corso una sintesi o meno, se il valore è false prosegue, altrimenti aspetta 100 millisecondi; se procede mette a true la variabile, invia il testo al sintetizzatore e effettua un ciclo di attese di 100 ms, testando il metodo isspeaking() dell oggetto TextToSpeech, fino alla fine della riproduzione; per quanto riguarda il riconoscimento si replica il test sulla variabile speaking_ dell activity, se procede, l interprete mette una propria variabile waiting_ a true ed effettua un ciclo di attese di 100 ms su di essa; la variabile waiting_ dell interprete viene messa a false dall activity, dopo che ha ricevuto e inviato il risultato del riconoscimento. Può essere utile, per una rappresentazione visiva dell esecuzione, consultare il diagramma di sequenza riportato nell appendice A. Questa soluzione minimizza il codice eseguito dal thread dell activity, anche se non è possibile sfuggire dal metodo di callback onactivityresult(). Nel codice finale dell activity, riportato nell appendice B, anche per la prova di semplice riconoscimento, avviata dal bottone rappresentato da un microfono, viene lanciato un thread separato della classe Vxml_Thread realizzata per effettuare i primi test di sincronizzazione nella fase di sviluppo. 29

30 6. Conclusioni L applicazione finale è stata realizzata e testata con successo, è possibile anche vedere il video di un esempio di utilizzo disponibile sul canale youtube dell università (l indirizzo per visualizzarlo al momento è L esperienza di questo progetto è stata indubbiamente positiva e ciò è influenzato da diversi fattori che andiamo qui ad illustrare. In primo luogo iniziare a sviluppare applicazioni android è reso semplice sia dalla bontà della documentazione ufficiale sia dalla community attiva e disponibile, ma è anche interessante e non mancano le sfide quando si vuole approfondire e realizzare cose più complesse. Le funzioni di riconoscimento e sintesi sono di discreto livello, considerando la possibilità di averle su uno smartphone; c è da dire, però, che queste tecnologie hanno ancora tanta strada davanti per riuscire a supportare un dialogo veramente naturale. Lo standard VoiceXML si è rivelato utile ai nostri scopi, anche nell ottica di generalizzare il progetto come abbiamo voluto mostrare con i tre dialoghi disponibili; questo linguaggio offre tantissime funzioni, quasi troppe, che però devono essere supportate dall interprete, per non rimanere solo sulla carta. L unica parte da valutare negativamente è quella relativa ai problemi inattesi con l interprete VoiceXML, che ci hanno sottratto diverso tempo e impedito di realizzare un applicazione più significativa di un semplice prototipo d esempio. In effetti uno degli sviluppi futuri di questo lavoro sarebbe proprio quello di sviluppare un applicazione vocale mirata ad uno scopo specifico, come potrebbe essere il supporto all anziano. Per quanto sia più recente, una piattaforma smartphone offre una maggiore mobilità e anche facilità di utilizzo grazie al touchscreen rispetto ad una tradizionale postazione pc. Fare ciò richiederebbe sicuramente di integrare nel progetto un vero interprete VoiceXML, ad esempio il porting di JVoiceXML, ma buona parte delle conoscenze e dei moduli sviluppati per questo lavoro potrebbero essere riutilizzati. Siamo infine certi che, viste anche le risorse investite da grandi aziende come Google, il campo delle applicazioni vocali avrà un notevole sviluppo nei prossimi anni e questa esperienza ci ha permesso di effettuare una prima esplorazione delle tecnologie disponibili e delle loro potenzialità. 30

31 Appendice A Diagramma delle classi 31

32 Diagramma di sequenza 32

How to Develop Accessible Linux Applications

How to Develop Accessible Linux Applications How to Develop Accessible Linux Applications Sharon Snider Copyright 2002 IBM Corporation v1.1, 2002-05-03 Diario delle Revisioni Revisione v1.1 2002-05-03 Revisionato da: sds Convertito in DocBook XML

Dettagli

FileMaker Server 12. Guida introduttiva

FileMaker Server 12. Guida introduttiva FileMaker Server 12 Guida introduttiva 2007 2012 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 FileMaker e Bento sono marchi di FileMaker,

Dettagli

MATRICE DELLE FUNZIONI DI DRAGON NATURALLYSPEAKING 12 CONFRONTO TRA EDIZIONI DEL PRODOTTO

MATRICE DELLE FUNZIONI DI DRAGON NATURALLYSPEAKING 12 CONFRONTO TRA EDIZIONI DEL PRODOTTO MATRICE DELLE FUNZIONI DI DRAGON NATURALLYSPEAKING 12 CONFRONTO TRA EDIZIONI DEL PRODOTTO Precisione del riconoscimento Velocità di riconoscimento Configurazione del sistema Correzione Regolazione della

Dettagli

Talento LAB 4.1 - UTILIZZARE FTP (FILE TRANSFER PROTOCOL) L'UTILIZZO DI ALTRI SERVIZI INTERNET. In questa lezione imparerete a:

Talento LAB 4.1 - UTILIZZARE FTP (FILE TRANSFER PROTOCOL) L'UTILIZZO DI ALTRI SERVIZI INTERNET. In questa lezione imparerete a: Lab 4.1 Utilizzare FTP (File Tranfer Protocol) LAB 4.1 - UTILIZZARE FTP (FILE TRANSFER PROTOCOL) In questa lezione imparerete a: Utilizzare altri servizi Internet, Collegarsi al servizio Telnet, Accedere

Dettagli

Introduzione ad Access

Introduzione ad Access Introduzione ad Access Luca Bortolussi Dipartimento di Matematica e Informatica Università degli studi di Trieste Access E un programma di gestione di database (DBMS) Access offre: un supporto transazionale

Dettagli

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO...

Modulo. Programmiamo in Pascal. Unità didattiche COSA IMPAREREMO... Modulo A Programmiamo in Pascal Unità didattiche 1. Installiamo il Dev-Pascal 2. Il programma e le variabili 3. Input dei dati 4. Utilizziamo gli operatori matematici e commentiamo il codice COSA IMPAREREMO...

Dettagli

Boot Camp Guida all installazione e alla configurazione

Boot Camp Guida all installazione e alla configurazione Boot Camp Guida all installazione e alla configurazione Indice 4 Introduzione 5 Cosa ti occorre 6 Panoramica dell installazione 6 Passo 1: verifica la presenza di aggiornamenti. 6 Passo 2: apri Assistente

Dettagli

Funzioni di base. Manualino OE6. Outlook Express 6

Funzioni di base. Manualino OE6. Outlook Express 6 Manualino OE6 Microsoft Outlook Express 6 Outlook Express 6 è un programma, incluso nel browser di Microsoft Internet Explorer, che ci permette di inviare e ricevere messaggi di posta elettronica. È gratuito,

Dettagli

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. "Generate debugging information"

FASE DEBUGGING: Compiler Linker. controllando che la voce Genera le informazioni per il debug cioè. Generate debugging information FASE DEBUGGING: Prima della compilazione, si devono inserire 1 nel progetto informazioni per il debug cioè si devono visualizzare le opzioni di progetto seguendo il percorso: controllando che la voce Genera

Dettagli

Analisi dei requisiti e casi d uso

Analisi dei requisiti e casi d uso Analisi dei requisiti e casi d uso Indice 1 Introduzione 2 1.1 Terminologia........................... 2 2 Modello della Web Application 5 3 Struttura della web Application 6 4 Casi di utilizzo della Web

Dettagli

MINI GUIDA SINTETICA per l uso della lavagna interattiva multimediale

MINI GUIDA SINTETICA per l uso della lavagna interattiva multimediale MINI GUIDA SINTETICA per l uso della lavagna interattiva multimediale InterWrite SchoolBoard è un software per lavagna elettronica di facile utilizzo. Può essere adoperata anche da studenti diversamente

Dettagli

Informatica per la comunicazione" - lezione 9 -

Informatica per la comunicazione - lezione 9 - Informatica per la comunicazione" - lezione 9 - Protocolli di livello intermedio:" TCP/IP" IP: Internet Protocol" E il protocollo che viene seguito per trasmettere un pacchetto da un host a un altro, in

Dettagli

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma

Dev C++ Prerequisiti. Note di utilizzo. Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma Dev C++ Note di utilizzo 1 Prerequisiti Utilizzo di Windows Effettuare il download da Internet Compilazione di un programma 2 1 Introduzione Lo scopo di queste note è quello di diffondere la conoscenza

Dettagli

Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore)

Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore) Manuale d uso Apache OpenMeetings (Manuale Utente + Manuale Amministratore) Autore: Matteo Veroni Email: matver87@gmail.com Sito web: matteoveroni@altervista.org Fonti consultate: http://openmeetings.apache.org/

Dettagli

Introduzione alla Programmazione ad Oggetti in C++

Introduzione alla Programmazione ad Oggetti in C++ Introduzione alla Programmazione ad Oggetti in C++ Lezione 1 Cosa è la Programmazione Orientata agli Oggetti Metodologia per costruire prodotti software di grosse dimensioni che siano affidabili e facilmente

Dettagli

Configurazioni Mobile Connect

Configurazioni Mobile Connect Mailconnect Mail.2 L EVOLUZIONE DELLA POSTA ELETTRONICA Configurazioni Mobile Connect iphone MOBILE CONNECT CONFIGURAZIONE MOBILE CONNECT PER IPHONE CONFIGURAZIONE IMAP PER IPHONE RUBRICA CONTATTI E IPHONE

Dettagli

TeamViewer 8 Manuale Meeting

TeamViewer 8 Manuale Meeting TeamViewer 8 Manuale Meeting Rev 8.0-12/2012 TeamViewer GmbH Kuhnbergstraße 16 D-73037 Göppingen www.teamviewer.com Indice 1 Informazioni su TeamViewer... 5 1.1 Informazioni sul software... 5 1.2 Informazioni

Dettagli

Elementi di Informatica e Programmazione

Elementi di Informatica e Programmazione Elementi di Informatica e Programmazione Le Reti di Calcolatori (parte 2) Corsi di Laurea in: Ingegneria Civile Ingegneria per l Ambiente e il Territorio Università degli Studi di Brescia Docente: Daniela

Dettagli

Guida all'installazione ed uso dell'app RXCamLink

Guida all'installazione ed uso dell'app RXCamLink Guida all'installazione ed uso dell'app RXCamLink Questa guida riporta i passi relativi all'installazione ed all'utilizzo dell'app "RxCamLink" per il collegamento remoto in mobilità a sistemi TVCC basati

Dettagli

BPEL: Business Process Execution Language

BPEL: Business Process Execution Language Ingegneria dei processi aziendali BPEL: Business Process Execution Language Ghilardi Dario 753708 Manenti Andrea 755454 Docente: Prof. Ernesto Damiani BPEL - definizione Business Process Execution Language

Dettagli

Seagate Access per Personal Cloud Manuale utente

Seagate Access per Personal Cloud Manuale utente Seagate Access per Personal Cloud Manuale utente 2015 Seagate Technology LLC. Tutti i diritti riservati. Seagate, Seagate Technology, il logo Wave e FreeAgent sono marchi depositati o marchi registrati

Dettagli

AUL22: FactoryTalk View SE Scoprite i vantaggi chiave di una soluzione SCADA integrata

AUL22: FactoryTalk View SE Scoprite i vantaggi chiave di una soluzione SCADA integrata AUL22: FactoryTalk View SE Scoprite i vantaggi chiave di una soluzione SCADA integrata Giampiero Carboni Davide Travaglia David Board Rev 5058-CO900C Interfaccia operatore a livello di sito FactoryTalk

Dettagli

APPLICAZIONE WEB PER LA GESTIONE DELLE RICHIESTE DI ACQUISTO DEL MATERIALE INFORMATICO. Francesco Marchione e Dario Richichi

APPLICAZIONE WEB PER LA GESTIONE DELLE RICHIESTE DI ACQUISTO DEL MATERIALE INFORMATICO. Francesco Marchione e Dario Richichi APPLICAZIONE WEB PER LA GESTIONE DELLE RICHIESTE DI ACQUISTO DEL MATERIALE INFORMATICO Francesco Marchione e Dario Richichi Istituto Nazionale di Geofisica e Vulcanologia Sezione di Palermo Indice Introduzione...

Dettagli

WEB Conference, mini howto

WEB Conference, mini howto Prerequisiti: WEB Conference, mini howto Per potersi collegare o creare una web conference è necessario: 1) Avere un pc con sistema operativo Windows XP o vista (windows 7 non e' ancora certificato ma

Dettagli

Introduzione a Puppy Linux: installazione su una chiavetta USB

Introduzione a Puppy Linux: installazione su una chiavetta USB Introduzione a Puppy Linux: installazione su una chiavetta USB Alex Gotev 1 Contenuti Che cos'è Puppy Linux? Come posso averlo? Come si avvia? Che programmi include? Installazione su Chiavetta USB Domande

Dettagli

Alb@conference GO e Web Tools

Alb@conference GO e Web Tools Alb@conference GO e Web Tools Crea riunioni virtuali sempre più efficaci Strumenti Web di Alb@conference GO Guida Utente Avanzata Alb@conference GO Per partecipare ad un audioconferenza online con Alb@conference

Dettagli

Internet Internet è universalmente nota come la Rete delle reti: un insieme smisurato di computer collegati tra loro per scambiarsi dati e servizi.

Internet Internet è universalmente nota come la Rete delle reti: un insieme smisurato di computer collegati tra loro per scambiarsi dati e servizi. Internet Internet è universalmente nota come la Rete delle reti: un insieme smisurato di computer collegati tra loro per scambiarsi dati e servizi. Internet: la rete delle reti Alberto Ferrari Connessioni

Dettagli

Meetecho s.r.l. Web Conferencing and Collaboration tools. Guida all installazione e all uso di Meetecho beta

Meetecho s.r.l. Web Conferencing and Collaboration tools. Guida all installazione e all uso di Meetecho beta Web Conferencing and Collaboration tools Passo 1: registrazione presso il sito Accedere al sito www.meetecho.com e registrarsi tramite l apposito form presente nella sezione Reserved Area. In fase di registrazione

Dettagli

INSTALLAZIONE E UTILIZZO DEL COMPILATORE Code::Blocks 8.02

INSTALLAZIONE E UTILIZZO DEL COMPILATORE Code::Blocks 8.02 INSTALLAZIONE E UTILIZZO DEL COMPILATORE Code::Blocks 8.02 Download Si può scaricare gratuitamente la versione per il proprio sistema operativo (Windows, MacOS, Linux) dal sito: http://www.codeblocks.org

Dettagli

Le Reti Informatiche

Le Reti Informatiche Le Reti Informatiche modulo 10 Prof. Salvatore Rosta www.byteman.it s.rosta@byteman.it 1 Nomenclatura: 1 La rappresentazione di uno schema richiede una serie di abbreviazioni per i vari componenti. Seguiremo

Dettagli

TeamViewer 7 Manuale Controllo remoto

TeamViewer 7 Manuale Controllo remoto TeamViewer 7 Manuale Controllo remoto TeamViewer GmbH Kuhnbergstraße 16 D-73037 Göppingen teamviewer.com Indice 1 Informazioni su TeamViewer... 5 1.1 Informazioni sul software... 5 1.2 Informazioni sul

Dettagli

Strumenti 3D per SMART Notebook 11.1. Manuale dell'utente

Strumenti 3D per SMART Notebook 11.1. Manuale dell'utente Strumenti 3D per SMART Notebook 11.1 Manuale dell'utente Registrazione del prodotto Se si registra il prodotto SMART, si verrà informati delle nuove funzionalità e aggiornamenti software disponibili. Registrazione

Dettagli

Software 2. Classificazione del software. Software di sistema

Software 2. Classificazione del software. Software di sistema Software 2 Insieme di istruzioni e programmi che consentono il funzionamento del computer Il software indica all hardware quali sono le operazioni da eseguire per svolgere determinati compiti Valore spesso

Dettagli

GUIDA ALL INSTALLAZIONE

GUIDA ALL INSTALLAZIONE GUIDA ALL INSTALLAZIONE INTRODUZIONE BENVENUTO Benvenuto in SPARK XL l applicazione TC WORKS dedicata al processamento, all editing e alla masterizzazione di segnali audio digitali. Il design di nuova

Dettagli

Guida ai Servizi Internet per il Referente Aziendale

Guida ai Servizi Internet per il Referente Aziendale Guida ai Servizi Internet per il Referente Aziendale Indice Indice Introduzione...3 Guida al primo accesso...3 Accessi successivi...5 Amministrazione dei servizi avanzati (VAS)...6 Attivazione dei VAS...7

Dettagli

CHIAVETTA INTERNET ONDA MT503HSA

CHIAVETTA INTERNET ONDA MT503HSA CHIAVETTA INTERNET ONDA MT503HSA Manuale Utente Linux Debian, Fedora, Ubuntu www.ondacommunication.com Chiavet ta Internet MT503HSA Guida rapida sistema operativo LINUX V 1.1 33080, Roveredo in Piano (PN)

Dettagli

CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA

CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA CATTURARE LO SCHERMO INTERO O LA FINESTRA ATTIVA Supponiamo di voler eseguire una istantanea del nostro desktop, quella che in gergo si chiama Screenshot (da screen, schermo, e shot, scatto fotografico).

Dettagli

Rational Asset Manager, versione 7.1

Rational Asset Manager, versione 7.1 Rational Asset Manager, versione 7.1 Versione 7.1 Guida all installazione Rational Asset Manager, versione 7.1 Versione 7.1 Guida all installazione Note Prima di utilizzare queste informazioni e il prodotto

Dettagli

Cross Software ltd Malta Pro.Sy.T Srl. Il gestionale come l'avete sempre sognato... Pag. 1

Cross Software ltd Malta Pro.Sy.T Srl. Il gestionale come l'avete sempre sognato... Pag. 1 Il gestionale come l'avete sempre sognato... Pag. 1 Le funzionalità di X-Cross La sofisticata tecnologia di CrossModel, oltre a permettere di lavorare in Internet come nel proprio ufficio e ad avere una

Dettagli

AOT Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Unified Process. Prof. Agostino Poggi

AOT Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma. Unified Process. Prof. Agostino Poggi AOT Lab Dipartimento di Ingegneria dell Informazione Università degli Studi di Parma Unified Process Prof. Agostino Poggi Unified Process Unified Software Development Process (USDP), comunemente chiamato

Dettagli

Guida introduttiva. Installazione di Rosetta Stone

Guida introduttiva. Installazione di Rosetta Stone A Installazione di Rosetta Stone Windows: Inserire il CD-ROM dell'applicazione Rosetta Stone. Selezionare la lingua dell'interfaccia utente. 4 5 Seguire i suggerimenti per continuare l'installazione. Selezionare

Dettagli

SISSI IN RETE. Quick Reference guide guida di riferimento rapido

SISSI IN RETE. Quick Reference guide guida di riferimento rapido SISSI IN RETE Quick Reference guide guida di riferimento rapido Indice generale Sissi in rete...3 Introduzione...3 Architettura Software...3 Installazione di SISSI in rete...3 Utilizzo di SISSI in Rete...4

Dettagli

Installazione di GFI Network Server Monitor

Installazione di GFI Network Server Monitor Installazione di GFI Network Server Monitor Requisiti di sistema I computer che eseguono GFI Network Server Monitor richiedono: i sistemi operativi Windows 2000 (SP4 o superiore), 2003 o XP Pro Windows

Dettagli

Mini manuale di Audacity.

Mini manuale di Audacity. Mini manuale di Audacity. Questo mini manuale è parte del corso on-line Usare il software libero di Altrascuola. Il corso è erogato all'interno del portale per l'e-learning Altrascuola con la piattaforma

Dettagli

Dipartimento del Tesoro

Dipartimento del Tesoro Dipartimento del Tesoro POWER POINT AVANZATO Indice 1 PROGETTAZIONE DELL ASPETTO...3 1.2 VISUALIZZARE GLI SCHEMI...4 1.3 CONTROLLARE L ASPETTO DELLE DIAPOSITIVE CON GLI SCHEMI...5 1.4 SALVARE UN MODELLO...6

Dettagli

C O M E I N I Z I A R E A U S A R E U N T A B L E T A N D R O I D

C O M E I N I Z I A R E A U S A R E U N T A B L E T A N D R O I D C O M E I N I Z I A R E A U S A R E U N T A B L E T A N D R O I D Se avete un tablet android, ma non avete la minima idea di come accenderlo, usarlo e avviarlo, seguite queste nostre indicazioni 1. ATTIVAZIONE

Dettagli

Guida al nuovo sistema di posta. CloudMail UCSC. (rev.doc. 1.4)

Guida al nuovo sistema di posta. CloudMail UCSC. (rev.doc. 1.4) Guida al nuovo sistema di posta CloudMail UCSC (rev.doc. 1.4) L Università per poter migliorare l utilizzo del sistema di posta adeguandolo agli standard funzionali più diffusi ha previsto la migrazione

Dettagli

Integrated Development Environment (IDE) DevC++ 4.9.9.2

Integrated Development Environment (IDE) DevC++ 4.9.9.2 Integrated Development Environment (IDE) DevC++ 4.9.9.2 Manuale utente Data ultima revisione: 22/10/2008 Fondamenti di informatica Università Facoltà Corso di laurea Politecnico di Bari 1 a Facoltà di

Dettagli

Web conferencing e collaborazione in tempo reale su Internet: la piattaforma Meetecho

Web conferencing e collaborazione in tempo reale su Internet: la piattaforma Meetecho Web conferencing e collaborazione in tempo reale su Internet: la piattaforma Meetecho Tobia Castaldi Alessandro Amirante Lorenzo Miniero Simon Pietro Romano Giorgio Ventre 02/10/2009 GARR 2009 "Network

Dettagli

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO

SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO CLSMS SOFTWARE GESTIONE SMS DA INTERFACCE CL MANUALE D INSTALLAZIONE ED USO Sommario e introduzione CLSMS SOMMARIO INSTALLAZIONE E CONFIGURAZIONE... 3 Parametri di configurazione... 4 Attivazione Software...

Dettagli

VERSO UNA BADANTE VIRTUALE : STUDIO E SVILUPPO DEL LIVELLO COMUNICATIVO TRAMITE TECNOLOGIA VOICEXML

VERSO UNA BADANTE VIRTUALE : STUDIO E SVILUPPO DEL LIVELLO COMUNICATIVO TRAMITE TECNOLOGIA VOICEXML UNIVERSITA POLITECNICA DELLE MARCHE FACOLTA DI INGEGNERIA Corso di Laurea in Ingegneria Informatica e dell Automazione VERSO UNA BADANTE VIRTUALE : STUDIO E SVILUPPO DEL LIVELLO COMUNICATIVO TRAMITE TECNOLOGIA

Dettagli

Il portafoglio VidyoConferencing. Tutto ciò di cui avete bisogno per realizzare videoconferenze HD di qualità, accessibili e a costi vantaggiosi

Il portafoglio VidyoConferencing. Tutto ciò di cui avete bisogno per realizzare videoconferenze HD di qualità, accessibili e a costi vantaggiosi Il portafoglio VidyoConferencing Tutto ciò di cui avete bisogno per realizzare videoconferenze HD di qualità, accessibili e a costi vantaggiosi La qualità HD di Vidyo mi permette di vedere e ascoltare

Dettagli

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at]email.

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at]email. La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net di Emanuele Mattei (emanuele.mattei[at]email.it) Introduzione In questa serie di articoli, vedremo come utilizzare

Dettagli

HORIZON SQL CONFIGURAZIONE DI RETE

HORIZON SQL CONFIGURAZIONE DI RETE 1-1/9 HORIZON SQL CONFIGURAZIONE DI RETE 1 CARATTERISTICHE DI UN DATABASE SQL...1-2 Considerazioni generali... 1-2 Concetto di Server... 1-2 Concetto di Client... 1-2 Concetto di database SQL... 1-2 Vantaggi...

Dettagli

GESTIONE DELLA E-MAIL

GESTIONE DELLA E-MAIL GESTIONE DELLA E-MAIL Esistono due metodologie, completamente diverse tra loro, in grado di consentire la gestione di più caselle di Posta Elettronica: 1. tramite un'interfaccia Web Mail; 2. tramite alcuni

Dettagli

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN)

Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) Estensione di un servizo di messaggistica per telefonia mobile (per una società di agenti TuCSoN) System Overview di Mattia Bargellini 1 CAPITOLO 1 1.1 Introduzione Il seguente progetto intende estendere

Dettagli

GUIDA RAPIDA emagister-agora Edizione BASIC

GUIDA RAPIDA emagister-agora Edizione BASIC GUIDA RAPIDA emagister-agora Edizione BASIC Introduzione a emagister-agora Interfaccia di emagister-agora Configurazione dell offerta didattica Richieste d informazioni Gestione delle richieste d informazioni

Dettagli

LA POSTA ELETTRONICA

LA POSTA ELETTRONICA LA POSTA ELETTRONICA Nella vita ordinaria ci sono due modi principali di gestire la propria corrispondenza o tramite un fermo posta, creandosi una propria casella postale presso l ufficio P:T., oppure

Dettagli

Guida. Vista Live. Controllo. Riproduzione su 24 ore. Ricerca avanz. Le icone includono: Mod. uscita. Icona. Un sensore di allarme.

Guida. Vista Live. Controllo. Riproduzione su 24 ore. Ricerca avanz. Le icone includono: Mod. uscita. Icona. Un sensore di allarme. Guida operatore del registratore TruVision Vista Live Sull immagine live dello schermo vengono visualizzati laa data e l ora corrente, il nome della telecamera e viene indicato se è in corso la registrazione.

Dettagli

Testi della Guida introduttiva a cura di Martin Ley. Revisione e controllo qualità: Cristina Bachmann, Heiko Bischoff, Marion Bröer, Sabine Pfeifer,

Testi della Guida introduttiva a cura di Martin Ley. Revisione e controllo qualità: Cristina Bachmann, Heiko Bischoff, Marion Bröer, Sabine Pfeifer, Guida Introduttiva Testi della Guida introduttiva a cura di Martin Ley. Revisione e controllo qualità: Cristina Bachmann, Heiko Bischoff, Marion Bröer, Sabine Pfeifer, Heike Schilling. Data di rilascio:

Dettagli

Boot Camp Guida di installazione e configurazione

Boot Camp Guida di installazione e configurazione Boot Camp Guida di installazione e configurazione Indice 3 Introduzione 4 Panoramica dell'installazione 4 Passo 1: Verificare la presenza di aggiornamenti 4 Passo 2: Per preparare il Mac per Windows 4

Dettagli

Procedura per il ripristino dei certificati del dispositivo USB

Procedura per il ripristino dei certificati del dispositivo USB Procedura per il ripristino dei certificati del dispositivo USB 30/04/2013 Sommario - Limitazioni di responsabilità e uso del manuale... 3 1 Glossario... 3 2 Presentazione... 4 3 Quando procedere al ripristino

Dettagli

Il Concetto di Processo

Il Concetto di Processo Processi e Thread Il Concetto di Processo Il processo è un programma in esecuzione. È l unità di esecuzione all interno del S.O. Solitamente, l esecuzione di un processo è sequenziale (le istruzioni vengono

Dettagli

Come installare e configurare il software FileZilla

Come installare e configurare il software FileZilla Come utilizzare FileZilla per accedere ad un server FTP Con questo tutorial verrà mostrato come installare, configurare il software e accedere ad un server FTP, come ad esempio quello dedicato ai siti

Dettagli

La Valutazione Euristica

La Valutazione Euristica 1/38 E un metodo ispettivo di tipo discount effettuato da esperti di usabilità. Consiste nel valutare se una serie di principi di buona progettazione sono stati applicati correttamente. Si basa sull uso

Dettagli

Web Conferencing Open Source

Web Conferencing Open Source Web Conferencing Open Source A cura di Giuseppe Maugeri g.maugeri@bembughi.org 1 Cos è BigBlueButton? Sistema di Web Conferencing Open Source Basato su più di quattordici componenti Open-Source. Fornisce

Dettagli

ipod shuffle Manuale Utente

ipod shuffle Manuale Utente ipod shuffle Manuale Utente 1 Indice Capitolo 1 3 Informazioni su ipod shuffle Capitolo 2 5 Nozioni di base di ipod shuffle 5 Panoramica su ipod shuffle 6 Utilizzare i controlli di ipod shuffle 7 Collegare

Dettagli

FileMaker Server 13. Guida introduttiva

FileMaker Server 13. Guida introduttiva FileMaker Server 13 Guida introduttiva 2007-2013 FileMaker, Inc. Tutti i diritti riservati. FileMaker, Inc. 5201 Patrick Henry Drive Santa Clara, California 95054 Stati Uniti FileMaker e Bento sono marchi

Dettagli

INDICE Informazioni Generali... 4. Comprare ebook con Kobo Desktop... 8. Usare la Libreria di Kobo Desktop... 10. Leggere su Kobo Desktop...

INDICE Informazioni Generali... 4. Comprare ebook con Kobo Desktop... 8. Usare la Libreria di Kobo Desktop... 10. Leggere su Kobo Desktop... Kobo Desktop Manuale Utente INDICE Informazioni Generali... 4 Installare Kobo Desktop su Windows... 5 Installare Kobo Desktop su Mac... 6 Comprare ebook con Kobo Desktop... 8 Usare la Libreria di Kobo

Dettagli

GESTIRE LA BIBLIOGRAFIA

GESTIRE LA BIBLIOGRAFIA GESTIRE LA BIBLIOGRAFIA STRUMENTI DI GESTIONE BIBLIOGRAFICA I software di gestione bibliografica permettono di raccogliere, catalogare e organizzare diverse tipologie di materiali, prendere appunti, formattare

Dettagli

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica

Università degli Studi di Parma. Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica Università degli Studi di Parma Facoltà di Scienze MM. FF. NN. Corso di Laurea in Informatica A.A. 2007-08 CORSO DI INGEGNERIA DEL SOFTWARE Prof. Giulio Destri http://www.areasp.com (C) 2007 AreaSP for

Dettagli

I.Stat Guida utente Versione 1.7 Dicembre 2010

I.Stat Guida utente Versione 1.7 Dicembre 2010 I.Stat Guida utente Versione 1.7 Dicembre 2010 1 Sommario INTRODUZIONE 3 I concetti principali di I.Stat 4 Organizzazione dei dati 4 Ricerca 5 GUIDA UTENTE 6 Per iniziare 6 Selezione della lingua 7 Individuazione

Dettagli

> MULTI TASKING > MULTI PROCESS > MULTI CORE

> MULTI TASKING > MULTI PROCESS > MULTI CORE > MULTI TASKING > MULTI PROCESS > MULTI CORE WorkNC V21 multicore 64 bits : Benefici di WorkNC Aumento generale della produttività, grazie alle nuove tecnologie multi-core, 64 bit e Windows 7 Calcolo di

Dettagli

Gestore Comunicazioni Obbligatorie. Progetto SINTESI. Comunicazioni Obbligatorie. Modulo Applicativo COB. - Versione Giugno 2013 -

Gestore Comunicazioni Obbligatorie. Progetto SINTESI. Comunicazioni Obbligatorie. Modulo Applicativo COB. - Versione Giugno 2013 - Progetto SINTESI Comunicazioni Obbligatorie Modulo Applicativo COB - Versione Giugno 2013-1 Versione Giugno 2013 INDICE 1 Introduzione 3 1.1 Generalità 3 1.2 Descrizione e struttura del manuale 3 1.3 Requisiti

Dettagli

Problema: al momento dell autenticazione si riceve il messaggio Certificato digitale non ricevuto Possibili cause: 1) La smart card non è una CNS e

Problema: al momento dell autenticazione si riceve il messaggio Certificato digitale non ricevuto Possibili cause: 1) La smart card non è una CNS e Problema: al momento dell autenticazione si riceve il messaggio Certificato digitale non ricevuto Possibili cause: 1) La smart card non è una CNS e non contiene il certificato di autenticazione: è necessario

Dettagli

8. L'USO DEL PROGRAMMA DI POSTA ELETTRONICA INSIEME ALLA GESTIONE PROFESSIONALE DI DOCUMENTI IN FORMATO E-MAIL

8. L'USO DEL PROGRAMMA DI POSTA ELETTRONICA INSIEME ALLA GESTIONE PROFESSIONALE DI DOCUMENTI IN FORMATO E-MAIL This project funded by Leonardo da Vinci has been carried out with the support of the European Community. The content of this project does not necessarily reflect the position of the European Community

Dettagli

Oggetti Lezione 3. aspetti generali e definizione di classi I

Oggetti Lezione 3. aspetti generali e definizione di classi I Programmazione a Oggetti Lezione 3 Il linguaggio Java: aspetti generali e definizione di classi I Sommario Storia e Motivazioni Definizione di Classi Campi e Metodi Istanziazione di oggetti Introduzione

Dettagli

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory FILE SYSTEM : INTERFACCIA 8.1 Interfaccia del File System Concetto di File Metodi di Accesso Struttura delle Directory Montaggio del File System Condivisione di File Protezione 8.2 Concetto di File File

Dettagli

Sistemi Web-Based - Terminologia. Progetto di Sistemi Web-Based Prof. Luigi Laura, Univ. Tor Vergata, a.a. 2010/2011

Sistemi Web-Based - Terminologia. Progetto di Sistemi Web-Based Prof. Luigi Laura, Univ. Tor Vergata, a.a. 2010/2011 Sistemi Web-Based - Terminologia Progetto di Sistemi Web-Based Prof. Luigi Laura, Univ. Tor Vergata, a.a. 2010/2011 CLIENT: il client è il programma che richiede un servizio a un computer collegato in

Dettagli

Guida rapida all uso di ECM Titanium

Guida rapida all uso di ECM Titanium Guida rapida all uso di ECM Titanium Introduzione Questa guida contiene una spiegazione semplificata del funzionamento del software per Chiputilizzare al meglio il Tuning ECM Titanium ed include tutte

Dettagli

Inizializzazione degli Host. BOOTP e DHCP

Inizializzazione degli Host. BOOTP e DHCP BOOTP e DHCP a.a. 2002/03 Prof. Vincenzo Auletta auletta@dia.unisa.it http://www.dia.unisa.it/~auletta/ Università degli studi di Salerno Laurea e Diploma in Informatica 1 Inizializzazione degli Host Un

Dettagli

UML Component and Deployment diagram

UML Component and Deployment diagram UML Component and Deployment diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania I diagrammi UML Classificazione

Dettagli

SOGEAS - Manuale operatore

SOGEAS - Manuale operatore SOGEAS - Manuale operatore Accesso La home page del programma si trova all indirizzo: http://www.sogeas.net Per accedere, l operatore dovrà cliccare sulla voce Accedi in alto a destra ed apparirà la seguente

Dettagli

V11. Release 1. New Devices. New Features. More Flexibility.

V11. Release 1. New Devices. New Features. More Flexibility. V11 Release 1 New Devices. New Features. Highlights dell innovaphone PBX Versione 11 Release 1 (11r1) Con il software Versione 11 dell innovaphone PBX la soluzione di telefonia IP e Unified Communications

Dettagli

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it

UML: Class Diagram. Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it UML: Class Diagram Ing. Orazio Tomarchio Orazio.Tomarchio@diit.unict.it Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania Class Diagram Forniscono una vista strutturale

Dettagli

TeamViewer 8 Manuale Controllo remoto

TeamViewer 8 Manuale Controllo remoto TeamViewer 8 Manuale Controllo remoto Rev 8.0-12/2012 TeamViewer GmbH Kuhnbergstraße 16 D-73037 Göppingen www.teamviewer.com Indice 1 Informazioni su TeamViewer... 6 1.1 Informazioni sul software... 6

Dettagli

Corso di Alfabetizzazione Informatica

Corso di Alfabetizzazione Informatica Corso di Alfabetizzazione Informatica Scopo di questo corso, vuole essere quello di fornire ad ognuno dei partecipanti, indipendentemente dalle loro precedenti conoscenze informatiche, l apprendimento

Dettagli

Corso SOL Gestione catalogo libro moderno 21-22 settembre 2009

Corso SOL Gestione catalogo libro moderno 21-22 settembre 2009 Corso SOL Gestione catalogo libro moderno 21-22 settembre 2009 Introduzione generale Autenticazione dell operatore https://sebina1.unife.it/sebinatest Al primo accesso ai servizi di Back Office, utilizzando

Dettagli

guida all'utilizzo del software

guida all'utilizzo del software guida all'utilizzo del software Il software Gestione Lido è un programma molto semplice e veloce che permette a gestori e proprietari di stabilimenti balneari di semplificare la gestione quotidiana dell?attività

Dettagli

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1

Dipartimento di Sistemi e Informatica Università degli Studi di Firenze. Dev-C++ Ing. Michele Banci 27/03/2007 1 Dipartimento di Sistemi e Informatica Università degli Studi di Firenze Dev-C++ Ing. Michele Banci 27/03/2007 1 Utilizzare Dev-C++ Tutti i programmi che seranno realizzati richiedono progetti separati

Dettagli

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof.

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a. 2009-10. prof. Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica Programmazione I - corso B a.a. 009-10 prof. Viviana Bono Blocco 9 Metodi statici: passaggio parametri, variabili locali, record

Dettagli

Energy Studio Manager Manuale Utente USO DEL SOFTWARE

Energy Studio Manager Manuale Utente USO DEL SOFTWARE Energy Studio Manager Manuale Utente USO DEL SOFTWARE 1 ANALYSIS.EXE IL PROGRAMMA: Una volta aperto il programma e visualizzato uno strumento il programma apparirà come nell esempio seguente: Il programma

Dettagli

Guida alla scansione su FTP

Guida alla scansione su FTP Guida alla scansione su FTP Per ottenere informazioni di base sulla rete e sulle funzionalità di rete avanzate della macchina Brother, consultare la uu Guida dell'utente in rete. Per ottenere informazioni

Dettagli

12.5 UDP (User Datagram Protocol)

12.5 UDP (User Datagram Protocol) CAPITOLO 12. SUITE DI PROTOCOLLI TCP/IP 88 12.5 UDP (User Datagram Protocol) L UDP (User Datagram Protocol) é uno dei due protocolli del livello di trasporto. Come l IP, é un protocollo inaffidabile, che

Dettagli

Guida ai Servizi Voce per il Referente. Guida ai Servizi Voce per il Referente

Guida ai Servizi Voce per il Referente. Guida ai Servizi Voce per il Referente Guida ai Servizi Voce per il Referente Guida ai Servizi Voce per il Referente 1 Sommario 1 Introduzione... 3 1.1 Accesso al Self Care Web di Rete Unica... 4 2 Servizi Aziendali... 6 2.1 Centralino - Numero

Dettagli

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client

Luca Mari, Sistemi informativi applicati (reti di calcolatori) appunti delle lezioni. Architetture client/server: applicazioni client Versione 25.4.05 Sistemi informativi applicati (reti di calcolatori): appunti delle lezioni Architetture client/server: applicazioni client 1 Architetture client/server: un esempio World wide web è un

Dettagli

Sistemi di supporto alle decisioni Ing. Valerio Lacagnina

Sistemi di supporto alle decisioni Ing. Valerio Lacagnina Cosa è il DSS L elevato sviluppo dei personal computer, delle reti di calcolatori, dei sistemi database di grandi dimensioni, e la forte espansione di modelli basati sui calcolatori rappresentano gli sviluppi

Dettagli

MANUALE Gest-L VERSIONE 3.2.3

MANUALE Gest-L VERSIONE 3.2.3 MANUALE Gest-L VERSIONE 3.2.3 Installazione GEST-L 4 Versione per Mac - Download da www.system-i.it 4 Versione per Mac - Download da Mac App Store 4 Versione per Windows 4 Prima apertura del programma

Dettagli

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1

Configuration Managment Configurare EC2 su AWS. Tutorial. Configuration Managment. Configurare il servizio EC2 su AWS. Pagina 1 Tutorial Configuration Managment Configurare il servizio EC2 su AWS Pagina 1 Sommario 1. INTRODUZIONE... 3 2. PROGRAMMI NECESSARI... 4 3. PANNELLO DI CONTROLLO... 5 4. CONFIGURARE E LANCIARE UN ISTANZA...

Dettagli