Discorso al testo - azione - sintesi vocale: architettura / logica. C'è un modo migliore per costruire il mio robo-player?

2

Ho deciso di iniziare un progetto personale usando Python da quando lo uso da diversi anni e vorrei sapere se l'approccio che ho considerato è buono o meno.

Descrizione

È molto semplice se conosci Alexa / Siri / ecc. Ho un dispositivo che interagirà con il proprietario dato una singola area: Musica. Lo scenario visto che ho visto è come questo:

Owner [voice]: "- I want to listen a sad song, please play me one!"

[backend action here]
- The command will be saved as an audio file in a specific folder.
- I'm using watchdog to monitor file system events - in this case, the creation of an audio file in a folder.
- Convert the above audio file to text using Google API Speech service.
- Search in a database for some key words like: "listen", "sad", "song", "play" and create a response [text] based on them (try to narrow down the searches and guess what the owner wants - not sure how to do this, though)
- Convert the above question to speech using gtts. This will save the audio file to another folder. This file will be played by the device.

Device [voice]: "- Would you prefer a specific artist or genre?"

Owner [voice]: "No."

[backend action here again] - this can occur multiple times if needed and if the owner wants more specific results.
- The command is again processed and converted to text.
- If the command would've been "Yes, I want to listen to a song played by Richard Marx" I would've looked again in the database for the new keywords and go to the specific location of songs played by Richard Marx and play one of them.
- When the command is "No.", I have to search for a sad song in the DB, go to the specific location of that song and play it.

Questa è l'idea principale (su larga scala). Un dispositivo (la sua conoscenza dovrebbe coinvolgere il campo musicale come: artisti / canzoni / generi / ecc.) Che possono interagire con il suo proprietario in modo che possa dargli esattamente ciò che desidera.

Architettura

Ora, so che dovrò utilizzare una grande memoria in cui posso conservare tutta la musica e il DB, ma supponiamo che questo sia già gestito.

Quello che voglio sapere è se il mio approccio / logica è abbastanza buono o se ci sono modi migliori / più semplici per farlo. Inoltre, un po 'di aiuto con la parte " non so come fare questo, anche se " mi aiuterebbe davvero!

    
posta яүυк 08.03.2018 - 21:20
fonte

1 risposta

1

Alexa è facile da scrivere comandi perché afferma in anticipo la sintassi . Cioè, prova a non accettare comandi in una forma libera; aspetta determinate parole chiave e una certa struttura di frase dopo di loro. Se non riesce a capire la tua espressione, spiega cosa sa riconoscere.

Supponiamo che "Play me" sia una tale sequenza di parole chiave e che "la canzone triste" sia la vera query.

Ora devi riconoscere "canzone" come un brano musicale con la voce e "triste" come una certa qualità. "Un pezzo triste" potrebbe essere un pezzo puramente strumentale e potrebbe essere "una melodia triste" o "qualcosa di triste".

Quindi, la prossima cosa di cui hai bisogno è un vocabolario che mappi le possibili parole dell'utente ai tag che hai nel tuo DB musicale, con pesi ("triste" potrebbe avere 0.7 correlazione con "downtempo", 0.95 correlazione con "chiave minore" e -0,5 correlazione con "strong"). Lo stesso vale per i nomi dei generi, i nomi dei cantanti, gli intervalli di date ("riproducetemi una melodia allegra di surf degli anni cinquanta"), ecc. Certo, i nomi delle bande dovrebbero avere 1.0 peso per una particolare banda.

Ora puoi generare un elenco di brani con la somma di tag più alta, randomizzarlo un po '(ricordando che l'ultimo N giocato aiuta) e scegliere la migliore corrispondenza.

Vorrei anche ascoltare un breve comando come "Un altro!" che ripeterebbe la ricerca precedente ma randomizzando i risultati in modo diverso, un comando come "Quiet!" per interrompere immediatamente, e fare ad es. "Ignora" come ultima parola per annullare l'elaborazione di qualsiasi comando.

    
risposta data 12.03.2018 - 17:51
fonte

Leggi altre domande sui tag