« Duke », un assistant intelligent pour les agriculteurs

Qui n’a jamais entendu les agriculteurs se plaindre de la charge de travail administrative trop importante ? Qui n’a jamais observé le manque d’interopérabilité qui oblige à des re-saisies permanentes entre des outils la plupart du temps dépourvus de capacités de communication entre eux ?
Qui n’a jamais rêvé de dicter les actions à faire et que les choses se fassent… toutes seules ?
Voici l’histoire de Duke, l’assistant vocal intelligent.

Sommaire

Au début

Au début, il y avait des agriculteurs qui passaient 500 heures par an à effectuer leurs démarches administratives (en ronchonnant 😉 ) puis l’un d’entre eux a décidé de s’attaquer aux problèmes en développant une solution libre de gestion : Ekylibre (GPLv3) était né. Aidé par des étudiants de l’ENSERB (dont Brice TEXIER) l’outil avance et arrive en 2009 après 2 années de développement à gérer la partie comptable et commerciale d’une petite exploitation agricole.

La traversée du désert

Comme dans tous les projets libres, le modèle économique est primordial dans la pérennité d’un projet.

Et la lumière fut

Au moment où ça marche, on a un peu l’impression de découvrir un nouveau monde où rien n’est impossible et puis la réalité du bug rappelant la somme du travail restant à accomplir pour un outil simple, fiable et accessible ramène tout ce petit monde sur terre.

Avènement de l’IA

Ces derniers temps, nous avons vu fleurir les initiatives des grandes entreprises (GAFAM) concernant les assistants vocaux pour le quotidien. Que ce soit sous forme d’objets ou sur nos smartphones, l’accès à ces ressources est aujourd’hui très facile.
Encore faudrait-il leur trouver une réelle utilité, car malgré leur attrait, ces “assistants” sont plutôt limités en terme de fonctionnalités.

Ils permettent généralement d’interagir avec des services propres aux smartphones (contacts, SMS, musique…), des services de divertissement payants (musique et vidéo en streaming) et avec quelques objets de la vie réelle (interrupteurs, ampoules et stations météo connectées). Mais les actions possibles s’arrêtent là pour le moment, même si, à priori, les outils de développement sont disponibles pour quasiment chaque plateforme.

Preuve du concept

Bien entendu, notre esprit libre nous a poussé à chercher une alternative aux produits clé en main proposés ça et là, où le modèle économique repose sur l’utilisation implicite de vos données (bien que beaucoup ne s’en rendent pas compte).

Nous sommes tombés sur le projet Mycroft financé après une campagne sur Kickstarter. C’est du Python (NdM: licence GPLv3 puis APLv2 pour le cœur, et licences variables (APLv2, GPLv3, MIT, domaine public, etc.) pour les skills, exemples 1, 2 ou 3) et ça s’installe sur Raspberry Pi, tout ce qu’il nous fallait pour faire une preuve de concept en interagissant avec Ekylibre via une API.
Alors Mycroft était et est toujours en cours de développement, mais les résultats étaient très encourageants pour l’avenir !

Nous avons donc forké et contribué à notre manière pour l’adapter en français (pas une mince affaire la première fois, surtout concernant la gestion de l’encodage UTF-8 alors que le projet est en Python 2) et développé quelques skills (fonctionnalités, dans le jargon) permettant d’enregistrer une intervention réalisée aux champs directement dans Ekylibre en prenant en compte le type (semis, labour, binage, etc…), la parcelle, le prénom de la personne qui réalise l’opération et on pourrait en rajouter ! Nous avons fait la même chose pour déclarer un incident dans notre logiciel et nous avons développé un skill météo “localisé” avec l’API OpenWeatherMap prenant en compte matin, après-midi, les jours de la semaine… et les noms de parcelles si besoin.

Dukel’assistant personnel de l’agriculteur – était né.

Tutoriel d’installation

