Système de reconnaissance faciale et de suivi Arduino. Reconnaissance des chiffres sur le microcontrôleur

  • DIY ou faites-le vous-même
  • Salut Giktime !

    Comme son nom l'indique, cet article se concentrera sur la reconnaissance des nombres sur un microcontrôleur. Je veux faire une réservation tout de suite que cet article ne contiendra pas la source, nous considérons une technologie ou un algorithme de reconnaissance, je dirai seulement que les idées d'une approche systématique sont utilisées. Certains d'entre eux sont décrits dans nos articles (et voilà). Cela est dû au fait que notre approche a tendance à être originale, mais nécessite une clarification de certaines questions. Quelqu'un pourrait dire : "un autre article sur la programmation de microcontrôleurs." En aucun cas, la recherche de tels projets n'a donné de résultats intelligibles, à l'exception de ce vidéo... Une chose ressort clairement des discussions sur les forums : l'idée d'obtenir un tel appareil (caméra + microcontrôleur = le résultat de la reconnaissance en sortie, et pas seulement une image capturée) est venue à beaucoup, mais est restée sans mise en œuvre. Oui, et la reconnaissance, selon l'opinion générale, nécessite beaucoup de ressources informatiques et les microcontrôleurs ne conviennent pas pour cela, en particulier, il y a eu des déclarations sur l'Arduino selon lesquelles cela est généralement impossible. Si cela devient intéressant, s'il vous plaît, sous le chat.

    Quelles que soient les questions évidentes qui se posent, nous y répondrons :

    • Non, ce n'est pas un service de reconnaissance d'images
    • Non, ce n'est pas OpenCV
    • Non, ce ne sont pas des réseaux de neurones
    • L'analyse morphologique des objets qui composent la figure est utilisée
    • Oui, la reconnaissance se fait par le microcontrôleur !

    Idée

    Bref, tout est parti de l'envie de m'essayer et de tester mes idées en reconnaissance d'images. Au cours de la discussion, nous sommes arrivés à la conclusion que nous pouvons faire avec une petite puissance de calcul pour résoudre ce problème. Pour des raisons évidentes, nous ne décrirons pas les détails de ces discussions.

    Installation

    Ainsi, la tâche est définie, la mise en œuvre est nécessaire. Sans s'écarter du déjà établi
    nous prenons ce qui est à portée de main. Et il y avait quelques Arduino Uno, une vieille souris optique et un lecteur de CD à portée de main. Au fait, pour utiliser le capteur souris optique en tant qu'appareil photo pour obtenir une image, nous avons été incités par la lecture il était une fois, enfin, tout le reste du matériel "souris". La seule chose que nous devions faire était de retirer le capteur et tous ses cerclages pour faciliter l'utilisation, ainsi que d'y coller la lentille, que nous avons soigneusement arrachée du lecteur de CD. Cela était nécessaire pour augmenter la distance entre le sujet et l'appareil photo, sinon les chiffres de notre taille ne correspondaient pas et seule une petite partie était visible. Soit dit en passant, devant l'objectif du lecteur de CD, nous avons essayé de fixer l'optique de la webcam, mais cela n'a pas fonctionné.

    Suite


    Puis la question s'est posée de savoir comment positionner cet appareil photo sur le sujet. Un vieux microscope cassé, qui gisait au repos, nous a beaucoup aidés. Respectueusement retiré de lui le mécanisme de contrôle de la scène du sujet. Ce mécanisme nous a permis de déplacer la caméra uniquement selon deux axes, et l'idée est immédiatement venue d'utiliser le guide de la tête laser du lecteur de CD. Tout cela a été fixé sur le boîtier du lecteur de CD qui souffre depuis longtemps. En conséquence, nous avons obtenu un mécanisme de positionnement de caméra cool.

    Suite


    Total: nous avons une soi-disant caméra, il y a un mécanisme de positionnement, il reste à mettre un morceau de papier avec un numéro et à obtenir une image de la caméra. C'est là que les "problèmes" ont commencé. Comme les caractéristiques du capteur optique "souris" sont très rares pour une utilisation en tant qu'appareil photo, ils ont commencé à improviser avec le rétroéclairage.

    Suite


    Il est devenu clair que juste mettre en évidence ne fonctionne pas, l'intensité est importante, la direction de la lumière extérieure fait également des ajustements. J'ai dû allumer un autre "arduinka" pour contrôler l'intensité du rétro-éclairage ( bien sûr, il était possible de le contrôler d'une manière différente, mais plus tard et pas seulement le rétroéclairage, mais aussi la commutation des chiffres sur l'indicateur). Au final, il s'est avéré que la prise de vue à la lumière est bien meilleure. Et si, par exemple, vous utilisez un indicateur lumineux à sept segments comme cible, alors le capteur le voit généralement parfaitement. Donc, maintenant, nous avons un indicateur et une bande avec des chiffres blancs remplis d'un fond noir comme objets de prise de vue.

    à gauche se trouve une image en niveaux de gris obtenue à partir de l'indicateur (on obtient une telle image du capteur), à droite est binarisée.

    Suite


    Vue générale de l'assemblée


    installation précoce


    Unité de reconnaissance


    Un rôle important dans notre installation est joué par l'unité dite de reconnaissance (dans l'image ci-dessus). Comme vous pouvez le voir, il se compose d'un Arduino Uno et d'un émetteur wifi bien connu. ESP8266... Je m'explique, nous avons besoin d'un émetteur wifi pour voir le résultat de la reconnaissance sur une tablette. L'application sur la tablette envoie une requête, "arduinka", recevant la requête, "prend" l'image du capteur de la souris, puis la binarise. Après la binarisation, la reconnaissance se produit et après son achèvement, une réponse est formée. En réponse, nous envoyons le résultat de la reconnaissance et 41 octets pour créer une image binarisée sur l'écran de la tablette, pour ainsi dire, pour plus de clarté.

    Si vous regardez en arrière, alors "l'arduinka" se voit confier de bonnes fonctionnalités: travailler avec l'appareil photo, reconnaître et travailler avec esp8266. Ce qui ne pouvait qu'affecter le travail - j'ai dû faire face à un manque de mémoire. Je n'ai jamais pensé que j'aurais à récupérer chaque octet de mémoire.

    Démonstration du processus de reconnaissance

    Au lieu d'une conclusion

    C'est tout, en fait. Il y a encore beaucoup de travail à faire. Et la première tâche : la reconnaissance des nombres (chaînes de nombres) capturés par une caméra "humaine" (pas un "capteur souris") et le transfert de la technologie développée vers l'ESP8266 et la réduction de l'intensité de la lutte pour chaque octet de mémoire.

    Nous serons heureux de répondre à vos questions.

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

    En bref l'essence du projet : une webcam installée sur un mécanisme rotatif est connectée à un ordinateur sous le contrôle d'une salle d'opération Systèmes Windows et avec l'établi Logiciel Opencv... Si le programme détecte un visage dans le champ de vision de la webcam, le centre du visage est calculé. Les coordonnées X et Y sont transmises au contrôleur Arduino, qui est connecté à l'ordinateur via USB. A son tour, le contrôleur Arduino, en fonction des commandes reçues, contrôle deux servomoteurs : en coordonnée X et en coordonnée Y, donc. un système de suivi est fourni.

    La bibliothèque OpenCV (Open Source Computer Vision Library) est téléchargeable. La bibliothèque est multiplateforme, elle existe actuellement pour les systèmes d'exploitation suivants : Windows, Linux, Android, Mac OS et même iOS. La bibliothèque fournit un traitement d'image en temps réel. Écrit en C/C++.

    Ce. ce projet est un mélange de solutions douces et dures. Le traitement des images est effectué sur un ordinateur et l'asservissement est effectué à l'aide d'un contrôleur.

    Donc ce que 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 (par Thierry Schneider)

    Le fer:
    Ordinateur Windows 7 SP1
    Arduino Uno ou compatible + bloc d'alimentation
    2 servos
    webcam USB

    Alors allons-y.

    Étape 1. Installation du logiciel

    1) Si vous avez un système d'exploitation Windows, téléchargez le fichier OpenCV-2.3.1-win-superpack.exe (ou une version ultérieure) et installez la bibliothèque.

    2) Téléchargez et installez Microsoft Visual C ++ 2010 Express. Si vous avez 64 bits Version Windows, vous devrez également télécharger le SDK Windows (mais pour la version 64, il peut y avoir des problèmes, je n'ai toujours pas réussi à faire fonctionner OpenCV sous Windows 7 x64).

    Lisez le processus d'installation d'OpenCV pour Visual C ++ sur le site officiel.

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

    Je n'ai pas rendu la structure "durable", car après avoir atteint l'objectif final, je démonte tout pour le prochain projet.
    J'ai attaché la webcam au servomoteur de l'axe X, et elle l'a à son tour fixée au servomoteur de l'axe Y. Et j'ai fixé toute cette structure dans une pince des "troisièmes mains".

    Étape 3. Connexion

    Connexion des servomoteurs :
    La broche jaune du servo de l'axe X se connecte à la broche 9 du contrôleur Arduino
    La broche jaune du servo de l'axe Y se connecte à la broche 10 du contrôleur Arduino
    La broche Vcc rouge du servo se connecte à la broche 5V
    La broche GND noire du servo se connecte à la broche GND du contrôleur Arduino

    Connexion webcam :
    La webcam est connectée à l'ordinateur par interface USB... Le programme C++ identifie la webcam par le numéro de port USB. Vous devrez peut-être spécifier le port dans le 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, qui doit être inclus dans le code du programme C ++.

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

    D'une certaine manière l'idée est venue de faire une voix Contrôle Arduino, mais un Arduino ne suffit pas, car pour le système Maison intelligente vous devez également communiquer avec l'ordinateur et ses systèmes.

    Trouver une solution :

    BitVoicer
    Je suis tombé sur toutes sortes d'articles utilisant BitVoicer en conjonction avec Arduino, mais tout le problème est que BitVoicer ne fonctionne que sous Windows, et cela ne permet pas d'utiliser le système sur des appareils simples comme Rasberry Pi exécutant Unix.
    Reconnaissance vocale Arduino
    Arduino peut également être contrôlé par la voix grâce au module de reconnaissance vocale, mais jusqu'à présent je n'ai aucun plaisir à l'acheter et il y a un certain nombre d'inconvénients lors de l'utilisation de ce module : un nombre limité de commandes, un apprentissage fastidieux, les nouvelles commandes nécessitent un flash du module, ce qui est déjà un inconvénient si le système est débogué et installé.

    Solution

    J'ai commencé à chercher une solution multiplateforme qui permettrait au système de fonctionner sur un ensemble systèmes d'exploitation... J'ai trouvé ça : Bibliothèque Speech to Text pour Java / Traitement... Le complexe est mis en œuvre sur la base de la langue Traitement (Java) et API de discours de Google nous avons déjà écrit sur le chat. Cette décision vous permet de suivre votre voix en temps réel activer l'enregistrement automatique (), spécifiez la limite de volume enableAutoThreshold (), relier microphones externes getLineIn (), indiquer la langue de reconnaissance setLanguage (chaîne)... Une liste complète des fonctionnalités et des spécificités se trouve sur le site Web du développeur : http://stt.getflourish.com. Pour le travail, nous avons besoin Google Discours Clé API. Comment l'obtenir est décrit ici : www.chromium.org/developers/how-tos/api-keys... Seul point négatif, Google Speech ne permet de traiter que 50 requêtes par jour, mais en pratique plus de 500 requêtes sont traitées.

    Afin de faciliter la navigation dans le texte à l'avenir, je joins toutes les sources, qui sont déjà écrites commandes vocales, connexion à la carte Arduino, croquis pour la carte Arduino, confirmation vocale des phrases et tout ce qui est déjà là et fonctionne : sources. Après le téléchargement, le dossier GoogleTTS est placé dans les bibliothèques de traitement "a. Le croquis de l'Arduino se trouve dans le dossier GoogleTTS / ArduinoSerial. Tout a été écrit en Processing 3.0a4, disponible en pré-version sur le site officiel.

    Mise en œuvre("Écoutez ma commande!"):
    Nous avons décidé de la reconnaissance. Maintenant, nous devons saisir les commandes dont nous avons besoin et prendre des décisions à leur sujet. La section est responsable de cela:
    void commandes () (if (result.equals ("arduino")) (// Recherche d'une correspondance // Exécution de la commande lors de la réception d'une correspondance) else if (result.equals ("combien de temps")) (// Exécution de la commande lors de la réception d'un match ))
    Réponse vocale
    Nous avons maintenant besoin d'un outil qui nous répondra avec une voix humaine en cas de correspondance trouvée. Google Translate a été choisi comme outil d'implémentation, ou plutôt comme module qui convertit le texte en voix. Le texte est envoyé par une requête au serveur Google, converti en fichier audio et nous a été renvoyé au format mp3. La section est responsable de cela:
    void googleTTS (String txt, String language) (// le texte est converti en son à l'aide de la commande googleTTS ("text", "language") String u = "http://translate.google.com/translate_tts?tl="; u = u + langue + "& q =" + txt; u = u.replace ("", "% 20"); essayez ( URL URL= nouvelle URL (u); try (URLConnection connection = url.openConnection (); connection.setRequestProperty ("User-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.2.30703) "); connection.connect (); InputStream est = connection.getInputStream (); Fichier f = nouveau fichier (sketchPath +" / "+ txt +" .mp3 "); OutputStream out = nouveau FileOutputStream ( f); octet buf = nouvel octet; int len; while ((len = is.read (buf))> 0) (out.write (buf, 0, len);) out.close (); is.close ( ); println ("Fichier créé:" + txt + ".mp3");) catch (IOException e) (e.printStackTrace ();)) catch (MalformedURLException e) (e.printStackTrace ();))

    La section est responsable du traitement des phrases de texte directement :
    void voicer (String s) (// Effectué par la commande voicer ("text") println (s); // utilisé pour surveiller le texte File f = new File (sketchPath + "/" + s + ".mp3"); // Vérification du fichier // Si le fichier existe déjà, lit le fichier if (f.exists ()) (println ("Le fichier existe déjà ! Lecture du fichier !"); Player = minim.loadFile (s + ". mp3"); player.play ();) // S'il n'y a pas encore de fichier, créez-le autre (println ("Il n'y a pas encore de fichier ! Création ! !"); GoogleTTS (s, "ru"); player = minim.loadFile (s + ".mp3"); player.play (;))

    Un exemple de mise en œuvre de la reconnaissance et de la confirmation vocale :
    void commandes () (if (result.equals ("ordinateur")) (// Recherche d'un voicer de correspondance ("Ecoute"); // Obtention d'une confirmation vocale // Exécution de la commande lorsqu'une correspondance est reçue))
    Il est vivant!

    Traitement + Arduino

    Eh bien, cela semble avoir fonctionné, mais il manque quelque chose. Maintenant, "fions-nous des amis" tout cela avec Arduino.
    Nous initialisons la connexion série dans Processing pour envoyer des données à l'Arduino (par Utilisateurs de Mac et Unix) :
    String portName = Serial.list (); myPort = nouveau Serial (this, portName, 9600); myPort.bufferUntil ("\ n");

    Pour Utilisateurs Windows:
    String myPort = new Serial (ceci, "Votre port COM", 9600); myPort.bufferUntil ("\ n");

    Et nous y enverrons une commande lorsqu'une correspondance vocale sera trouvée :
    void commandes () (if (result.equals ("allumer la lumière")) (// Si la phrase vocale a été reconnue comme "allumer la lumière", alors nous exécutons la requête myPort.write ("Élevé"); // Envoie la commande High au voicer de la connexion série ("Allumer la lumière"); // Confirmation vocale de l'exécution de la commande) else if (result.equals ("éteindre la lumière")) (myPort.write (" Low"); // Envoie la commande Low au voicer de la connexion série (" Éteindre la lumière "); // Confirmation // Exécution de la commande dès réception d'une correspondance))

    Passons maintenant à la carte Arduino. Nous devons écouter le port série et lorsque nous trouvons une commande dans la liste, effectuer l'action requise en fonction de la commande. Le croquis est très simple :
    led int = 13; // Pin de la LED sur la carte void setup () (Serial.begin (9600); // Initialise la connexion série pinMode (led, OUTPUT); // La pin de la LED transmet des données) void loop () (int i = 0; // variable pour alimenter une ligne dans un tampon char buffer; // un tableau d'un tampon pour y insérer une ligne if (Serial.available ()) (// Vérifier le port série pour le délai de données (100 ); // alimente la lecture dans le tampon pendant que (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érification.

    Problèmes et plans :

    Parce que Je n'ai jamais fait de programmation auparavant, je ne comprends pas complètement certaines choses dans le processus de débogage. Je serais reconnaissant si quelqu'un pouvait me dire comment résoudre les problèmes de la liste ci-dessous:

    Le problème le plus fondamental est que toute la phrase vocale n'est pas prononcée. Les dernières lettres disparaissent. Bien que le fichier son soit fourni avec serveur google dans forme normale... Si je comprends bien la situation: le problème du lecteur audio, mais où exactement n'est pas encore clair.
    - J'ai déjà écrit que l'API Google Speech a une limite de 50 requêtes par jour, mais en fait cela s'avère plus. En tout cas, cela ne suffit pas. Je prévois d'enregistrer la reconnaissance locale de la commande principale et seulement après sa reconnaissance, envoyer le reste du texte pour traitement par Google. "Je cherche une solution.
    - Je pense que cela ne fera pas de mal d'envoyer des commandes au shield Ethernet Arduino, car certains systèmes peuvent être à une distance décente de l'ordinateur hôte et la connexion série ne fonctionnera plus ici. Je traiterai de cette décision un de ces jours, tk. Je n'ai pas de routeur pour connecter un Arduino avec un blindage Ethernet.

    C'est tout! S'il vous plaît ne jugez pas strictement pour les lignes de code! Je viens juste de commencer à étudier cette tête de pont et je serai extrêmement reconnaissant si vous mettez votre nez dans la façon dont il n'est pas nécessaire de le faire et me montrez comment le faire. Je serai également heureux si d'autres personnes intéressées se joignent à ce projet - je suis toujours ouvert à la communication !

    D'une certaine manière l'idée est venue de faire commande vocale Arduino, mais un seul Arduino ne suffit pas, car pour un système de maison intelligente, vous devez également communiquer avec un ordinateur et ses systèmes.

    Trouver une solution :

    BitVoicer
    Je suis tombé sur toutes sortes d'articles utilisant BitVoicer en conjonction avec Arduino, mais tout le problème est que BitVoicer ne fonctionne que sous Windows, et cela ne permet pas d'utiliser le système sur des appareils simples comme Rasberry Pi exécutant Unix.
    Reconnaissance vocale Arduino
    Arduino peut également être contrôlé par la voix grâce au module de reconnaissance vocale, mais jusqu'à présent je n'ai aucun plaisir à l'acheter et il y a un certain nombre d'inconvénients lors de l'utilisation de ce module : un nombre limité de commandes, un apprentissage fastidieux, les nouvelles commandes nécessitent un flash du module, ce qui est déjà un inconvénient si le système est débogué et installé.

    Solution

    J'ai commencé à chercher une solution multiplateforme qui permettrait au système de fonctionner sur une variété de systèmes d'exploitation. J'ai trouvé ça : Bibliothèque Speech to Text pour Java / Traitement... Le complexe est mis en œuvre sur la base de la langue Traitement (Java) et API de discours de Google nous avons déjà écrit sur le chat. Cette solution vous permet de suivre votre voix en temps réel activer l'enregistrement automatique (), spécifiez la limite de volume enableAutoThreshold (), connectez des microphones externes getLineIn (), indiquer la langue de reconnaissance setLanguage (chaîne)... Une liste complète des fonctionnalités et des spécificités se trouve sur le site Web du développeur : http://stt.getflourish.com. Pour fonctionner, nous avons besoin d'une clé API Google Speech. Comment l'obtenir est décrit ici : www.chromium.org/developers/how-tos/api-keys... Seul point négatif, Google Speech ne permet de traiter que 50 requêtes par jour, mais en pratique plus de 500 requêtes sont traitées.

    Afin de faciliter la navigation dans le texte à l'avenir, je joins toutes les sources qui contiennent déjà des commandes vocales, la connexion à la carte Arduino, un croquis pour la carte Arduino, la confirmation vocale des phrases et tout ce qui est déjà là et travail : sources. Après le téléchargement, le dossier GoogleTTS est placé dans les bibliothèques de traitement "a. Le croquis de l'Arduino se trouve dans le dossier GoogleTTS / ArduinoSerial. Tout a été écrit en Processing 3.0a4, disponible en pré-version sur le site officiel.

    Mise en œuvre("Écoutez ma commande!"):
    Nous avons décidé de la reconnaissance. Maintenant, nous devons saisir les commandes dont nous avons besoin et prendre des décisions à leur sujet. La section est responsable de cela:
    void commandes () (if (result.equals ("arduino")) (// Recherche d'une correspondance // Exécution de la commande lors de la réception d'une correspondance) else if (result.equals ("combien de temps")) (// Exécution de la commande lors de la réception d'un match ))
    Réponse vocale
    Nous avons maintenant besoin d'un outil qui nous répondra avec une voix humaine si une correspondance est trouvée. Google Translate a été choisi comme outil d'implémentation, ou plutôt comme module qui convertit le texte en voix. Le texte est envoyé par une requête au serveur de Google, converti en fichier son et nous est renvoyé au format mp3. La section est responsable de cela:
    void googleTTS (String txt, String language) (// le texte est converti en son à l'aide de la commande googleTTS ("text", "language") String u = "http://translate.google.com/translate_tts?tl="; u = u + langue + "& q =" + txt; u = u.replace ("", "% 20"); try (URL url = nouvelle URL (u); try (URLConnection connection = url.openConnection () ; connexion. setRequestProperty ("User-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.2.30703)"); connexion .connect ( ); InputStream est = connection.getInputStream (); File f = nouveau fichier (sketchPath + "/" + txt + ".mp3"); OutputStream out = nouveau FileOutputStream (f); octet buf = nouvel octet; int len; while ((len = is.read (buf))> 0) (out.write (buf, 0, len);) out.close (); is.close (); println ("Fichier créé :" + txt + " .mp3 ");) catch (IOException e) (e.printStackTrace ();)) catch (MalformedURLException e) (e.printStackTrace ();))

    La section est responsable du traitement des phrases de texte directement :
    void voicer (String s) (// Effectué par la commande voicer ("text") println (s); // utilisé pour surveiller le texte File f = new File (sketchPath + "/" + s + ".mp3"); // Vérification du fichier // Si le fichier existe déjà, lit le fichier if (f.exists ()) (println ("Le fichier existe déjà ! Lecture du fichier !"); Player = minim.loadFile (s + ". mp3"); player.play ();) // S'il n'y a pas encore de fichier, créez-le autre (println ("Il n'y a pas encore de fichier ! Création ! !"); GoogleTTS (s, "ru"); player = minim.loadFile (s + ".mp3"); player.play (;))

    Un exemple de mise en œuvre de la reconnaissance et de la confirmation vocale :
    void commandes () (if (result.equals ("ordinateur")) (// Recherche d'un voicer de correspondance ("Ecoute"); // Obtention d'une confirmation vocale // Exécution de la commande lorsqu'une correspondance est reçue))
    Il est vivant!

    Traitement + Arduino

    Eh bien, cela semble avoir fonctionné, mais il manque quelque chose. Maintenant, "fions-nous des amis" tout cela avec Arduino.
    Nous initialisons une connexion série dans Processing pour envoyer des données à l'Arduino (pour les utilisateurs Mac et Unix):
    String portName = Serial.list (); myPort = nouveau Serial (this, portName, 9600); myPort.bufferUntil ("\ n");

    Pour les utilisateurs Windows :
    String myPort = new Serial (ceci, "Votre port COM", 9600); myPort.bufferUntil ("\ n");

    Et nous y enverrons une commande lorsqu'une correspondance vocale sera trouvée :
    void commandes () (if (result.equals ("allumer la lumière")) (// Si la phrase vocale a été reconnue comme "allumer la lumière", alors nous exécutons la requête myPort.write ("Élevé"); // Envoie la commande High au voicer de la connexion série ("Allumer la lumière"); // Confirmation vocale de l'exécution de la commande) else if (result.equals ("éteindre la lumière")) (myPort.write (" Low"); // Envoie la commande Low au voicer de la connexion série (" Éteindre la lumière "); // Confirmation // Exécution de la commande dès réception d'une correspondance))

    Passons maintenant à la carte Arduino. Nous devons écouter le port série et lorsque nous trouvons une commande dans la liste, effectuer l'action requise en fonction de la commande. Le croquis est très simple :
    led int = 13; // Pin de la LED sur la carte void setup () (Serial.begin (9600); // Initialise la connexion série pinMode (led, OUTPUT); // La pin de la LED transmet des données) void loop () (int i = 0; // variable pour alimenter une ligne dans un tampon char buffer; // un tableau d'un tampon pour y insérer une ligne if (Serial.available ()) (// Vérifier le port série pour le délai de données (100 ); // alimente la lecture dans le tampon pendant que (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érification.

    Problèmes et plans :

    Parce que Je n'ai jamais fait de programmation auparavant, je ne comprends pas complètement certaines choses dans le processus de débogage. Je serais reconnaissant si quelqu'un pouvait me dire comment résoudre les problèmes de la liste ci-dessous:

    Le problème le plus fondamental est que toute la phrase vocale n'est pas prononcée. Les dernières lettres disparaissent. Bien que le fichier son provienne du serveur Google sous sa forme normale. Si je comprends bien la situation: le problème du lecteur audio, mais où exactement n'est pas encore clair.
    - J'ai déjà écrit que l'API Google Speech a une limite de 50 requêtes par jour, mais en fait cela s'avère plus. En tout cas, cela ne suffit pas. Je prévois d'enregistrer la reconnaissance locale de la commande principale et seulement après sa reconnaissance, envoyer le reste du texte pour traitement par Google. "Je cherche une solution.
    - Je pense que cela ne fera pas de mal d'envoyer des commandes au shield Ethernet Arduino, car certains systèmes peuvent être à une distance décente de l'ordinateur hôte et la connexion série ne fonctionnera plus ici. Je traiterai de cette décision un de ces jours, tk. Je n'ai pas de routeur pour connecter un Arduino avec un blindage Ethernet.

    C'est tout! S'il vous plaît ne jugez pas strictement pour les lignes de code! Je viens juste de commencer à étudier cette tête de pont et je serai extrêmement reconnaissant si vous mettez votre nez dans la façon dont il n'est pas nécessaire de le faire et me montrez comment le faire. Je serai également heureux si d'autres personnes intéressées se joignent à ce projet - je suis toujours ouvert à la communication !

    Vous avez aimé l'article ? A partager entre amis :