L'organizzazione del progetto E.V.A.

Home > eva

Ho migrato questo sito dal'italiano all'inglese, questo è uno dei primi articoli scritti in italiano, che ho deciso di mantenere. Se preferisci leggere la versione in inglese la trovi qui.

Ho passato le ultime due settimane a fare ricerche per capire come muovermi con il progetto, quali librerie usare, quando evitare di reinventare la ruota e quando provare a farlo.
Di fatto l'intero progetto è un reinventare la ruota, ma il mio obiettivo, come ho già indicato nel post introduttivo della serie è quello di imparare cose nuove con python, divertirmi ed ottenere un prodotto finale, in italiano, che funzioni offline per la parte di hotword detection, STT e TTS.

Il software - a.k.a. le righe di codice che andrò ad incollare tra loro

Ho cercato di ricorrere a librerie e progetti opensource e mi sono affidato molto ad esperienze di altri utenti che ho trovato in rete per decidere quale strada prendere.
Senza dilungarmi troppo vi indico subito su cosa sarà basato il progetto:

Hotword detection

Per l'hotword detection ho inizialmente valutato Snowboy che però non sembra essere più manutenuto e sarà spento alla fine del 2020, ho considerato poi CMU Sphinx ma l'aggiunta di nuovi termini al vocabolario ha portato più tempo di quello che avevo a disposizione senza grande successo.

Cercando un po' mi sono imbattuto anche nel canale di Michael Phi "The A.I. hacker", dove l'autore ha recentemente dato il via ad una serie di video con lo scopo di documentare la creazione di un assistente vocale in python capace di girare su un raspberry, totalmente offline e basato su Pytorch.
Mi sono interessato subito al progetto e sono entrato nella sua community su discord, ma i miei tempi sono diversi dai suoi e ho qunidi deciso di continuare per la mia strada.

Speech to text

Il primo software che ho preso in considerazione è stato CMU Sphinx tramite la libreria Speech Recognition, vista anche la sua capacità di funzionare come hotword detector. Ci sono moltissimi esempi su come usare questo strumento, ed esiste anche un modello linguistico italiano. Purtroppo però l'esperienza non è sembrata molto fluida nella mia macchina e questo, unito ad alcuni articoli online, mi ha spinto a scartare questa strada.

Dopo aver scartato i prodotti Google per il fatto che necessitano di una connesione, ho preferito procedere con Mozilla Deepspeech, forse per una questione di simpatia - Mozilla mi sta simpatica.
Ho scelto infatti di andare avanti con Deepspeech, ho visto alcuni video che mostravano le sue performance su raspberry 4, inoltre recentemente è stato rilascio il modello per la lingua italiana, e quindi sono molto curioso di provare.

Elaborazione del linguaggio

Il mio piano iniziale prevedeva di hardcodare delle frasi statiche e lavorare poi con degli if - roba molto avanzata - e non pensavo di inserire anche una parte di NLP; probabilmente non farà parte della prima release del progetto.
Il problema è che quando ho fatto delle ricerche così, tanto per fare, ho trovato questa libreria, Spacy, che mi ha intrigato, mi è venuta subito voglia di provarla in un progetto.

Text to speech

Per la parte di TTS ho trovato alcune soluzione molto performanti tipo Mimic, MaryTTS, Espeak ed altri che non ricordo al momento. Alcuni non erano disponibili per la lingua italiana, altri risultavano un po' pesanti da far girare, alla fine ho deciso si ricorrere ad Espeak, le voci non sono particolarmente naturali ma il fatto che siano più robotiche di altre non mi dispiace, almeno in questa fase del progetto.

L'hardware

Per la componente principale del progetto farò ricorso ad un raspberry pi 4 (2 o 4 gb), una mini cassa USB, ed un ReSpeaker 4-Mic Array.
L'unica alternativa al ReSpeaker che sono riuscito ad individuare è la Matrx voice. Ho optato per la prima perché, leggendo, mi è parso di capire che la sua configurazione è più snella. Ho trovato anche questo articolo su Medium che mostra alcuni benchmark e la ReSpeaker ne esce fuori bene (ma l'articolo è molto vecchio e analizza la Matrix Creator invece della Matrix Voice, uscita successivamente).

Non ho ancora deciso come impacchetterò il tutto, le possibili soluzioni al momento sono due:

Per ora procedo con la parte software, sul case prenderò una decisione in seguito.

E le skill? La roadmap? I gadget?

Sto scrivendo un elenco delle skill che reputo più utili, poi le ordinerò per priorità e definirò le milestone con una roadmap indicativa, in modo da prendere un impegno con me stesso - parli con me? - e cercare di portare avanti tutto con costanza.

Per quanto riguarda i gadget, adoro i gadget! Non ci faccio nulla e spesso non li attacco / appunto / uso, anzi finiscono in qualche cassetto, ma mi piacciono comunque.
Quando anni fa ho iniziato a lavorare su un progenitore di questo progetto, una delle prime cose che ho fatto è stato ordinare un bel pacchettino di spille personalizzate che ho regalato poi agli amici - ora saranno custodite gelosamente nei loro cavò - penserò a qualcosa anche per i gadget, sì.
Grazie per essere arrivato fin qui, ci sentiamo al prossimo post!

Elementary Voice Assistant. Developed in Python, it can be activated with voice commands in order to facilitate daily activities.

Data marketer, product management, python and agile methodologies. This space is my single source of truth.
Here I share #thoughts and #buildinpublic, waiting for the A.I. to conquer the world.
Personal opinions and considerations.