Reconnaissance des chiffres sur le microcontrôleur

Bonjour Giktayms!

UPD: Il y a une démonstration vidéo .

Comme son nom l'indique, cet article se concentrera sur la reconnaissance des nombres sur le microcontrôleur. Je veux faire une réservation tout de suite que le code source ne sera pas donné dans cet article, la technologie ou l'algorithme de reconnaissance sera pris en compte, je peux seulement dire que les idées d'une approche système sont utilisées. Certains d'entre eux sont présentés dans nos articles ( ici , ici et ici ). Cela est dû au fait que notre approche s'appuie sur l'originalité, mais nécessite une clarification de certaines questions. Quelqu'un pourrait dire: "un autre article sur la programmation des microcontrôleurs." Pas du tout, la recherche de tels projets n'a donné aucun résultat intelligible, sauf pour cette vidéo. Des discussions sur les forums, une chose est claire: l'idée d'obtenir un tel appareil (appareil photo + microcontrôleur = résultat de reconnaissance en sortie, et pas seulement une image capturée) est venue à beaucoup, mais est restée sans implémentation. Oui, et la reconnaissance, par tous les comptes, nécessite beaucoup de ressources informatiques et les microcontrôleurs ne conviennent pas à cela, en particulier concernant Arduino, il y avait des dictons selon lesquels cela était impossible du tout. Si cela devenait intéressant, je demande du chat.




Qu'il n'y aurait pas de questions évidentes, nous y répondrons:

  • Non, ce n'est pas un service de reconnaissance d'image.
  • Non, ce n'est pas OpenCV
  • Non, ce ne sont pas des réseaux de neurones.
  • Une analyse morphologique des objets qui composent la figure est utilisée.
  • Oui, la reconnaissance est faite précisément par le microcontrôleur!


Idée


Bref, tout a commencé avec l'envie de vous essayer et de tester vos idées en reconnaissance d'image. 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, les détails de ces discussions ne seront pas décrits.

L'installation


Ainsi, la tâche est définie, la mise en œuvre est nécessaire. Sans s'écarter des principes déjà établis ,
nous prenons ce qui est à portée de main. Et à portée de main était un couple d'Arduino Uno, une vieille souris optique et un lecteur de CD. Soit dit en passant, un article nous a incité à utiliser un capteur de souris optique comme caméra pour l'acquisition d'imageslu il y a longtemps, eh bien, en fait, le reste concerne le matériel «souris». La seule chose que nous avons eu à dessouder le capteur et l'ensemble de son faisceau pour en faciliter l'utilisation, ainsi qu'à y fixer un objectif, que nous avons soigneusement «arraché» du lecteur de CD. Cela était nécessaire pour augmenter la distance du sujet à 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 caméra Web, mais d'une manière ou d'une autre, nous n'avons pas grandi ensemble.



En savoir plus





Puis la question s'est posée de savoir comment positionner cet appareil photo sur le sujet. Ici, un vieux microscope cassé qui restait inactif nous a beaucoup aidés. Avec respect, ils ont supprimé le mécanisme de contrôle de la table en question. Ce mécanisme nous a permis de déplacer la caméra uniquement sur deux axes, puis l'idée est venue d'utiliser le guide laser de la tête du lecteur de CD. Tout cela a été corrigé sur le boîtier à partir d'un lecteur de CD qui souffre depuis longtemps. En conséquence, nous avons obtenu un mécanisme de positionnement de caméra cool.



En savoir plus







Total: nous avons un soi-disant appareil photo, nous avons un mécanisme de positionnement, il reste à mettre un morceau de papier avec un appareil photo numérique et à obtenir une image de l'appareil photo. Et puis les "problèmes" ont commencé. Comme les caractéristiques du capteur optique «souris» sont très médiocres pour l'utiliser comme appareil photo, ils ont commencé à improviser avec rétro-éclairage.



En savoir plus







Il est devenu clair que le simple fait de surligner ne fonctionne pas, l'intensité est importante, la direction de la lumière externe fait également des ajustements. J'ai dû inclure un autre «arduinka» dans mon travail pour contrôler l'intensité du rétroéclairage ( bien sûr, il pouvait être contrôlé différemment, mais plus tard non seulement le rétroéclairage, mais aussi en changeant les chiffres sur l'indicateur ). En conséquence, il s'est avéré que la prise de vue à la lumière était bien meilleure. Et si, par exemple, vous utilisez un indicateur lumineux à sept segments comme cible, le capteur le voit parfaitement parfaitement. Donc, maintenant, nous avons un indicateur et une bande avec des chiffres blancs inondés d'un fond noir comme objets de prise de vue.



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



En savoir plus





Vue générale de l'ensemble complet






installation précoce









Bloc de reconnaissance




Un rôle important dans notre installation est joué par la soi-disant unité de reconnaissance (dans l'image ci-dessus). Comme vous pouvez le voir, il se compose d'Arduino Uno et du célèbre émetteur wifi ESP8266 . J'explique, nous avons besoin d'un émetteur wifi pour voir le résultat de la reconnaissance sur la tablette. L'application sur la tablette envoie une requête, "arduinka", reçoit une requête, "prend" l'image du capteur de la souris, puis la binarise. Après la binarisation, la reconnaissance a lieu et après son achèvement, une réponse est formée. Dans la réponse, nous envoyons le résultat de la reconnaissance et 41 octets pour construire une image binarisée sur l'écran de la tablette, pour ainsi dire, pour plus de clarté.

Si vous regardez en arrière, alors sur le "arduinka" est attribué une bonne fonctionnalité: travailler avec l'appareil photo et la reconnaissance, 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 je devrais jamais conquérir chaque octet de mémoire.

Processus de reconnaissance




Au lieu d'une conclusion


C'est tout. Il reste encore beaucoup à faire. Et la première tâche: reconnaissance des nombres (une chaîne de chiffres) enregistrés par une caméra «humaine» (et non un «capteur de souris») et transfert de la technologie développée sur ESP8266 et une réduction de l'intensité de la lutte pour chaque octet de mémoire.

Nous serons ravis de répondre à vos questions.

Source: https://habr.com/ru/post/fr397193/


All Articles