Arduino Control vocal en traitement et à Google Discours API. Nous prenons le contrôle de la voix LED en utilisant Arduino

Est venu en quelque sorte l'idée de faire commande vocale Arduino, mais un arduino ne suffit pas, parce que Pour le système maison intelligente Vous devez communiquer avec l'ordinateur et ses systèmes.

Solution de solution:

Bitvoicer.
Je suis tombé sur divers types d'articles à l'aide de Bitvoicer dans un paquet avec Arduino, mais tout le problème est que Bitvoicer fonctionne uniquement sous Windows, ce qui ne vous permet pas d'utiliser le système sur de simples périphériques PI de Rasberry Pi exécutant UNIX.
Reconnaissance vocale Arduino
Aussi, Arduino peut être contrôlé par une voix grâce au module de reconnaissance vocale, mais alors que je n'ai pas de puniciers pour son acquisition et que vous avez un certain nombre de désagréments lors de l'utilisation de ce module: un nombre limité de commandes, une formation fastidieuse, pour les nouvelles commandes dont vous avez besoin. Pour clignoter le module, qui est déjà un moins, si le système est requis, débogué et installé.

Décision

A commencé à rechercher une solution croisée qui permettrait au système de travailler sur l'ensemble systèmes d'exploitation. Il y avait telle: Discours à la bibliothèque de texte pour Java / Traitement . Le complexe est mis en œuvre sur la base de la langue Traitement (Java) et Google Speast API. J'ai déjà écrit sur le chat. Cette solution Vous permet de suivre une voix en temps réel enableAutorecord ()Spécifiez la limite de volume enableauTothreshold (), relier microphones externes getLinetin (), indiquez la langue de reconnaissance setLanguage (chaîne). La liste complète des fonctionnalités et de la spécificité est sur le site Web du développeur: http://st.getflourish.com. Pour travailler, nous avons besoin de la clé de l'API de la part de Google. Comment l'obtenir décrit ici: www.chromium.org/developers/how-tos/api-keys . Le seul point négatif est que Google Discrand vous permet de ne traiter que 50 demandes par jour, mais dans la pratique, il y a plus de 500 demandes.

Pour être plus facile de naviguer dans le texte, j'applique toutes les sources dans lesquelles déjà épelé. Équipes vocales, Connexion à Arduino Board, Skatch pour Arduino Board, confirmation de phrases vocales et tout ce qui est déjà déjà déjà présent et fonctionne: source. Après avoir téléchargé le dossier Googletts, nous mettons dans la bibliothèque de traitement "A. Sketch pour Arduino réside dans le dossier Googlets / Arduinosérien. Tout a été écrit sur le traitement 3.0A4, disponible en préalable sur le site officiel.