Duke, mais aussi tous les composants de Mycroft peuvent aisément être installés sur votre distribution préférée ou même un Raspberry Pi (B3 de préférence).
Créez un dossier pour votre projet (c’est plus propre), où vous voulez :

mkdir duke
cd duke

Clonez le dépot mycroft-core dans le dossier :

git clone https://github.com/MycroftAI/mycroft-core.git
cd mycroft-core

On installe l’environnement virtuel Python et toutes ses bibliothèques (n’hésitez pas à jeter un coup d’œil ou éditer le fichier) :

./dev_setup.sh

Il faut ensuite fournir le modèle de langue en français (sous licence BSD) pour PocketSphinx, le moteur de reconnaissance de hotword, mot-clé qui déclenchera l’écoute de votre assistant, ou bien conserver le modèle anglais configuré par défaut avec le hotword “Hey Mycroft!” et dans ce cas vous pouvez sauter l’étape suivante :

cd mycroft/client/speech/recognizer/model
mkdir fr-fr
wget https://downloads.sourceforge.net/project/cmusphinx/Acoustic%20and%20Language%20Models/French/cmusphinx-fr-ptm-8khz-5.2.tar.gz
tar -xzf cmusphinx-fr-ptm-8khz-5.2.tar.gz
mv cmusphinx-fr-ptm-8khz-5.2 fr-fr/hmm

Nous créons maintenant le fichier de configuration de mycroft-core, dont voici un exemple mais n’hésitez pas à le modifier selon vos besoins :

mkdir ~/.mycroft
cd ~/.mycroft
nano mycroft.conf

Puis copiez le contenu ci-dessous dans le fichier mycroft.conf

{
  "lang": "fr-fr",
  "system_unit": "metric",
  "time_format": "full",
  "date_format": "DMY",
  "confirm_listening": true,
  "sounds": {
    "start_listening": "snd/start_listening.wav",
    "end_listening": "snd/end_listening.wav"
  },
  "play_wav_cmdline": "paplay %1 --stream-name=mycroft-voice",
  "play_mp3_cmdline": "mpg123 -q --pitch 0.1 %1",
  "location": {
    "city": {
      "code": "Saint-Porchaire",
      "name": "Saint-Porchaire",
      "state": {
        "code": "Nouvelle-Aquitaine",
        "name": "Nouvelle-Aquitaine",
        "country": {
          "code": "FR",
          "name": "France"
        }
      }
    },
    "coordinate": {
      "latitude": 45.82117,
      "longitude": -0.78477
    },
    "timezone": {
      "code": "Europe/Paris",
      "name": "Central European Time",
      "dstOffset": 3600000,
      "offset": 3600000
    }
  },
  "skills": {
    "stop_threshold": 2.0,
    "blacklisted_skills": ["fallback-aiml", "fallback-wolfram-alpha", "skill-alarm", "skill-audio-record", "skill-configuration",
      "skill-desktop-launcher", "skill-ip", "skill-joke", "skill-hello-world", "skill-media", "skill-npr-news",
      "skill-naptime", "skill-pairing", "skill-personal", "skill-playback-control", "skill-reminder", "skill-installer", "skill-singing",
      "skill-speak", "skill-spelling", "skill-stop", "skill-stock", "skill-volume", "skill-weather", "skill-wiki",
      "skill-wolfram-alpha", "fallback-aiml", "skill-mark1-demo"]
  },
  "server": {
    "update": false
  },
  "listener": {
    "sample_rate": 16000,
    "channels": 1,
    "record_wake_words": false,
    "wake_word": "dis-moi",
    "phonemes": "dd ii mm ww aa",
    "phoneme_duration": 120,
    "threshold": 1e-15,
    "standup_word": "debout",
    "standup_phonemes": "dd ee bb ou",
    "standup_threshold": 1e-15,
    "multiplier": 1.0,
    "energy_ratio": 1.5
  },
  "enclosure": {
    "platform": "other",
    "port": "/dev/ttyAMA0",
    "rate": 9600,
    "timeout": 5.0,
    "update": false,
    "test": false
  },
  "log_level": "DEBUG",
  "ignore_logs": ["enclosure.mouth.viseme"],
  "session": {
    "ttl": 180
  },
  "padatious": {
    "intent_cache": "~/.mycroft/intent_cache",
    "train_delay": 1
  },
  "stt": {
    "module": "google",
    "google": {
      "credential": {
        "token": "***********************"
      },
      "lang": "fr"
    }
  },
  "tts": {
    "module": "google",
    "google": {
      "lang": "fr"
    }
  },
  "wifi": {
    "setup": false
  },
  "ConfigurationSkill": {
    "max_delay": 600
  },
  "Audio": {
    "backends": {
      "local": {
        "type": "mpg123",
        "active": true
      },
      "vlc": {
        "type": "vlc",
        "active": true
      }
    },
    "default-backend": "local"
  }
}

Faites Ctrl+o Entrer Ctrl+x Entrer pour sauvegarder et quitter l’édition.

importantImportant #1 – Il vous faudra demander une clé pour la Google Speech API à remplacer ci-dessus dans le paramètre ‘token’ du noeud ‘stt’.

importantImportant #2 – Si vous voulez changer le hotword comme bon vous semble, vous devez vous référer au dictionnaire de phonèmes en français si votre config est en français et aux phonèmes anglais si votre config est en anglais.

importantImportant #3 – Vous pouvez conserver le modèle de hotword anglais dans une config en français, pour cela vous devez dupliquer le modèle anglais et le placer dans un sous dossier fr-fr (à côté du en-us). Vous pouvez alors conserver le “Hey Mycroft” d’origine ou bien créer un autre hotword mais avec les phonèmes anglais comme expliqué au point juste avant.

Pour aller plus loin

Si vous voulez aller un peu plus loin, je vous conseille de regarder les points suivants qui peuvent vous intéresser :

Au niveau logiciel

  • Padatious : moteur d’intention basé sur l’exemple (réseaux neuronaux). Implémenté par défaut maintenant dans Mycroft. Le résultat est très intéressant, mais il manque des fonctionnalités au module pour gérer les variables. À suivre de près.
  • Conversation et contexte : Mycroft permet désormais de gérer un contexte lors des requêtes. Vous pouvez lui demander la météo actuellement à Bordeaux, puis lui demander la même chose mais pour demain sans répéter le nom de la ville. Y a plus qu’à coder !
  • Snowboy : tout récemment vient d’être ajouté la possibilité d’utiliser Snowboy, un moteur de reconnaissance de “hot words” à l’instar de PocketSphinx mais avec un modèle vocal pour vous aurez préalablement crée en ligne en 5 minutes. Très efficace et doué d’apprentissage puisque tout un chacun peux contribuer au modèle en enregistrant sa voix.

Au niveau matériel

  • Plateforme

Raspberry Pi : évidemment ! Une image préconfigurée est proposée par le projet Mycroft, mais vous aurez une version plus récente de mycroft-core en faisant l’installation vous-même à partir du dépôt GitHub.
ReSpeaker : apparemment mycroft-core pourrait tourner directement sur leur matériel dédié à ce genre d’usage.

  • Audio

Sur Raspberry Pi, vous savez peut-être que la carte ne possède aucune entrée son et que la sortie est d’assez mauvaise qualité. La solution consiste à utiliser une carte son externe en USB. On en trouve pour moins de 10€ en ligne.

Du nouveau

Le projet Mycroft a pas mal avancé depuis le début de la rédaction de cette dépêche. Des petits changements sont sans doutes apparus, mais l’installation est bien plus facile aujourd’hui qu’il y a un an, et la documentation s’est bien étayée. Alors, n’hésitez plus! Mettez un peu de voix dans vos interfaces, dans le respect de votre intimité.

Commentaires :
voir le flux atom
ouvrir dans le navigateur

(Source: LinuxFr.org : les dépêches)
Logo