Synthèse et reconnaissance vocale

sur Raspberry Pi

En fait on va parler d'interface

Un peu d'histoire

Un saut dans le futur

Donnons une voix au Raspberry

Festival

L’ancêtre, simple à installer, simpe à utiliser

        
        # apt-get install festival

        $ cat “Hello I am festival” | festival --tts
        $ uname | festival -tts
        
        
Voix métallique on peut améliorer avec mbrolla http://tcts.fpms.ac.be/synthesis/mbrola.html

Espeak

Espeak (voix d’alien dans un haut parleur) simple a installer plus d’options

        
        # apt-get install espeak

        $ espeak -vfr+m2 -k5 -s150 "Bonjour je suis la voix de votre IA"
        
        

Google

Google text to speech (bonne qualité nécessite une connection et un player audio)

        
        # apt-get install mplayer

        $ cat gspeech.sh 
        #!/bin/bash
        say() { 
            local IFS=+;
            /usr/bin/mplayer -ao alsa -really-quiet -noconsolecontrols \ 
                "http://translate.google.com/translate_tts?ie=UTF-8&client=tw-ob&q=$*&tl=Fr-fr"; 
        }
        say $*

        $ ./speech.sh "Bonjour tout le monde"
        
        
latence sensible…

Pico

La synthèse vocale d’android

        
        sudo apt-get install libttspico-utils
        pico2wave -lfr-FR -w french.wav "En français c'est pas mal." && aplay french.wav
        
        

Nexmo

  • La synthèse vocale as a (VoiP) service
  • +33 6 44 63 73 37
        
  const app = require('express')();
  const bodyParser = require('body-parser');
  app.use(bodyParser.json());
  app.use(bodyParser.urlencoded({ extended: true }));
  const server = app.listen(process.env.PORT || 4001, () => {
    console.log('Express server listening on port %d in %s mode', server.address().port, app.settings.env);
  });

  app.get('/answer', (req, res) => {

    // Let's pretend here we have computed day, month, year, hour, minute, seconds from new Date();
    let now_french = "Nous sommes le "+day+" "+month+" "+year+" et il est "+hour+" heure "+minute+" minutes "+seconde+" secondes. ";
    let load = require('child_process').execSync("uptime \| cut -d' ' -f 14", {encoding: 'utf8'} )
    let load_text = ' La charge de la machine est de '+load;

    let text = 'Bonjour, Je suis votre assistante vocale Jaguar Network. '+now_french+load_text;

    const ncco = [    {
                        action: 'talk',
                        voiceName: 'Chantal',
                        text: text
                        }  ];

    res.json(ncco);
  });

  app.post('/event', (req, res) => {
    res.status(204).end();
  });

        
        

Puis une oreille et un (demi)cerveau

cmusphynx

  • Fait pour l'embarqué
  • Relativement simple à utiliser
    • sudo apt-get install pocketsphinx
    • Création d'un fichier language.txt
    • upload vers ce site pour récupérer un modèle
        
        [TXT] 2029.dic                248    Pronunciation Dictionary
        [   ] 2029.lm                 2.0K   Language Model
        [   ] 2029.log_pronounce      196    Log File
        [   ] 2029.sent               204    Corpus (processed)
        [   ] 2029.vocab               75    Word List
        
        $ pocketsphinx_continuous -fwdflat no -bestpath no -maxwpf 5 -maxhmmpf 1000 -topn 2 -pl_window 7  -dict 2029.dic -lm 2029.lm -inmic yes
        
        

snowboy

  • Voice commands
  • Puissant et peu gourmand
  • Modèle entrainé en ligne, puis déployé
        
        
        

voiceid

Voice identification

        
        https://code.google.com/archive/p/voiceid/  (reconnaissance viométrique)
        
        

Watson speech to text

  • L'API en ligne d'IBM
  • Simple à utiliser (nodejs, python)
  • Payante à partir d'un certain volume
  • Imparfaite, mais bluffante
        
        https://speech-to-text-demo.mybluemix.net/
        
        

Jarvis

  • Plusieurs logiciels packagés
        
        
        

Wit.ai

  • Wit.ai analyse le texte et l'audio pour en extraire le sens
        
        
        

Houndify

  • Houndify l'audio pour en extraire le sens
  • Gratuit 100crédit à répartir en domaine
  • Anglais uniquement
        
        
        

Google speech

  • Google speech
  • 60 premières minutes gratuites
  • Supporte de nombreuses langues dont le Français
        
        
        

Quelques astuces

Configuration du wifi

	
        $ iwlist wlan0 list # obtenir les ssid et le modes de chiffrement
        $ cat /etc/wpa_supplicant/wpa_supplicant.conf
           ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
           update_config=1
           country=GB

           network={
            ssid="JAGN-GUEST"
            psk="lemotdepasse"
            key_mgmt=WPA-PSK
           }
        # ifdown wlan0 && ifup wlan0
	
    

Config du son

Le format du fichier ~/.asoundrc

        
            pcm.!default {
            type asym
            playback.pcm {
                type hw
                card 0
            }
            capture.pcm {
                type plug
                slave.pcm "hw:1,0"
            }
            }
        
        

Commandes utiles

  • aplay -l
  • arecord -l
  • alsamixer
  • mpg123/mplayer

RPI...connecter...maison

        
            # On se connecte sur remote_server (en tant que remote_user) 
            # pour y ouvrir le port 6842 qui redirigera les connexions ssh vers le port local 22
            /usr/bin/ssh -N -R 6842:localhost:22 remote_user@remote_server
        
        

Maintenant toute connection ssh sur remote_server port 6842,
se connectera en fait sur le raspberry (port 22) !

On peut mettre un script dans la crontab pour maintenir la connection

Question ?

Amazon

  • Des périphériques
    • Echo
    • Dot
    • Tap
  • Alexa
  • Un écosystème
    • https://github.com/blocke/ha-local-echo

Google

  • Des périphériques
    • Google Home
  • Google Asssitant
  • L'écosystème Googgle

DIY

Links

  • https://diyhacking.com/best-voice-recognition-software-for-raspberry-pi/
  • https://aws.amazon.com/iot/sdk/
  • https://thecattlecrew.net/2016/06/15/first-experience-with-aws-iot-amazon-iot-hackathon/
    • Google Home
  • Google Asssitant
  • L'écosystème Googgle