Ventes ("Écoutez mon équipe!"):
La reconnaissance a été déterminée. Vous devez maintenant capturer les commandes dont nous avons besoin et prendre des décisions sur eux. La section est responsable de cette question:
commandes annulées () (si (résultat.equals ("Arduino")) (// Nous recherchons la conformité // exécution de la commande lors de la réception de la conformité) si (résultat.ft.ft.ft ") (// Effectuer une commande à la réception))
Réponse vocale
Nous avons maintenant besoin d'un outil qui sera répondu par une voix humaine en cas de conformité trouvée. Google Translate a été sélectionné comme outil de mise en œuvre et plutôt le module qui convertit le texte sur la voix. Le texte est envoyé par la demande au serveur de Google, est converti en fichier audio. Et il nous est envoyé au format MP3. La section est responsable de cette question:
Video Googletts (chaîne txt, langage de chaîne) (// la conversion de texte au son se produit par la commande Google ("Texte", "Langue") String U \u003d "http://translate.google.com/translate_tts?tl\u003d"; u \u003d u + langue + "& q \u003d" + txt; u \u003d u.replace ("", "% 20"); essayez ( URL URL \u003d nouvelle URL (U); Essayez (UrlConnection Connection \u003d URL.SetreQuestProperty ("utilisateur-Agent", "Mozilla / 4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322 ;. NET CLR 1.1.30703) "); Connection.Connect (); InputStream is \u003d Connection.getInputStream (); Fichier F \u003d nouveau fichier (Sketchpath +" / "+ txt +" .mp3 "); Outputtream out \u003d nouveau fichierOutPuttream (f); byte buf \u003d nouvel octet; int Len; tandis que ((Len \u003d est.Read (buf))\u003e 0) (out.write (buf, 0, len);) Out.close (); close (); imprimé ("fichier Créé: "+ txt +" .mp3 ");) attraper (ioexception e) (E.PrintStackTrace ();)) Catch (Malformedurlexception E) (E.PrintStackTrace ();))

Le traitement des phrases de texte directement est une section responsable:
VOI VOIGER (String S) (// Exécuté par la commande Voice ("Texte") printLn (s); // Utilisé pour surveiller le fichier texte F \u003d nouveau fichier (Sketchpath + "/" + s + ".mp3") ; // Vérification d'un fichier // Si le fichier est déjà disponible, un fichier Ringfile (F.Exssssssss (F.EXST ()) (PrintLN ("Fichier existe déjà! Regardez le fichier!"); Joueur \u003d minimal.loadfile (S + ". MP3 "); Player.Play ();) // S'il n'y a pas de fichier, créez-le d'autre (println (" Fichier n'est pas encore! Créer! "); Googletts (S," RU "); Joueur \u003d minimum. loadfile (s + ".mp3"); joueur.play ();))

Un exemple de mise en œuvre de la reconnaissance et de la confirmation vocale:
Commandes annulées () (si (résultat.Equals ("Ordinateur") (// Nous recherchons une conformité de messagerie ("écouter"); // Nous recevons la confirmation de la voix // exécutant la commande lors de la réception d'une confirmation de voix)
Il est vivant!

Traitement + Arduino.

Eh bien, cela semble être et gagné, mais il manque quelque chose. Maintenant "Main" est tout avec Arduino.
Initialiser la connexion série dans le traitement pour envoyer des données sur Arduino (pour utilisateurs Mac et UNIX):
String PortName \u003d Serial.List (); MyPort \u003d nouveau série (ceci, portname, 9600); myport.bufferuntil ("\\ n");

Pour Utilisateurs Windows:
String myPort \u003d nouveau série (ceci, "votre com-port", 9600); myport.bufferuntil ("\\ n");

Et nous vous enverrons une équipe avec un vote trouvé:
Commandes annulées () (si (résultat.Equals («Light Light»)) (// Si la phrase vocale est reconnue comme «Activer», vous demanderez MyPort.write («High»); // envoie le haut Commande à la messagerie de connexion série ("Activer la lumière"); // Confirmation de la voix de l'exécution de la commande) Autres si (résultat.equals ("Light")); // envoie la commande basse dans la messagerie Serial Connect Voice (" Éteindre la lumière "); // confirmation // exécutant la commande lors de la réception de la conformité))

Nous allons maintenant traiter avec l'arduino conseil. Nous devons écouter le port série et pour trouver une commande de la liste, effectuer l'action requise en fonction de l'équipe. Skatch est très simple:
INT LED \u003d 13; // LED broche sur la configuration du void () (série.begine (9600); // Initialisez la connexion série PINMODE (LED, SORTIE); // PIN LED transmet des données) LOOP () (INT I \u003d 0; // Variable pour la ligne de la ligne dans la mémoire tampon de tampon; // un tableau du tampon pour la hauteur de la hauteur (Serial.Available ()) (// Serial.Anvailable ()) (// Appuyez sur le port série pour les données de données (100); // chaleur lisée dans la mémoire tampon tandis (Serial.Available () && i< 99) { buffer = Serial.read(); } //закрываем массив buffer="\0"; String val = buffer; if (val == "High") { // Если получили значение High Serial.println("Led is On"); // Отправляем в Serial подтверждение получения digitalWrite(led, HIGH); // Включаем светодиод } if (val == "Low") { // Если получили значение Low Serial.println("Led is Off"); // Отправляем в Serial подтверждение получения digitalWrite(led, LOW); // Выключаем светодиод } } }
Tout. Vérifier.

Problèmes et plans:

Parce que Je n'ai pas été programmés avant cette heure, je ne comprends pas complètement certaines choses dans le processus de débogage. Je serai reconnaissant si quelqu'un indique comment résoudre les problèmes de la liste ci-dessous:

Le problème le plus fondamental est que la phrase vocale ne fonctionne pas entièrement. Les dernières lettres disparaissent. Bien que le fichier son vienne avec serveurs de Google dans normalement. Si je comprends bien la situation: le problème du lecteur audio, mais où il n'est pas encore clair.
- J'ai déjà écrit que l'API de la parole Google a une restriction sur 50 demandes par jour, mais elle s'avère en fait plus. En tout cas, cela ne suffit pas. Je prévois d'enregistrer la reconnaissance locale de l'équipe principale et seulement après sa reconnaissance, le texte restant à envoyer au traitement de Google "Je cherche une solution.
- Je pense que cela n'empêchera pas d'envoyer des commandes à Ethernet-Shild Arduino, car Certains systèmes peuvent être sur une distance décente de l'ordinateur principal et la connexion série ici ne convient plus. Je ferai cette décision l'autre jour, car Je n'ai pas de routeur en stock pour vous connecter à Arduino avec Ethernet-Shield.

C'est tout! S'il vous plaît strictement ne pas juger pour les rangées du code! Je viens de commencer à étudier cette tête de pont et je serais extrêmement reconnaissant si vous comprenez mon nez sur la façon dont vous n'avez pas besoin de faire et de le montrer comme vous avez besoin. Je serai aussi heureux que d'autres personnes intéressées se connectent à ce projet - toujours ouvertes à la communication!

Dans ce projet, j'ai combiné le système de détection de détection et de suivi du visage.

En bref, l'essence du projet: la webcam installé sur le mécanisme rotatif est connectée à un ordinateur fonctionnant. systèmes Windows et avec installé logiciel Opencv.. Si le programme détecte la webcam d'une personne dans le champ de vision, le centre de la personne est calculé. Les coordonnées X et Y sont transmises au contrôleur Arduino, qui est connectée à un ordinateur USB. À son tour, le contrôleur Arduino pour les commandes adoptées gère deux servomoteurs: en coordonnant x et par la coordonnée y, donc - Le système suivant est assuré.

Bibliothèque OpenCV (bibliothèque Open Source Computer Vision) peut être téléchargée. La bibliothèque multiplateforme existe actuellement dans le système d'exploitation suivante: Windows, Linux, Android, Mac OS et même iOS. La bibliothèque fournit un traitement d'image en temps réel. Écrit sur C / C ++.

Donc Ce projet est un mélange de solutions douces et dures. Le traitement de l'image est effectué sur l'ordinateur et la commande de servo est effectuée à l'aide du contrôleur.

Donc, j'ai utilisé pour le projet:

Logiciel:
Arduino Ide 1.0 pour Windows

Microsoft Visual C ++ 2010 Express SP1
Bibliothèque Serial C ++ pour Win32 (de Thierry Schneider)

Le fer:
Ordinateur avec Windows 7 SP1
Arduino Uno ou compatible + BP
2 servo
Webcam USB

Alors allons-y.

Étape 1. Installation du logiciel

1) Si vous avez Windows OS, téléchargez le fichier OPENCV-2.3.1-WIN-SuperPack.exe (ou version ultérieure) et installez la bibliothèque.

2) Téléchargez et installez Microsoft Visual C ++ 2010 Express. Si vous avez un 64 bits version WindowsVous devrez également télécharger Windows SDK (mais pour 64 versions, vous risquez de faire des problèmes, je ne pouvais pas faire fonctionner le travail OpenCV sous Windows 7 x64).

Le processus de configuration OpenCV pour Visual C ++ lu sur le site officiel.

Étape 2. Fixation de la caméra et des servomoteurs

Je n'ai pas fait la conception de "durable", car après avoir atteint le but ultime, je comprends tout pour le prochain projet.
Webcorer I attaché au servomoteur de l'axe X, et il a à son tour fixé l'axe Y sur le servomoteur. Et tout ce conception a été fixé dans une pince de "troisième mains".

Étape 3. Connexion

Connexion des servomoteurs:
La sortie jaune de l'axe servo x se connecte à la conclusion du contrôleur Arduino
Sortie jaune à partir du serveur Y Axe se connecte au contrôleur de sortie 10 Arduino
Sortie VCC rouge de Servo Connecte à la sortie 5V
Sortie Noir Gnd de Servo se connecte à la sortie du contrôleur ARDUININO GND

Connexion webcam:
La webcam se connecte à un ordinateur par interface USB. Le programme C ++ identifie la webcam par le numéro de port USB. Il peut être nécessaire de spécifier le port du programme.

Connexion du contrôleur Arduino Uno:
Le contrôleur se connecte également à un ordinateur via une interface USB. Un port COM virtuel apparaît dans le système à effectuer sur le code de programme C ++.

Et rappelez-vous combien il y a quelques années (et peut-être maintenant) était l'idée populaire de contrôler la lumière dans la pièce avec des mains en coton? Et, après tout, c'est très pratique, vous vous allongez au lit, paresseux de se lever et que le coton dans vos mains se désactive ou rentre chez vous, il est noir, saisit l'interrupteur pendant une longue période et ici depuis le coton de seuil ou deux et la lumière brûle. Il me semble que ce concept est pertinent jusqu'à présent, mais plus de technologies peuvent être appliquées à celle-ci par rapport à ceux qui avaient 5 ans, il y a 10 ans. Maintenant, pour une quantité relativement petite, vous pouvez acheter plusieurs parties et programmer la conception à des fonctions similaires, qui seront discutées ci-dessous.

Aujourd'hui, nous considérons un module conçu pour reconnaître les commandes vocales (y compris simplement voix dans le cadre d'une équipe vocale enregistrée) - Module de reconnaissance vocale V3.1 (v3) Ou nom de codage fréquent FZ0475.

Le paquet comprend le module lui-même ( circuit imprimé très bonne qualité), un microphone sur une jambe flexible avec un connecteur de cris de 3,5 mm et des contacts pls angulaires avec une étape de 2,56 mm pour la carte de module (elles ne peuvent pas être utilisées si vous vous connectez aux contacts du module d'une autre manière).

À ce jour, il existe plusieurs types de modules avec des fonctionnalités similaires de différents fabricants et développeurs ou exécution. Ce module La reconnaissance vocale, à mon avis, a un équilibre entre le coût, fonctionnel, commodité. Le module EasyVr sera plus puissant et significativement plus cher. Les modules de base LD3320 seront moins chers et peu pratiques (peu pratiques du moins parce que les descriptions normales ne leur sont pas faciles, mais sinon elles sont déjà subjectives).

Caractéristiques du module de reconnaissance vocale V3.1 (V3) Module:

  • Tension d'alimentation - 5 volts
  • Consommation actuelle - jusqu'à 40 mA
  • Interfaces - UART, GPIO
  • Précision de reconnaissance - 99% (en parfaite conditions)
  • La gamme d'action - dépend du microphone utilisé, car un microphone ordinaire de la plage de réglage est de 0,5 à 1 mètre de distance maximale avec une voix suffisamment forte, si la voix est silencieuse, vous devrez amener un microphone plus proche de la bouche

Le module est un petit tarif précis sur lequel se trouve le microcontrôleur principal (fleur noir), un connecteur de jack de 3,5 mm pour connecter le microphone, un microcircuit flash, des contacts GPIO, UART et POWER, une paire de DEL et le reste de la requête requise. Kit, nécessaire pour le fonctionnement du schéma - résistances, condenseurs, quartz. La taille compacte de la carte permettra sans aucune tâche difficile d'intégrer le module dans propre développement. Pour augmenter la gamme de commandes vocales, on estime utiliser un microphone amplificateur. Lorsqu'une plage acceptable est atteinte, le module convient à une utilisation dans les systèmes de maison intelligents. Sans amélioration pour améliorer la plage de fonctionnement, le module peut être utilisé dans les systèmes de contrôle de bureau, ainsi que dans les systèmes de sécurité (restrictions de contrôle et d'accès). Avec un microphone standard, en raison d'une petite gamme, il est plus fiable d'utiliser un module de reconnaissance vocale en tant que casque et sans fil pour transmettre des commandes au contrôleur, qui est contrôlée par quelque chose à l'aide des modules de batterie et sans fil (par exemple, HC -05 ou HC-12 ou approprié tout autre). Le module est capable de fonctionner sans microcontrôleur externe, car le fabricant a une indépendance fonctionnelle, il est nécessaire d'écrire des commandes vocales une fois et de définir les paramètres pour un travail indépendant en utilisant dispositif externe (PC ou MK).

Ainsi, afin de commencer à travailler avec un module de reconnaissance vocale, nous devons le connecter ou à un ordinateur (vous avez besoin d'un adaptateur USB-UART) ou d'un microcontrôleur (vous devez développer code de programme Pour contrôler le module).

La différence fondamentale de gestion et de configuration du module entre la connexion à un ordinateur ou au microcontrôleur n'est donc pas une clarté, nous utilisons le PC pour configurer. Les instructions décrivent les commandes du module sous forme hexadécimale. Par conséquent, les octets de transmission terminale de la forme hexadécimale seront nécessaires pour plus de commodité, par exemple, Accessport (vous pouvez télécharger à la fin de l'article). De plus, le fabricant se concentre sur les utilisateurs de la plate-forme Arduino et fournit une bibliothèque d'utiliser ce module et des instructions pour utiliser cette bibliothèque. Cependant, beaucoup d'entre nous sont beaucoup plus intéressants de travailler avec le module lui-même directement que par le wrapper Arduino.

Avant de commencer à travailler, nous traiterons du conseil d'administration. A partir des extrémités de la planche sur la prise de droite pour connecter le microphone, à partir des quatre autres contacts d'interface UART. Il existe huit contacts utilisés pour produire des signaux appelés reconnaissance vocale. À partir de ci-dessus, quatre contacts configurés comme entrée de signal sont utilisés pour basculer entre les groupes (par sept commandes vocales dans chaque), si une telle fonction est utilisée. Et les six contacts restants d'en haut sont probablement utilisés pour se connecter à la mémoire du module.

Pour l'opération et la configuration du module, le système de commande est utilisé. La vue générale du cadre ressemble à ceci:

Les quatre premières commandes 00, 01, 02, 03 sont utilisées pour vérifier l'état du module et ses paramètres. Les six équipes suivantes 10, 11, 12, 13, 14, 15, 15, sont utilisées pour modifier les paramètres du module, y compris le contrôle des paramètres de sortie et d'autostart (charge automatique). Les trois commandes suivantes 20.21, 22 sont utilisées pour écrire des commandes vocales. Les trois commandes suivantes de 30,31,32 sont utilisées pour gérer la reconnaissance de la commande vocale. Les équipes 0A, 0D, FF ne sont utilisées que lorsque les données elles-mêmes sont renvoyées au module lui-même. Il n'y a pas beaucoup d'équipes et tout cela n'est pas si effrayant, car il semble au premier abord dans la documentation du module. Considérez les commandes nécessaires pour travailler avec le module de reconnaissance vocale. Tous les commandements existants ne sont pas pratiques.

Il convient de noter que le module peut fonctionner sans contrôle externe du microcontrôleur et contrôler également indépendamment tout avec ses ports de sortie. Pour ce faire, vous devez les configurer (commandes 12, 13, 14).

Équipe 12. - Configurez les ports de sortie. Cette commande est configurée pour utiliser les ports de sortie du module de reconnaissance vocale.

Format: | Aa | 03 | 12 | Mode | 0a |

Lorsque le mode peut recevoir quatre valeurs: 0 - Mode d'impulsion (lorsque la commande vocale est déclenchée, la commande de sortie modifiera son état pour la commande définie par la commande 13), 1 - Mode de commutation (bascule ou bascule) (chaque fois la commande vocale est déclenchée, correspondant à la commande vocale inversée), 2 - Tournage en mode (lorsque la commande vocale est déclenchée, la sortie bascule sur un état d'une unité logique et ne va plus dans un état zéro logique, la réinitialisation est faite par La commande 14), 3 - mode d'arrêt (similaire au mode d'inclusion uniquement, au contraire, lorsque la commande vocale est allumée passe dans un état de zéro logique).

Le mode de commutation le plus pratique qui ne nécessite pas de commandes inutiles. Le régime d'impulsions serait bon, mais la logique de ce mode est telle que lorsque l'équipe vocale est déclenchée, elle produise une fois une unité logique, pendant 10 secondes à 1 secondes. Ce n'est pas assez. Bien que, selon les exigences de ce régime pouvant être utiles. Les modes ON et OFF sont gênants, car vous avez besoin de l'exécution de commandes supplémentaires.

Équipe 13. - Définissez la durée de l'impulsion du mode correspondant.

Format: | Aa | 03 | 13 | Niveau | 0a |

Lorsque le niveau prend une valeur de 00 à 0f (correspond à une durée de 10 ms à 1 secondes).

Niveau. Durée
0x00 10 ms.
0x01 15 ms.
0x02. 20 ms.
0x03 25 ms.
0x04. 30 ms.
0x05 35 ms.
0x06. 40 ms.
0x07. 45 ms.
0x08. 50 ms.
0x09. 75 ms.
0x0a. 100 ms.
0x0b. 200 ms.
0x0c. 300 ms.
0x0d. 400 ms.
0x0e. 500 ms.
0x0f. 1 S.

Équipe 14. - Réinitialiser les ports Sortie à l'état du mode spécifié d'activation ou de désactivation.

Format: | Aa | 03 | 14 | Ff | 0a | - Réinitialiser tous les ports de sortie

| Aa | 03 + N | 14 | Io0 | ... | Ion | 0a | - Réinitialiser les ports de sortie sélectionnés

Lorsque N est le nombre de conclusions qui sont déchargées de manière sélective, io0 ... énumération de ces conclusions dans le cadre d'envoi de données.

En outre, les commandes vocales sont exécutées doivent être écrites sur le module (pour former le module). Il y a une limite ici. Dans le même temps, seules sept équipes peuvent être reconnues, bien qu'elles puissent être enregistrées de manière significative. Afin d'élargir la gamme de commandes vocales qui seront comptabilisées à l'aide du système de regroupement (commande 32), qui est contrôlée par les ports d'entrée du module. En définissant la configuration des signaux sur ces contacts, un groupe de commandes est sélectionné qui sera reconnu. Cela est dû aux performances limitées du contrôleur vocal du module utilisé.

Équipe 20. - Enregistrement d'une ou de plusieurs commandes vocales.

Format: | Aa | 03 + N | 20 | R0 | ... | Rn | 0a |

Où n est le nombre de commandes vocales enregistrées (si une commande n \u003d 0, deux commandes n \u003d 1, etc., conformément au format général des commandes de longueur - longueur), R0 ... Numéros de commande vocale RN (AA 03 20 03 0A - Commande pour écrire une troisième commande vocale).

Équipe 21. - Enregistrement d'une commande vocale et d'une installation pour sa signature.

Format: | Aa | 03 + Siglen | 21 | Record | SIG | 0a |

Lorsque l'enregistrement est un numéro de commande vocale, SIG - Signature (peut être composé de plusieurs octets, de sorte que chaque octet peut correspondre à l'encodage du symbole de l'alphabet si nécessaire), Siglen est le nombre d'octets à partir desquels la signature est composée.

Équipe 22. - Ajout ou suppression d'une signature pour la commande vocale sélectionnée.

Format: | Aa | 03 + Siglen | 22 | Record | SIG | 0a | - Ajout de la signature

| Aa | 03 | 22 | Record | 0a | - Suppression de la signature

Dans le processus d'enregistrement des commandes vocales, vous devez être guidé par des signaux LED. Après avoir entré la commande qui démarre le processus d'enregistrement, il commence rapidement à clignoter un voyant jaune (orange). Dès que la LED rouge s'allume. Il est nécessaire de dire une commande vocale au microphone. En succès, le voyant jaune (orange) s'allumera et redeviendra de nouveau - vous devez confirmer la commande vocale, le prononcer à nouveau. En cas de succès, les deux voyants seront exécutés - la commande vocale est enregistrée.

Une fois les commandes vocales enregistrées dans le module, cela ne se produira pas tant que ces commandes sont placées dans le module "reconnaissant). Pour ce faire, utilisez la commande 30. Après avoir exécuté cette commande, le module commencera à attendre la coïncidence de la commande vocale avec les échantillons préservés. Dans le même temps, vous pouvez reconnaître que des sections. Il clignotera lentement le voyant jaune (orange) sur la carte du module.

Équipe 30. - Télécharger des enregistrements dans le "reconnaissance" (reconnaissant) du module.

Format: | Aa | 2 + N | 30 | R0 | ... | Rn | 0a |

Format de réponse Suivant: | Aa | 07 | 0D | 00 | GRPM | R | Ri | Siglen | SIG | 0a |

Où GRPM est l'information sur le groupe auquel appartient la commande (si utilisé), R est une commande vocale reconnue (selon ces données, vous pouvez distinguer la commande entre vous si les signatures ne sont pas utilisées), RI est la commande Index dans la reconnaissance, Siglen - Signature Signature, SIG - Signature (si utilisé).

Enfin, enfin, si le module devrait fonctionner de manière autonome, vous devez utiliser l'équipe 15 pour lancement automatique Pour la détection prédéfinie. Dans ce cas, le module de reconnaissance vocale fonctionnera de manière indépendante sans avoir besoin d'initialisation après la mise sous tension.

Équipe 15. - Installation de l'Autorun de la reconnaissance lors de la mise sous tension.

Format: | Aa | 03 | 15 | 00 | 0a | - Désactiver la fonction Autorun

| Aa | 03 + N | 15 | Bitmap | R0 | ... | Rn | 0a | - Définition de la fonction Autorun

Pour contrôler la loyauté de l'exécution des commandes de chacun d'eux correspond à sa réponse. En cas de besoin, toutes les données peuvent être trouvées dans la documentation du module de reconnaissance vocale appliquée à la fin de l'article. N'oubliez pas que toutes les valeurs numériques sont présentées dans hexadécimalforme.

Ainsi, à l'aide du système de commande, vous pouvez configurer de flexibilité module de reconnaissance vocale à utiliser à diverses fins. Si la gestion du port de sortie de module simple n'est pas suffisante, le module de reconnaissance vocale peut être connecté à d'autres périphériques via UART ou GPIO. Pour connexion sans fil Vous pouvez utiliser des modules précédemment considérés.

Avec l'aide de modules sans fil, vous pouvez connecter un module de reconnaissance vocale à tous les périphériques dont il est nécessaire. Par exemple, nous le connectons au microcontrôleur, qui par rapport aux données de reconnaissance de la commande vocale reçus sera contrôlée par des LED. Les modules sans fil vous permettent de transmettre des données dans deux directions. Si nécessaire, vous pouvez donc écrire le code d'initialisation du module vocal et enregistrer des commandes vocales si nécessaire pour un microcontrôleur. Dans notre cas, sous le contrôle des PC, plusieurs commandes vocales sont déjà enregistrées dans le module et la reconnaissance automatique est configurée lorsque l'appareil est activé, par conséquent, pour le microcontrôleur, nous ne recevrons que des voyants de données et de contrôle avec ces données. Le microcontrôleur STM32F103C8T6 utilise USArt1 pour recevoir des données et contacter PB10 ... PB15, configuré pour quitter, qui gère les LED. La source Situé dans des applications à la fin de l'article.

Un peu sur les résultats

La reconnaissance vocale n'est pas entièrement exacte. Cela dépend des commandes sélectionnées et des voix vocales. Lorsque vous testez, j'ai découvert plusieurs points négatifs. Lors de l'enseignement des commandes du module, des commandes vocales "une fois" et "deux" ont été choisies. La commande deux a été toujours claire, mais l'équipe "Une fois" était souvent définie comme la commande "deux" et que le deuxième code de commande a été exécuté. Ensuite, lorsque vous essayez de donner des commandes vocales en anglais (et ils n'ont pas été enregistrés dans le module vocal) presque toujours la commande "One" a été définie comme "deux". C'est peut-être tout sur la prononciation, l'intonation et d'autres aspects de la voix humaine posée dans le module vocal de codage d'algorithme de commandes prononcées. Cependant, ces fabricants de secrets dans accès ouvert ne donnent pas. De plus, la qualité de la reconnaissance est influencée par des conditions de bruit externes - bourdonner de la rue, bruit de ventilateur, sons aléatoires, etc. Le fabricant renforce l'attention sur le fait que haut niveau La précision de la reconnaissance a lieu dans des conditions idéales. L'idée d'utiliser un microphone avec un amplificateur, bien entendu augmentera la plage de l'appareil, mais augmente également la probabilité et les erreurs, car le gain de la voix se produira avec une amélioration du bruit.

FinalementSi vous avez des exigences basses pour la reconnaissance vocale et les commandes vocales, ce module fonctionnera honnêtement, de l'argent consacré à celui-ci.

Liste des éléments radio

La désignation Un type Nominal numéro NoterButMon cahier
Ic1 Mk stm32.

STM32F103C8.

1 Dans le cahier
VR1. Régulateur linéaire

AMS1117-3.3.

1 Dans le cahier
Mod1, mod3. Module sans filHC-122 Dans le cahier
Mod2. Module de reconnaissance vocaleVR3.1.1 Dans le cahier
Z1 Quartz8 MHz1

Dans ce projet, j'ai combiné le système de détection de détection et de suivi du visage.

En bref, l'essence du projet: la webcam installé sur le mécanisme rotatif est connectée à un ordinateur exécutant le système d'exploitation Windows et avec un logiciel installé. Opencv.. Si le programme détecte la webcam d'une personne dans le champ de vision, le centre de la personne est calculé. Les coordonnées X et Y sont transmises au contrôleur Arduino, qui est connectée à un ordinateur USB. À son tour, le contrôleur Arduino pour les commandes adoptées gère deux servomoteurs: en coordonnant x et par la coordonnée y, donc - Le système suivant est assuré.

Bibliothèque OpenCV (bibliothèque Open Source Computer Vision) peut être téléchargée. La bibliothèque multiplateforme existe actuellement dans le système d'exploitation suivante: Windows, Linux, Android, Mac OS et même iOS. La bibliothèque fournit un traitement d'image en temps réel. Écrit sur C / C ++.

Donc Ce projet est un mélange de solutions douces et dures. Le traitement de l'image est effectué sur l'ordinateur et la commande de servo est effectuée à l'aide du contrôleur.

Donc, j'ai utilisé pour le projet:

Logiciel:

Le fer:

ordinateur avec Windows 7 SP1

Arduino Uno ou compatible + BP

2 servo

Webcam USB

Alors allons-y.

Étape 1. Installation du logiciel

1) Si vous avez Windows OS, téléchargez le fichier OPENCV-2.3.1-WIN-SuperPack.exe (ou version ultérieure) et installez la bibliothèque.

2) Téléchargez et installez Microsoft Visual C ++ 2010 Express. Si vous avez une version 64 bits de Windows, vous devrez également télécharger Windows SDK (mais pour 64 versions, je ne pouvais pas faire des problèmes, je ne pouvais pas le faire fonctionner à Occenv sous Windows 7 x64).

Le processus de configuration OpenCV pour Visual C ++ lu sur le site officiel.

Étape 2. Fixation de la caméra et des servomoteurs

Je n'ai pas fait la conception de "durable", car après avoir atteint le but ultime, je comprends tout pour le prochain projet.

Webcorer I attaché au servomoteur de l'axe X, et il a à son tour fixé l'axe Y sur le servomoteur. Et tout ce conception a été fixé dans une pince de "troisième mains".

Étape 3. Connexion

Connexion des servomoteurs:

La sortie jaune de l'axe servo x se connecte à la conclusion du contrôleur Arduino

Sortie jaune à partir du serveur Y Axe se connecte au contrôleur de sortie 10 Arduino

Sortie VCC rouge de Servo Connecte à la sortie 5V

Sortie Noir Gnd de Servo se connecte à la sortie du contrôleur ARDUININO GND

Connexion webcam:

La webcam se connecte à un ordinateur via une interface USB. Le programme C ++ identifie la webcam par le numéro de port USB. Il peut être nécessaire de spécifier le port du programme.

Connexion du contrôleur Arduino Uno:

Le contrôleur se connecte également à un ordinateur via une interface USB. Un port COM virtuel apparaît dans le système à effectuer sur le code de programme C ++.

Télécharger des fichiers de projet

Article original sur langue Anglaise (Traduction de Koltkov A.V. pour le site cxem.net)

  • Traitement,
  • Développement de sites Web
  • Idée:

    Est venu en quelque sorte l'idée de faire la voix bureau arduino.mais un arduino ne suffit pas, car Pour le système de maison intelligent, vous devez également communiquer avec un ordinateur et ses systèmes.

    Solution de solution:

    Bitvoicer.
    Je suis tombé sur divers types d'articles à l'aide de Bitvoicer dans un paquet avec Arduino, mais tout le problème est que Bitvoicer fonctionne uniquement sous Windows, ce qui ne vous permet pas d'utiliser le système sur de simples périphériques PI de Rasberry Pi exécutant UNIX.
    Reconnaissance vocale Arduino
    Aussi, Arduino peut être contrôlé par une voix grâce au module de reconnaissance vocale, mais alors que je n'ai pas de puniciers pour son acquisition et que vous avez un certain nombre de désagréments lors de l'utilisation de ce module: un nombre limité de commandes, une formation fastidieuse, pour les nouvelles commandes dont vous avez besoin. Pour clignoter le module, qui est déjà un moins, si le système est requis, débogué et installé.

    Décision

    A commencé à rechercher une solution croisée qui permettrait au système de travailler sur une variété de systèmes d'exploitation. Il y avait telle: Discours à la bibliothèque de texte pour Java / Traitement . Le complexe est mis en œuvre sur la base de la langue Traitement (Java) et Google Speast API. J'ai déjà écrit sur le chat. Cette solution vous permet de suivre une voix en temps réel. enableAutorecord ()Spécifiez la limite de volume enableauTothreshold (), connectez des microphones externes getLinetin (), indiquez la langue de reconnaissance setLanguage (chaîne). La liste complète des fonctionnalités et de la spécificité est sur le site Web du développeur: http://st.getflourish.com. Pour travailler, nous avons besoin de la clé de l'API de la part de Google. Comment l'obtenir décrit ici: www.chromium.org/developers/how-tos/api-keys . Le seul point négatif est que Google Discrand vous permet de ne traiter que 50 demandes par jour, mais dans la pratique, il y a plus de 500 demandes.

    Afin d'être plus facile à naviguer dans le texte, j'applique toutes les sources dans lesquelles les commandes vocales sont déjà sorties, se connectant à Arduino Board, Skatch pour Arduino, confirmation de phrases et tout le reste qui fonctionne déjà et fonctionne déjà: des sources. Après avoir téléchargé le dossier Googletts, nous mettons dans la bibliothèque de traitement "A. Sketch pour Arduino réside dans le dossier Googlets / Arduinosérien. Tout a été écrit sur le traitement 3.0A4, disponible en préalable sur le site officiel.

    Ventes ("Écoutez mon équipe!"):
    La reconnaissance a été déterminée. Vous devez maintenant capturer les commandes dont nous avons besoin et prendre des décisions sur eux. La section est responsable de cette question:
    commandes annulées () (si (résultat.equals ("Arduino")) (// Nous recherchons la conformité // exécution de la commande lors de la réception de la conformité) si (résultat.ft.ft.ft ") (// Effectuer une commande à la réception))
    Réponse vocale
    Nous avons maintenant besoin d'un outil qui sera répondu par une voix humaine en cas de conformité trouvée. Google Translate a été sélectionné comme outil de mise en œuvre et plutôt le module qui convertit le texte sur la voix. Le texte est envoyé par la demande au serveur Google, converti au fichier son et nous a envoyé au format MP3. La section est responsable de cette question:
    Video Googletts (chaîne txt, langage de chaîne) (// la conversion de texte au son se produit par la commande Google ("Texte", "Langue") String U \u003d "http://translate.google.com/translate_tts?tl\u003d"; u \u003d u + langue + "& q \u003d" + txt; u \u003d u.replace ("", "% 20"); essayez (URL URL \u003d nouvelle URL (u); essayez (URLConnection Connection \u003d url.openconnection () ; Connexion. SetrequestProperty ("utilisateur-agent", "Mozilla / 4.0; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; .NET CLR 1.1.30703)") "Connexion.Connect (); INTRISTREAM IS \u003d connexion.getInputStream (); fichier f \u003d nouveau fichier (Sketchpath + "/" + txt + ".mp3"); sortie de sortie \u003d nouveau fichierOutputtream (f); octet buf \u003d nouvel octet; int Len; Tandis que ((len \u003d est.Read (buf))\u003e 0) (out.write (buf, 0, len);) out.close (); is.close (); printLN ("Fichier créé:" + TXT + ".mp3");) attraper (ioexception e) (E.PrintStackTrace ();)) Catch (Malformedurlexception E) (E.PrintStackTrace ();))

    Le traitement des phrases de texte directement est une section responsable:
    VOI VOIGER (String S) (// Exécuté par la commande Voice ("Texte") printLn (s); // Utilisé pour surveiller le fichier texte F \u003d nouveau fichier (Sketchpath + "/" + s + ".mp3") ; // Vérification d'un fichier // Si le fichier est déjà disponible, un fichier Ringfile (F.Exssssssss (F.EXST ()) (PrintLN ("Fichier existe déjà! Regardez le fichier!"); Joueur \u003d minimal.loadfile (S + ". MP3 "); Player.Play ();) // S'il n'y a pas de fichier, créez-le d'autre (println (" Fichier n'est pas encore! Créer! "); Googletts (S," RU "); Joueur \u003d minimum. loadfile (s + ".mp3"); joueur.play ();))

    Un exemple de mise en œuvre de la reconnaissance et de la confirmation vocale:
    Commandes annulées () (si (résultat.Equals ("Ordinateur") (// Nous recherchons une conformité de messagerie ("écouter"); // Nous recevons la confirmation de la voix // exécutant la commande lors de la réception d'une confirmation de voix)
    Il est vivant!

    Traitement + Arduino.

    Eh bien, cela semble être et gagné, mais il manque quelque chose. Maintenant "Main" est tout avec Arduino.
    Initialiser la connexion série dans le traitement pour envoyer des données sur Arduino (pour les utilisateurs Mac et Unix):
    String PortName \u003d Serial.List (); MyPort \u003d nouveau série (ceci, portname, 9600); myport.bufferuntil ("\\ n");

    Pour les utilisateurs de Windows:
    String myPort \u003d nouveau série (ceci, "votre com-port", 9600); myport.bufferuntil ("\\ n");

    Et nous vous enverrons une équipe avec un vote trouvé:
    Commandes annulées () (si (résultat.Equals («Light Light»)) (// Si la phrase vocale est reconnue comme «Activer», vous demanderez MyPort.write («High»); // envoie le haut Commande à la messagerie de connexion série ("Activer la lumière"); // Confirmation de la voix de l'exécution de la commande) Autres si (résultat.equals ("Light")); // envoie la commande basse dans la messagerie Serial Connect Voice (" Éteindre la lumière "); // confirmation // exécutant la commande lors de la réception de la conformité))

    Nous allons maintenant traiter avec l'arduino conseil. Nous devons écouter le port série et pour trouver une commande de la liste, effectuer l'action requise en fonction de l'équipe. Skatch est très simple:
    INT LED \u003d 13; // LED broche sur la configuration du void () (série.begine (9600); // Initialisez la connexion série PINMODE (LED, SORTIE); // PIN LED transmet des données) LOOP () (INT I \u003d 0; // Variable pour la ligne de la ligne dans la mémoire tampon de tampon; // un tableau du tampon pour la hauteur de la hauteur (Serial.Available ()) (// Serial.Anvailable ()) (// Appuyez sur le port série pour les données de données (100); // chaleur lisée dans la mémoire tampon tandis (Serial.Available () && i< 99) { buffer = Serial.read(); } //закрываем массив buffer="\0"; String val = buffer; if (val == "High") { // Если получили значение High Serial.println("Led is On"); // Отправляем в Serial подтверждение получения digitalWrite(led, HIGH); // Включаем светодиод } if (val == "Low") { // Если получили значение Low Serial.println("Led is Off"); // Отправляем в Serial подтверждение получения digitalWrite(led, LOW); // Выключаем светодиод } } }
    Tout. Vérifier.

    Problèmes et plans:

    Parce que Je n'ai pas été programmés avant cette heure, je ne comprends pas complètement certaines choses dans le processus de débogage. Je serai reconnaissant si quelqu'un indique comment résoudre les problèmes de la liste ci-dessous:

    Le problème le plus fondamental est que la phrase vocale ne fonctionne pas entièrement. Les dernières lettres disparaissent. Bien que le fichier son présente de Google Server sous forme normale. Si je comprends bien la situation: le problème du lecteur audio, mais où il n'est pas encore clair.
    - J'ai déjà écrit que l'API de la parole Google a une restriction sur 50 demandes par jour, mais elle s'avère en fait plus. En tout cas, cela ne suffit pas. Je prévois d'enregistrer la reconnaissance locale de l'équipe principale et seulement après sa reconnaissance, le texte restant à envoyer au traitement de Google "Je cherche une solution.
    - Je pense que cela n'empêchera pas d'envoyer des commandes à Ethernet-Shild Arduino, car Certains systèmes peuvent être sur une distance décente de l'ordinateur principal et la connexion série ici ne convient plus. Je ferai cette décision l'autre jour, car Je n'ai pas de routeur en stock pour vous connecter à Arduino avec Ethernet-Shield.

    C'est tout! S'il vous plaît strictement ne pas juger pour les rangées du code! Je viens de commencer à étudier cette tête de pont et je serais extrêmement reconnaissant si vous comprenez mon nez sur la façon dont vous n'avez pas besoin de faire et de le montrer comme vous avez besoin. Je serai aussi heureux que d'autres personnes intéressées se connectent à ce projet - toujours ouvertes à la communication!

    Avez-vous aimé l'article? Partager avec des amis: