« Duke », un assistant intelligent pour les agriculteurs

28
26
mar.
2018
Bureautique

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 (GPL v3) était né. Aidé par des étudiants de l’ENSERB (dont Brice Texier), l’outil avance et arrive en 2009, après deux 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 bogue 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 "Google, Apple, Facebook, Amazon et Microsoft") concernant les assistants vocaux pour le quotidien. Que ce soit sous forme d’objets ou sur nos appareils mobiles, 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 termes de fonctionnalités.

Ils permettent généralement d’interagir avec des services propres aux téléphones mobiles (contacts, SMS, musique…), des services de divertissement payants (musique et vidéo en diffusion directe) 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, a priori, les outils de développement sont disponibles pour quasiment chaque plate‐forme.

Preuve du concept

Bien entendu, notre esprit libre nous a poussé à chercher une alternative aux produits clé en main proposés çà 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 [N. D. M. : licence GPL v3 puis APL v2 pour le cœur, et licences variables (APL v2, GPL v3, 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, etc., 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 Entrée Ctrl + X Entrée pour sauvegarder et quitter l’édition.

importantImportant no 1 : Il vous faudra demander une clé pour l’API Google Speech à remplacer ci‐dessus dans le paramètre token du nœud stt.

importantImportant no 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 configuration est en français, et aux phonèmes anglais si votre configuration est en anglais.

importantImportant no 3 : Vous pouvez conserver le modèle de hotword anglais dans une configuration 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. Il n’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 que vous aurez préalablement créé en ligne en cinq 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

Plates‐formes

  • 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é.

Aller plus loin

  • # Origines de Ekylibre

    Posté par  (site web personnel) . Évalué à 9. Dernière modification le 26 mars 2018 à 12:01.

    C'est un projet qui est parti de l'ABUL. Son président de l'époque, Michel Gil Antoli était un agriculteur céréalier qui avait très tôt installé des ordinateurs pour gérer son exploitation.
    En bon libriste, il a voulu partager ses connaissances. Grâce à François Pellegrini, il s'est rapproché de l'ENSEIRB ce qui a donné une PME performante animée par une équipe dynamique.

    Le modèle économique d'Ekylibre, basé sur du logiciel libre, est très intéressant et prouve qu'il est viable.
    Le deuxième enseignement est qu'un projet métier ne fonctionne bien que si il est issu d'une personne connaissant à la fois le métier et l'informatique (ce que j'avais déjà pu vérifier). Actuellement Michel Gil Antoli a vendu son exploitation et Ekylibre vole de ses propres ailes. Bravo !

  • # Petit bug dans le calcul de masse administrative

    Posté par  (site web personnel) . Évalué à 4.

    Bonjour,

    Quand on va sur https://ekylibre.com/pmi , quand on met au moins 1 élément, il n'est plus possible de revenir à 0 (quand on remet au minimum, ça reste à 1). Sur Safari, au cas où ça aurait une importance.

    Par exemple : mettre 6 ruches, essayer de revenir à 0, le compteur reste à 1.

    Par ailleurs, c'est un détail mais ce serait sans doute mieux de gérer le singulier/pluriel correctement. Ca ne doit pas être bien compliqué vu que l'affichage est dynamique.

    Ce serait sans doute également une bonne idée d'essayer de garder une certain classification dans la liste des tâches, c'est vite super difficile de s'y retrouver. Typiquement, si on ajoute du vin, des ruches, des bovins, on a un peu tout en vrac. Après, c'est peut-être compliqué à gérer proprement s'il y a des documents communs entre les catégories mais il pourrait y avoir une catégorie avec les éléments transverses puis des catégories par items.

    Ca semble être un outil utile, raison pour laquelle je me permets ces remarques.

  • # jarvis et Reconnaissance Vocale

    Posté par  . Évalué à 5.

    Je n'ai pas trop saisie le lien entre assistant vocal et culture des pommes de terre.

    Par contre j'ai tilté sur "google Speech API".

    Le projet Jarvis vise à fournir un assistant vocal ala gghome ou amazonalexa et permet d'utiliser des services de Reconnaissance Vocale divers, donc deux offline.

    L'auteur en propose un comparatif sur cette page.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.