Fabrication industrielle
Internet des objets industriel | Matériaux industriels | Entretien et réparation d'équipement | Programmation industrielle |
home  MfgRobots >> Fabrication industrielle >  >> Manufacturing Technology >> Processus de fabrication

Windows 10 IoT Core :Robot à commande vocale

Histoire

Au début de l'ordinateur, l'interaction avec l'ordinateur se faisait via des cartes perforées, un trackball, un pistolet lumineux, des claviers et même via un écran tactile. Tous ces appareils nécessitent une sorte de contact physique pour les faire fonctionner.

Avec décennie par décennie, la nouvelle technologie s'améliore par rapport à l'ancienne. Les périphériques d'entrée sans fil deviennent populaires car ils offrent un bureau propre et moins encombré. Avec l'amélioration actuelle des logiciels et du matériel, un nouveau type d'entrées est possible, à savoir :les entrées visuelles et vocales.

Cet article vous aidera à découvrir la technologie de reconnaissance vocale fournie dans Windows 10 IoT Core. À la fin du sujet, nous allons créer un robot utilisant Windows 10 IoT Core et Raspberry Pi 2 exécutant l'application de reconnaissance vocale. Cette application de reconnaissance vocale permet au robot d'effectuer diverses tâches de mouvement (par exemple :avancer, tourner, s'arrêter, etc.) en fonction de l'interaction vocale de l'utilisateur.

Nouveau sur Windows 10 IoT Core ? ou débutant ? référez-vous d'abord à ce lien.

Cet article a été mis à jour le 30 mars 2016

Qu'est-ce que la reconnaissance vocale ?

En une seule ligne, la reconnaissance vocale signifie la traduction des mots prononcés en un texte équivalent possible. La reconnaissance vocale peut être divisée en deux composants principaux : le traitement du signal et le décodeur vocal. Nous n'avons pas à nous soucier de sa complexité car Microsoft a déjà développé une solution pour cela. Nous n'avons qu'à utiliser leurs bibliothèques Speech.

Étape 1

Premiers pas avec la reconnaissance vocale

Commençons par l'idée de base :

  • Créer une grammaire de reconnaissance vocale (grammaire SRGS)
  • Initialiser l'objet de reconnaissance vocale et charger la grammaire (SpeechRecognizer)
  • S'inscrire aux événements de reconnaissance vocale et créer un gestionnaire

Créer une grammaire de reconnaissance vocale

Avant de commencer avec la reconnaissance vocale, nous devons comprendre comment programmer Universal Windows App pour comprendre notre langage ou nos commandes. Pour ce faire, nous devons créer une grammaire de reconnaissance vocale. La grammaire de reconnaissance vocale peut être créée à l'aide de SRGS Grammar for Universal Windows App :

  • Utilisez XML pour créer des documents de grammaire conformes à la spécification SRGS (Speech Recognition Grammar Specification) version 1.0, la norme W3C pour les grammaires de reconnaissance vocale.

Remarque :d'autres moyens possibles sont disponibles dans .Net Framework, mais ils ne sont pas pris en charge dans UWP au moment de la rédaction de cet article. Qui sont :

  • Créer des grammaires par programmation à l'aide des membres des classes GrammarBuilder et Choices dans l'espace de noms System.Speech.Recognition.
  • Utilisez des constructeurs et des méthodes de classes dans l'espace de noms System.Speech.Recognition.SrgsGrammar pour créer par programmation des grammaires compatibles SRGS.

Nous allons commencer par la grammaire XML. Avant de commencer à créer un fichier de grammaire, nous devons imaginer et définir comment l'utilisateur interagira avec notre application. Dans le contexte de ce projet, l'utilisateur commandera au robot de se déplacer dans les deux sens, s'arrêtera et commandera d'engager/désengager la détection d'obstacle. Nous pouvons faire une liste de vocabulaire de la parole qui est la suivante :

  • Avancer
  • Déplacer vers l'arrière
  • Tourner à droite
  • Tourner à gauche
  • Arrêtez
  • Activer la détection d'obstacles
  • Désactiver la détection d'obstacles

Pour ce vocabulaire, nous devons concevoir une grammaire XML. Nous avons juste besoin de suivre quelques règles de base de SRGS v1.

Grammaire SRGS

Pour créer une grammaire SRGS, certaines règles de base doivent être suivies, à savoir :

  • L'élément racine doit être de la grammaire
  • La version, la langue et l'espace de noms XML de la grammaire d'attribut doivent être présents.
  • La grammaire doit contenir au moins un élément de règle. (L'élément de règle contient un mot ou une phrase que l'utilisateur peut prononcer).
  • Chaque élément de règle doit avoir un attribut d'identifiant unique.

Nous avons vu la structure de base requise pour la grammaire SRGS. Maintenant, nous devons créer un vocabulaire pour cela. Le vocabulaire est un ensemble de mots qui produit une commande significative pour le robot.

Par exemple : « Move Forward » ou « Move Reverse", ici Move vient avant Forward et Reverse. Ainsi, en règle générale, il doit venir en premier avant Forward et Reverse. Nous pouvons donc extraire Forward et Reverse dans une autre règle. Voir l'image ci-dessous :

Qu'est-ce que la règle racine ? Il s'agit du nœud de départ ou du nœud racine à charger lorsque Speech Recognizer charge la grammaire. C'est facultatif. Vous pouvez l'ignorer, mais vous devez ensuite spécifier le nœud racine par programmation.

Qu'est-ce que l'attribut racine dans la balise de grammaire ? L'attribut racine définit la règle de démarrage du logiciel de reconnaissance vocale lorsqu'il charge la grammaire. S'il n'est pas spécifié comme attribut, vous devez le spécifier par programme.

Cet article est destiné aux débutants et il n'est donc pas possible de couvrir les balises et les attributs SRGS complexes. Vous pouvez en savoir plus sur la grammaire SRGS sur MSDN et W3C.

Nous venons de créer la grammaire SRGS pour notre robot. Maintenant, nous allons voir comment implémenter la reconnaissance vocale pour l'application Windows universelle.

Initialiser la reconnaissance vocale et charger la grammaire

SpeechRecognizer la classe est disponible dans Windows.Media.SpeechRecognition espace de noms. Importez l'espace de noms dans votre fichier de code. Avant d'initialiser, nous devons créer un fichier de grammaire XML dans notre projet. Nous avons déjà créé du contenu pour le fichier de grammaire dans la section précédente.

Remarque :Si « CompilationResult » échoue, il peut y avoir un problème avec l'interface du micro. Vérifiez la connexion avec le microphone. Vérifiez s'il est détecté dans l'application IoT Core par défaut ou non.

Inscrivez-vous aux événements de reconnaissance vocale et créez un gestionnaire

Dans la dernière étape, nous avons démarré la reconnaissance vocale et sommes prêts à écouter la parole et à l'analyser. Après une analyse réussie, « ContinuousRecognitionSession » déclenchera un événement nommé « ResultGenerated ». Cet événement fournit un résultat d'analyse en tant qu'arguments d'événement qui peuvent être traités pour effectuer une tâche basée sur la parole. Nous pouvons également écouter l'état du module de reconnaissance par l'événement « StateChanged » pour donner au locuteur une indication que le module de reconnaissance écoute.

Ici, 'MyRecognizerStateChanged' est la fonction qui sera déclenchée par 'MyRecognizer' lorsque son état passe de l'un à l'autre. Il fournira des informations d'état précieuses lorsque « MyRecognizer » a commencé à écouter et quand s'arrête d'écouter. Une fois l'écoute terminée, « MyRecognizer » analyse le discours par rapport à la grammaire fournie et déclenche l'événement « ResultGenerated » en cas de succès.

Remarque :Vous n'avez pas besoin de créer vous-même les fonctions "MyRecognizer_StateChanged" et "MyRecognizer_ResultGenerated". Au lieu de cela, Visual Studio fournit un moyen de les créer automatiquement pour vous. Vous pouvez les créer automatiquement par Visual Studio en utilisant  deux fois à droite du signe +=d'un événement.

Vous pouvez également enregistrer des gestionnaires d'événements juste après avoir initialisé l'objet SpeechRecognizer.

Nous avons presque terminé !

Étape 2

Comment conduire sur la parole analysée ?

Dans la section précédente, nous avons configuré la grammaire et la reconnaissance vocale personnalisées pour l'application Windows universelle. Lorsque Speech Recognizer analyse avec succès la parole parlée, il déclenche l'événement « ResultGenerated ». Cet événement contient le résultat analysé comme argument. Voyons comment détecter ce qui est dit et que faire en fonction de la parole :

Ici, l'argument « args » transmis au gestionnaire d'événements par SpeechRecognizer lors de l'analyse réussie de la parole. 'args.Result.Text' est de type chaîne. Il contient le discours parlé sous forme de texte. Vous pouvez effectuer une tâche spécifique à la parole en utilisant le bloc conditionnel.

Il n'est pas possible d'afficher le code complet pour conduire le robot. J'ai fourni une classe statique nommée "MotorDriver" qui contient diverses fonctions pour conduire le robot. Cette classe gère les broches Gpio pour piloter le robot. Le code source complet est fourni à la fin du projet. Si vous débutez avec Raspberry Pi 2 et Windows 10 IoT, consultez ce lien pour commencer.

Étape 3

Mettre à jour la capacité de l'appareil

Avant de déployer l'application Windows universelle sur le Raspberry Pi 2, nous devons définir la capacité de périphérique appropriée pour que l'application s'exécute avec des droits d'accès matériels spécifiques. Dans le contexte de cette application, nous avons besoin d'un périphérique externe « Microphone » à utiliser. Pour activer « Microphone » dans le manifeste du package :


Tout est fait côté logiciel. Il est maintenant temps de câbler le matériel. Le code source est fourni à la fin de l'article.

La majeure partie de l'implémentation de la reconnaissance vocale est terminée et il n'est pas possible d'expliquer ici chaque ligne du code. Au lieu de cela, le code source est bien commenté. Demandez pour toute question.

Étape 4

Déployer et enregistrer l'application en tant qu'application de démarrage

Le robot doit reconnaître les commandes vocales chaque fois qu'il est allumé. Pour ce faire, vous devez enregistrer votre application en tant qu'application de démarrage afin qu'à chaque démarrage de Raspberry Pi 2, votre application démarre juste après le démarrage. Pour ce faire, vous devez d'abord déployer votre application sur le Raspberry Pi 2, puis l'enregistrer en tant qu'application de démarrage.

Avant le déploiement, il est bon de changer le nom de famille du package de l'application :


Après avoir modifié le nom de famille du package, déployez l'application sur l'appareil distant (votre Raspberry Pi 2).




Si vous ne savez pas comment déployer correctement votre application sur le Raspberry Pi 2, consultez ce lien.

Une fois l'application déployée avec succès, vous devez l'enregistrer en tant qu'application de démarrage. Vous pouvez enregistrer votre application en tant que démarrage à l'aide de deux méthodes :à l'aide de PowerShell ou du portail de gestion Web de Windows IoT Core. Je vais aller avec la deuxième méthode. Ouvrez le navigateur Web et suivez :



Vous rencontrez des problèmes lors de l'enregistrement en tant qu'application de démarrage ? Référez-vous à cet article.

Une fois que vous avez enregistré avec succès votre application en tant qu'application de démarrage, redémarrez Raspberry Pi 2 et voyez si votre application démarre après le démarrage ou non. Sinon, vérifiez toutes les étapes du déploiement à l'enregistrement. Avec le démarrage réussi de l'application, il est maintenant temps de câbler les choses.

Schéma

Les pièces matérielles sont constituées d'un châssis de robot (avec moteurs à courant continu), Raspberry Pi 2 (avec Windows 10 IoT Core), batterie, capteur de distance, etc. L'alimentation provient du Batterie du moteur (illustrée sur l'image à gauche « Batterie : 9-12 VDC ») et va directement au pilote du moteur H-Bridge. Une alimentation séparée pour Raspberry Pi 2 est requise. USB PowerBank est adapté pour fournir une alimentation suffisante au Raspberry Pi 2. En l'absence d'USB PowerBank ou d'alimentation 5VDC filtrée, un circuit régulateur de tension séparé (utilisant 7805) est requis pour alimenter Raspberry Pi et le capteur de distance à ultrasons.

Si vous n'avez pas d'alimentation USB PowerBank ou filtrée 5VDC, vous pouvez utiliser la batterie du moteur (illustrée dans l'image ci-dessus sur le côté gauche - couleur orange, batterie :9-12VDC) pour alimenter Raspberry Pi 2. Le schéma de la configuration est fourni à la fin de l'article (nommé 'Schéma :Batterie moteur').

Pourquoi des résistances avec capteur de distance à ultrasons ?

Le capteur de distance à ultrasons fonctionne sur 5 V tandis que Raspberry Pi 2 fonctionne sur 3,3 V. Nous ne pouvons pas connecter directement la broche Echo du capteur directement à la broche du Raspberry Pi car elle aura une sortie 5V. Il brûlera Raspberry Pi. Ainsi, nous devons baisser la tension de sortie du capteur à 3,3 V avant de l'envoyer au Raspberry Pi. La tension du capteur peut être abaissée en utilisant un circuit diviseur de tension. Ainsi, Vout peut être calculé comme :

R1 =1000 ohmR2 =2000 ohmVin =5V (Broche Echo du capteur)Vout =5 * (2000 / (1000 + 2000)) =3.3V (Vers le Raspberry Pi 2)

AVERTISSEMENT :ne connectez pas la broche Echo du capteur de distance à ultrasons directement à la broche GPIO du Raspberry Pi. Il peut brûler Raspberry Pi. Utilisez plutôt un convertisseur de niveau logique ou un diviseur de tension approprié.

Assemblage final




Problèmes connus

La reconnaissance vocale ne fonctionne pas (Build 10586)

La reconnaissance et les synthèses vocales ne fonctionneront sur aucun des appareils IoT (RPi2, MinnowBoard MAX et Dragonboard 410c) si vous avez installé Windows IoT build 10586.

Solution : Pour le moment, aucune solution valide n'est disponible. J'espère que l'équipe Windows IoT résoudra ce bogue dans la prochaine version. Néanmoins, si vous souhaitez manipuler la reconnaissance vocale, revenez à l'ancienne version 10240 et cela fonctionnera à merveille.

Problème de micro

La reconnaissance vocale nécessite absolument un microphone de haute qualité. Vous pouvez toujours utiliser un microphone de faible qualité lorsqu'il est proche, mais lorsque le microphone est éloigné d'environ 1 à 2 mètres, il ne le reconnaîtra pas avec précision.

Solution : (Option 1) : Achetez un microphone de haute qualité. Parfois, il peut arriver que même après un microphone de haute qualité, il ne le reconnaisse pas correctement. Dans ce cas, une voix forte est nécessaire. (Option 2) :Un microphone sans fil serait parfait. Vous pouvez contrôler le robot même à grande distance sans vous soucier du bruit extérieur. Vous pouvez en acheter un ou créer le vôtre en vous référant à cette vidéo.

Délai de traitement de la reconnaissance

Il est évident que le module de reconnaissance a besoin de temps pour traiter la parole. Ce n'est pas un problème ou un problème, mais cela peut causer un problème dans le système en temps réel.

Supposons que nous ayons une voiture robotisée à grande vitesse qui suit notre commande vocale. Supposons que la voiture suivra notre commande vocale après 600-2000 ms (en raison du délai de traitement). Donc, si nous commandons d'arrêter, la voiture analysera le signal après un certain temps, ce qui peut conduire à un événement catastrophique.

Solution :  À l'heure actuelle (lorsque cet article a été écrit), aucune solution appropriée n'est disponible. J'espère que ce sera résolu à l'avenir.

Différence de prononciation

Les personnes de différentes régions utilisent une prononciation différente pour un seul mot. Reconnaissance vocale incapable d'analyser la parole, si la prononciation du mot parlé est différente de celle pour laquelle il est programmé.

Solution :  Vous pouvez spécifier la langue et la région dans le fichier de grammaire XML SRGS pour analyser la prononciation de la région spécifique.

Disons que nous voulons analyser l'anglais (Royaume-Uni), nous devons définir l'attribut de la balise de grammaire xml:lang="en-GB". Ici, le code de pays ISO pour le Royaume-Uni est GB. Ainsi, « en-GB » indique au module de reconnaissance vocale d'analyser la parole en fonction de la prononciation anglaise (Royaume-Uni). Autre exemple, pour le français canadien, utilisez « fr-CA ».

Bruit environnemental

Le son et les vibrations indésirables, causés par une ou plusieurs entités externes, affecteront la précision du traitement. Parfois, le module de reconnaissance ne comprendra pas la parole même si elle a été correctement prononcée.

Solution : Il peut ne pas être possible de résoudre ou d'éliminer un tel bruit. Au niveau actuel de la technologie, nous ne pouvons espérer utiliser une telle technologie que dans une zone sans bruit. Une autre solution possible consiste à utiliser un microphone intelligent capable de réduire le bruit (appelé microphone à suppression de bruit).

Le microphone USB/la carte son USB ne reconnaît pas

Avec la sortie de build 10531, Windows IoT Core prend en charge les appareils audio génériques. La plupart des microphones USB ou des cartes son USB nécessitent un pilote générique USB. Si votre appareil utilise un pilote générique, cela fonctionnera.

Fonctionne avec succès avec mon RPi2 (Amazin.in)

Solution : Essayez un autre microphone USB ou une autre carte son USB.

Dans mon cas, j'ai acheté une carte son USB. Cela a parfaitement fonctionné. J'ai connecté le microphone à la prise Mic de la carte son. Vous pouvez acheter une carte son USB sur Amazon.com ou sur d'autres sites Web d'achat en ligne. Les Indiens peuvent acheter une carte son USB sur Amazon.in.

Améliorations futures

Il n'y a aucune limitation quand il s'agit de nouvelles idées. Cet article explore la mise en œuvre de base de la reconnaissance vocale. De plus, vous pouvez étendre le projet en fournissant une indication visuelle du résultat analysé. Par exemple, allumez le voyant vert pendant une seconde après l'analyse réussie de la commande vocale, sinon allumez le voyant rouge pendant une seconde. De plus, pour éviter les commandes accidentelles, vous pouvez également programmer le robot pour qu'il indique quand écouter et quand dormir.

Avez-vous remarqué ?

Ceux qui ont soigneusement vu l'image de titre animée du projet sauront que je n'ai pas couvert quelque chose que j'ai montré là-bas. Regardez-le attentivement et essayez d'implémenter cette fonctionnalité cachée dans votre robot.

Bonne chance 🙂

Source :  Robot à commande vocale

Processus de fabrication

  1. Windows 10 IoT Core – Lecture des impulsions de fréquence cardiaque
  2. Windows IoT :porte de reconnaissance faciale
  3. Bouton AWS IoT à contrôle de mouvement
  4. Windows 10 IoT Core sur Raspberry Pi 2 – Données du capteur Adafruit
  5. Windows 10 IoT Core et SHT15
  6. Windows 10 IoT Core pour Raspberry Pi 3 modèle B+
  7. Robot Raspberry Pi contrôlé par Bluetooth
  8. Robot à commande gestuelle utilisant Raspberry Pi
  9. ROBOT WIFI RASPBERRY PI CONTRLÉ À PARTIR D'UN SMARTPHONE ANDROID