Déployer l’assistant vocal Mycroft AI sur Raspberry Pi à l’aide d’Ansible


  • FrançaisFrançais


  • Mycroft AI est une application d’assistant virtuel qui peut répondre à des demandes verbales et effectuer des tâches telles que rechercher sur Internet certaines informations dont vous avez besoin, ou télécharger votre podcast préféré, etc. Il s’agit d’un excellent logiciel open source qui, contrairement aux logiciels similaires d’entreprises spécialisées dans la collecte de données personnelles, assure la confidentialité et la flexibilité de la plate-forme.

    Mycroft AI, écrit en Python, peut s’installer sur de nombreuses plates-formes matérielles différentes. La célèbre carte Raspberry Pi est un choix populaire (mais pas le seul) pour exécuter l’assistant vocal. De manière pratique, Mycroft fournit une image pour Raspberry Pi, qui s’appelle Picroft. Picroft est une excellente solution, mais elle présente certaines limitations, telles que le manque de prise en charge du 64 bits.

    Raspberry Pi 4, la plateforme de choix et ma cible

    La carte Raspberry Pi est populaire au sein de la communauté Mycroft car elle est peu coûteuse, a beaucoup de potentiel éducatif et offre la possibilité d’extensions intéressantes grâce aux compétences de Mycroft et à l’accès facile du Pi aux broches d’entrée/sortie à usage général (GPIO) (pour exemple, le Wake word LED compétence GPIO).

    Le modèle 4B dispose de suffisamment de puissance CPU et de mémoire pour exécuter Mycroft en douceur. J’utilise le modèle 4B avec 8 Go de RAM, exécutant Raspberry Pi OS Bullseye 64 bits Lite, que vous pouvez télécharger à partir de RaspberryPi.org.

    Une autre histoire d’automatisation

    Construire votre propre système Mycroft AI signifie que vous devez faire attention à certains détails. D’après mon expérience initiale (d’il y a un an), voici une liste de détails techniques importants que vous devez garder à l’esprit :

    • Sortie audio (configuration des enceintes)
    • Entrée audio (configuration du microphone)
    • Qualité du microphone (le matériel réel que vous achetez)
    • Réponse de mot de réveil (« Hé Mycroft ! »)
    • Latence de réponse (“Quel temps fait-il?”)

    Ce ne sont pas des problèmes de Mycroft AI, ce sont juste les choses que vous devez garder à l’esprit lors du choix de votre matériel et de la configuration de votre système d’exploitation. Le Pi lui-même est capable d’exécuter Mycroft AI, mais certains ajustements nécessitent une configuration spéciale. Concrètement, il s’agit de :

    • planificateur de processeur
    • Performances de la carte SD
    • Configuration PulseAudio
    • La latence du réseau

    J’ai dû faire beaucoup de recherches et d’actions manuelles pour résoudre les maux de tête de la liste ci-dessus, mais j’ai atteint l’objectif « ultime » : l’expérience la plus fluide !

    Ansible à la rescousse !

    Alors maintenant que j’ai créé l’expérience la plus fluide, comment puis-je m’assurer que chaque action effectuée pour atteindre cet objectif est capturée et réappliquée uniquement si nécessaire sur n’importe quelle carte Raspberry Pi 4 ?

    Ansible à la rescousse! Ansible est idempotent par conception, ce qui signifie qu’il applique les modifications demandées uniquement si nécessaire. Si tout est configuré correctement, Ansible ne change rien. C’est la beauté de l’idempotence !

    Pour atteindre cet objectif ultime, j’utilise deux rôles Ansible :

    • Un pour configurer et peaufiner le Raspberry Pi
    • Un pour installer et configurer Mycroft AI

    Rôle prepi Ansible

    le Rôle prepi Ansible applique quelques configurations pour obtenir de meilleures performances d’une carte Raspberry Pi 4B et préparer le chemin vers Mycroft.

    • Mettre à jour le système d’exploitation Raspberry Pi vers la dernière version
    • Ajouter un référentiel de rétroportages Debian
    • Mettre à jour le micrologiciel à l’aide de la branche suivante, qui fournit le noyau 5.15 et le micrologiciel Edge
    • Mettre à jour l’EEPROM à l’aide de la version bêta, qui fournit des fonctionnalités de pointe
    • Configurez initial_turbo pour accélérer le processus de démarrage
    • Overclocker le Raspberry Pi à 2Ghz
    • Monter /tmp sur un RAMDisk
    • Optimiser/options de montage de partition pour améliorer la lecture/écriture de la carte SD
    • Gérer les interfaces I2C, SPI et UART
    • Réglez le gouverneur du processeur sur les performances pour éviter la commutation de contexte entre les fonctions du noyau inactif *
    • Installer et configurer PulseAudio (hors système)
    • Redémarrez le Raspberry Pi lorsqu’un nouveau firmware ou EEPROM est installé

    Rôle de mycroft Ansible

    Cette Rôle de mycroft Ansible installe et configure Mycroft AI Core à partir du référentiel GitHub en fonction du dev_setup.sh Script Bash fourni par l’équipe principale de Mycroft.

    • Environnement virtuel Python 3
    • Intégration Systemd
    • Installation de compétences supplémentaires
    • Installation des bibliothèques Boto3, py_mplayer et pyopenssl
    • Prise en charge de RAMDisk pour IPC
    • Prise en charge de la configuration des fichiers
    • Optimisations PulseAudio
    • Websocket sécurisé du bus de messages Mycroft

    j’aurai besoin d’un Livre de jeu Ansible pour orchestrer les deux rôles.

    Exigences personnelles

    Voici une liste des exigences pour ce projet :

    • Carte Raspberry Pi 4B (ou ultérieure) connectée à votre réseau
    • Raspberry Pi OS 64 bits
    • Ansible 2.9 (ou version ultérieure)
    • SSH, opérationnel

    Pour graver l’image du système d’exploitation Raspberry Pi sur la carte SD, vous pouvez utiliser Etcher ou l’outil d’imagerie de votre choix.

    J’overclocke mon Pi pour améliorer les performances, mais cela peut être dangereux pour votre matériel. Avant d’utiliser mes playbooks Ansible, lisez-les attentivement ! Vous êtes responsable des choix faits avec ce rôle. Vous décidez quel firmware, quelle EEPROM vous souhaitez utiliser. La même règle s’applique à la fonction d’overclocking. N’oubliez pas que l’overclocking nécessite un système de refroidissement approprié.

    Exécuter le playbook Ansible

    La première étape consiste à récupérer les playbooks Ansible depuis GitHub. Utilisez le suivant git commander:

    $ git clone https://github.com/smartgic/ansible-playbooks-mycroft.git

    Ce référentiel contient un Ansible requirements.yml qui fournit une liste des rôles Ansible requis par ce playbook, les rôles doivent être récupérés à partir d’Ansible Galaxy.

    $ cd ansible-playbooks-mycroft
    $ ansible-galaxy install -r requirements.yml
    Starting galaxy role install process
    - downloading role 'mycroft', owned by smartgic
    - downloading role from https://github.com/smartgic/ansible-role-mycroft/archive/main.tar.gz
    - extracting smartgic.mycroft to /home/goldyfruit/.ansible/roles/smartgic.mycroft
    - smartgic.mycroft (main) was installed successfully
    - downloading role 'prepi', owned by smartgic
    - downloading role from https://github.com/smartgic/ansible-role-prepi/archive/main.tar.gz
    - extracting smartgic.prepi to /home/goldyfruit/.ansible/roles/smartgic.prepi
    - smartgic.prepi (main) was installed successfully

    La deuxième étape consiste à modifier l’inventaire Ansible fourni dans le référentiel pour référencer les hôtes dont j’ai besoin pour être géré par Ansible.

    [rpi]
    rpi4b01 ansible_host=192.168.1.97 ansible_user=pi

    [rpi] est le groupe et ne doit pas être modifié. Ce groupe a un hôte nommé rpi4b01, qui a IP 192.168.1.97 et fournit pi en tant qu’utilisateur Linux (par défaut sur Raspberry Pi OS) avec lequel Ansible se connecte.

    Maintenant, la partie délicate : quelle valeur voulez-vous pour chaque option ? C’est à vous de décider, mais voici ma configuration de prédilection :

    # file: install-custom.yml
    - hosts: rpi
      gather_facts: yes
      become: yes

      pre_tasks:
        - name: Install Python 3.x Ansible requirement
          raw: apt-get install -y python3
          changed_when: no
          tags:
            - always

      vars:
        # PREPI
        prepi_pi_user: pi
        prepi_hostname: mylovelypi
        prepi_firmware_update: yes
        prepi_overclock: yes
        prepi_force_turbo: yes
        prepi_cpu_freq: 2000
        prepi_pulseaudio_daemon: yes

        # MYCROFT
        mycroft_branch: dev
        mycroft_user: "{{ prepi_pi_user }}"
        mycroft_skills_update_interval: 2.0
        mycroft_recording_timeout_with_silence: 3.0
        mycroft_enclosure_name: picroft
        mycroft_extra_skills:
          - https://github.com/smartgic/mycroft-finished-booting-skill.git

      tasks:
        - import_role:
            name: smartgic.prepi

        - import_role:
            name: smartgic.mycroft

    Le contenu doit être enregistré dans un fichier (par exemple, install-custom.yml).

    Et maintenant, le moment de vérité : lancez votre playbook fraîchement créé.

    $ ansible-playbook -i inventory install-custom.yml -k

    le -k option de ansible-playbook La commande n’est requise que si vous n’utilisez pas la clé SSH. Pendant l’exécution du playbook, le Raspberry Pi peut redémarrer plusieurs fois. Le playbook est suffisamment intelligent pour gérer cela.

    Une fois Ansible terminé, vous voyez un message de félicitations, qui vous invite à indiquer les prochaines étapes à suivre.

    Ansible facilite la personnalisation de Mycroft

    Ces playbooks sont les leçons que j’ai apprises depuis le début de mon parcours avec Mycroft AI. Il me permet de construire, reconstruire, personnaliser et répliquer mon installation avec la tranquillité d’esprit d’avoir une cohérence partout !

    Avez-vous des commentaires, des questions ou des préoccupations? Laissez un commentaire, visitez-moi sur Twitter @goldyfruit, ou passez nous voir Chaînes Mycroft.

    Source

    La Rédaction

    L'équipe rédactionnnelle du site

    Pour contacter personnellement le taulier :

    Laisser un commentaire

    Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

    Copy code