de temps en temps lorsqu’un projet vient avec ce pouvoir magique pour consommer votre temps et votre attention pendant de nombreux mois. Lorsque vous le terminez enfin, vous vous sentez désolé de ne pas avoir à faire de plus.

Qu’est-ce qui est si spécial à propos de ce lecteur Bingo Ball? Cela peut sembler être un projet OCR ordinaire à première vue; Une caméra vidéo capture l’image et le logiciel OCR reconnaît le nombre. facile comme ça. Et cela fonctionne sans problèmes, comme chaque gadget facile.

Mais là encore, peut-être que ce n’est pas si simple. Les chiffres sont dispersés partout dans la balle, ils doivent donc être localisés en premier et le meilleur candidat à la lecture doit être sélectionné. Ensuite, des chiffres sont peints sur une sphère plutôt qu’une surface plane, ce qui les rend déformés au point où leur forme doit être récupérée en premier. En outre, l’angle de lecture n’est pas fixé mais quelque part sur une échelle à 360 °. Et puis nous avons le problème d’éblouissement à démarrer, car les boules de bingo sont si brillantes que chaque source de lumière se reflète comme une tache brillante saturée.

Alors, est-ce tout? Eh bien, presque. La tâche devrait être effectuée par un microcontrôleur incorporé, avec une vitesse et une mémoire limitées, mais le processus de reconnaissance d’une balle doit être rapide – 500 ms au pire. Mais ce n’est qu’une partie du processus. Le projet comprend le mécanisme pipeliné qui accepte la balle, le transporte à scanner par l’OCR puis tiré par la caméra vidéo de diffusion publique avant qu’elle ne soit larguée. Et enfin, si la lecture n’était pas assez fiable, la balle doit être pivotée subtilement de sorte que les chiffres soient repositionnés pour une autre tentative de lecture.

Malgré ces défis, j’ai réussi à construire ce système. C’est rapide et fiable, et j’ai découvert des astuces très intéressantes en cours de route. Jetez un coup d’œil à la vidéo de démonstration rapide ci-dessous pour avoir une idée de la vitesse et de ce que le système “voit”. Ensuite, rejoignez-moi après la pause pour plonger dans les détails de cette version intégrée intéressante.

Initialement, je pensais que je devrais utiliser un réseau de neurones pour le processus de reconnaissance, mais il s’est avéré que la reconnaissance est en réalité la partie la plus simple du projet et qu’elle serait beaucoup plus simple et plus rapide de le faire algorithmique. La partie difficile identifie ce qui est sur quoi sur toute l’image, localisant le meilleur nombre, la ligne sous elle et mesurer à quel point il devrait être tourné. En commençant avec rien de plus qu’une image bitmap, le processeur doit faire beaucoup de mathématiques, même avant de pouvoir être sûr si le numéro consiste en un ou deux chiffres.

Schéma simplifié de la section OCR
VGA pendant le développement

Pour faciliter le développement, la maintenance et les ajustements, le même MCU est utilisé pour la génération de signal VGA, en plus de la récupération et du traitement de l’image. Il ne présente pas seulement l’image numérisée, mais comprend également des paramètres actuels et des contenus de RAM. La carte du contrôleur dispose d’un connecteur VGA, mais il ne doit pas être utilisé pendant le fonctionnement normal de l’unité. VGA Monitor n’a rien de commun avec les moniteurs de diffusion dans la salle de bingo, car il existe deux caméras et systèmes d’éclairage indépendants.

La génération de signal VGA consomme beaucoup de temps de processeur, de sorte qu’il est désactivé lors de la récupération et du traitement de l’image, ce qui correspond à environ 500 ms pendant chaque cycle de lecture de balle. Les signaux de synchronisation sont générés de manière transparente par les périphériques PWM internes et ils sont actifs tout le temps, de sorte que la restauration de l’image après l’établissement du signal RVB est rapide.

Dans ce cas, le microcontrôleur de 16 bits PIC24EP512GP806 a été utilisé avec 586/52 K de mémoire de programme / de données et de la vitesse d’exécution de 60 mips.

Chercher l’image

La caméra vidéo analogique anticogique peu coûteuse a été utilisée dans la première phase de développement, mais a ensuite été substituée par une caméra de cube numérique. Les deux étaient similaires dans le prix et la performance, mais ce dernier est venu avec la lentille qui a une longueur focale plus élevée, la distance pouvait donc être plus élevée et la caméra vidéo pouvait voir la plus grande surface de la balle.

Pour un tel objet, la meilleure source de lumière devrait être des LED blanches, mais l’éblouissement était assez mauvais avec la surface de la balle brillante. J’ai effectué des expériences avec des diffuseurs, mais sans chance. Le service éventuel provenait d’une approche très différente: une réflexion très brillante et nette, mais avec une double exposition qui utilise différentes sources de lumière. Pendant le deuxième processus d’extraction d’images, le MCU sélectionne la valeur inférieure pour chaque pixel.

Comme les hotspots ne correspondent jamais, ils seront annulés et l’image résultante (la troisième photo de gauche) est uniformément allumée et sans éblouissement. En tant que bonus ajouté, les réflexions de lumière de fond ont également été annulées dans le processus.

Veuillez noter que le système est intégré, sans fonction de capture d’écran, les images provenant d’un moniteur VGA étant tournée avec une caméra.

La source de lumière est composée de 16 LED blanches, de sorte que huit LED sont actives à la fois. L’image située à l’extrême droite représente un arrangement LED du point de vue de la caméra. Les LED sont colorées rouges et bleues ici pour m’aider à différenciergroupes pour la première et la deuxième exposition.

Cela rend le processus de manière significative plus lente, car nous n’avons pas seulement deux expositions, mais également le temps de trame factice entre deux expositions, pour permettre la récupération et l’hébergement du capteur CMOS après la modification de l’éclairage. C’est pourquoi l’ensemble du processus d’imagerie prend pratiquement 100 ms.

La résolution de l’image numérisée est de 220 × 220 pixels, avec une profondeur de pixels de 8 bits. L’image de gris analogique comprend seulement six bits, les deux bits restants étant utilisés pour la représentation des couleurs bleue et rouge sur le moniteur, car la gris est en réalité greenscale. Ces pixels supplémentaires sont utilisés comme pixels d’indicateur spéciaux entre les étapes de traitement, visibles en mode monotique, en tant que zones bleues et rouges. Ceci [s’est avéré être] très utile lors du développement et du débogage du programme.

L’ensemble du processus est divisé en 17 étapes, qui peuvent également être effectuées en mode mono-marche pour le développement et le débogage. Le numéro de l’étape est affiché dans le coin supérieur gauche de l’écran (voir ci-dessous) et l’état actuel de la chronomètre avec une résolution de 1 ms en haut à droite. De cette façon, il était facile de suivre le temps d’exécution et d’optimiser chaque étape.

Emplacement et étirement du ballon

Pour localiser le ballon précisément, les coordonnées X, y pour Centroid (Centre géométrique) sont calculées, à l’aide de formules CX = σcixai / σai et cy = σciyai / σai, où CX, CY sont X, Y, Y, y est le valeur de chaque pixel. Comme l’arrière-plan est principalement noir avant cette étape, CX, CY sera approximativement au centre de la balle. Ensuite, tout le tampon de l’image est déplacé sous forme de bloc 2D, de sorte que Centroide est à coordonnées X = 110, Y = 110, qui est au centre du cadre. Le centre est marqué avec des pixels rouges 2 × 2 (bit 7) uniquement pour la commodité du développeur, car le micrologiciel de traitement dans de nombreux cas ignore les bits 6 et 7.

Ensuite, le diamètre de la balle est mesuré, calculant la valeur de pixel moyenne sur le périmètre pour différents diamètres. Ensuite, le fond (chaque pixel qui est en dehors du diamètre) est réglé sur “blanc” ou, beaucoup plus spécifiquement, vert (valeur 0x3f), afin de garantir une meilleure isolation des zones noires. L’arrière-plan sera défini sur blanc ou noir plusieurs fois beaucoup plus pendant le traitement, chaque fois que la sélection des zones noires (encre) ou blanche (papier) est requise.

Il est impossible de transformer une sphère sans sphère sur une surface plane, mais la forme peut être améliorée si l’image est non mélangée de manière non linéairement, comme sur l’image STEP 3. Les petits microcontrôleurs 16 bits n’ont pas de coprocesseur arithmétique et utilisant des bibliothèques trigonométriques standard consumeraient trop de temps de processeur. C’est pourquoi des tables de recherche trigonométriques ont été utilisées et vous pouvez voir sur le chronomètre (les meilleurs chiffres bleues) que, dans ce cas, le temps d’exécution de la procédure d’étirement n’était que de 11 ms. Vous pouvez également voir que la partie centrale de la balle est principalement inchangée et les bords sont non liés linéairement étirés de manière à minimiser les déformations sphériques.

À l’étape 4, de la même manière que la fonction de masque non blindée dans Photoshop, une nouvelle image floue est créée. Comme il n’ya pas assez d’espace RAM pour un autre tampon complet de cadre, il est effectué sur l’image auxiliaire qui est réduite à la résolution 44 × 44. La fonction du masque non blindée est très importante, car elle garantit une meilleure sélection de pixels “encre” par rapport aux pixels “papier”. La sélection de l’implication de «réglage du bit 7», qui aboutira à des zones rouges sur l’écran VGA.

Maintenant, il y a deux images dans le même tampon de cadre, la grisalcale une (bits 0-5) et le binaire (bit 7). Ce dernier est utilisé dans l’étape de prétraitement 6, où de petits trous et égratignures sont éliminés. L’image sélectionnée est d’abord développée et contractée, puis le processus est répété avec l’achat d’opérations inversées – ce qui entraîne les bords épargnés en douceur et sans détrempture.

Manipulation des composants

Après quelques étapes de prétraitement beaucoup plus, des opérations beaucoup plus importantes ont lieu. Le premier est appelé “composants connectés”, où les zones isolées sont sélectionnées et que les paramètres de chacun sont acquis. Cela inclut les dimensions X et Y, les coordonnées du centre X et Y, le nombre de pixels sélectionnés et la distance de l’EUCLID du centre du cadre. Cela aidera à trier tous les composants comme un chiffre, le grand cercle, le soulignement ou l’arrière-plan. À ce stade, il devient également clair si le nombre comprend un ou deux chiffres.

Cette étape prend beaucoup de temps de traitement, environ 200 ms. Un autre problème était que l’algorithme standard des composants connectés nécessite un tampon de cadre auxiliaire de la même taille. J’ai donc dû créer un nouvel algorithme qui utilise le même tampon de cadre, ainsi qu’une petite table pour les coordonnées à court terme.

À ce stade, il est facile pour le processeur de choisir le meilleur candidat à la reconnaissance – c’est le cercle avec la plus petite distance de l’euclid du centre de la balle. Les composants connectés à l’intérieur de ce cercle sont pris en compte et tout le reste est expulé.

Les balles en question sont des balles OCR spéciales avec des nombres soulignés, So que l’angle de rotation peut être mesuré. Maintenant que le centre du cercle est connu, le programme fait pivoter le formulaire “T” virtuel, qui correspond à la forme de soulignement, en 512 étapes autour du cercle à 360 °, comptant comment de nombreux pixels “d’encre” contiennent. Le nombre nominal le plus élevé dicte l’angle de rotation, puis le bloc 2D du tampon de cadre est déplacé vers le meilleur coin de l’image (étape 12 sur l’image la plus à gauche) et la rotation est effectuée, déplaçant le bitmap dans le coin opposé du tampon de cadre. Grâce aux tables de recherche logarithmiques, ce groupe d’opérations ne prend que 50 ms.

Cela continue d’aller mieux à chaque étape. Les chiffres sont sélectionnés avec différentes couleurs, puis un chiffre est déplacé à la distance de sécurité, puis chaque chiffre est mis à l’échelle à la résolution connue de 30 × 46.

Reconnaissance

Comme ce lecteur était mon premier projet OCR, je pensais naïvement que le processus de reconnaissance serait la partie la plus difficile à résoudre. Une fois que chaque étape a été entièrement débigurée et vérifiée un par un, j’ai atteint la 17ème et dernière étape. Comme je l’ai déjà souligné, mon plan initial était d’opter pour un réseau de neurones, mais j’ai essayé un algorithme facile et j’ai joué avec elle. J’y ai évalué avec quelques balles et vous ne pouvez pas imaginer à quel point j’étais choqué quand j’ai vu ça marche parfaitement! Enfin, le bitmap a été correctement rendu à deux nombres ASCII.

L’algorithme est assez simple. Le bitmap pour chaque chiffre était pratiquement divisé en trois parties, d’abord horizontalement, puis verticalement. Les pixels actifs ont ensuite été comptés à chaque colonne ou à chaque rangée et les histogrammes créés. Il existe également un 7ème histogramme ajouté, qui est incliné pour aider à mieux détecter les lignes transversales à des chiffres 4 et 7.

Il n’a fallu que 3 ms pour construire sept histogrammes pour chaque chiffre et les comparer à des tables préentrées, calculer la somme des erreurs carrées et trier les résultats. Pour faciliter le développement et le débogage, tous les histogrammes sont tracés à l’écran.

Une fois que les résultats de la comparaison sont triés, nous obtenons le gagnant de chaque chiffre (dans ce cas 8 et 5), mais notre travail n’est pas terminé jusqu’à ce qu’une chose beaucoup plus ait lieu. La qualité de la lecture doit être notée, de sorte que le contrôleur puisse estimer si le résultat est suffisamment fiable.

Si le numéro sur la balle n’a qu’un chiffre, la table des erreurs pour chaque chiffre (0 … 9) est triée et le «gagnant» est comparé au second (presque-le-gagnant). Si le ratio est élevé, cela implique que la reconnaissance réussie. Dans notre cas, c’était 147%, ce qui implique que le deuxième candidat noté a 147% d’erreurs beaucoup plus que la meilleure. Par exemple, le premier disposait de 100 “unités d’erreur” et le second avait 247. C’est une bonne note, bien que de nombreuses notes soient nord de 300%. Généralement, les notations supérieures à 80% devraient être considérées suffisamment sûres.

Mais que s’il y a deux chiffres? Une chaîne n’est aussi forte que son maillon le plus faible, le programme ignorera donc le chiffre plus reconnu avec succès (celui avec un ratio plus élevé) et utilisera le plus faible pour faire la décision finale de réussite.

Le contrôleur a deux modes de fonctionnement de base. En mode rapide, il n’y a qu’une seule lecture, qui est répétée (après la rotation de la balle) uniquement si la première lecture n’était pas assez bien notée. Dans le mode plus lent (“sûr”), il y a deux lectures dont les résultats doivent correspondre.

Le lecteur a été évalué à Belgrade, dans Eleks-M Company, qui produit des équipements de casino. L’essai a été effectué avec une caméra vidéo supplémentaire encore qui a enregistré automatiquement chaque lecture de balle, puis les images (avec des noms de fichiers qui ne contenaient que le numéro de balle reconnu) ont été triés par ordre alphabétique et le chèque final a été effectué manuellement.

The entire test lasted for 240 hours, which would help stress-test the durability of the Bingo blower in addition to the reader. After 10 days and 115,000 balls read, there was only one erroneous reading (ball 37 was read as 7), with the reader being set to fast mode. testing in safe mode would be meaningless, as an error would probably never occur.

Mechanical Concept

The physical path for Bingo balls is c

Leave A Comment

Recommended Posts

Automatisation Home Automatisation

[Brian] Envoyé dans cette écriture sur son système de domicile géré de la voix. En commençant par Microsoft Sapi, un système de reconnaissance vocale, il programma une autre automatisation de base. Dans un mouvement qui rend ce projet décidément plus génial, il […]

ybokm

Arbre liquide

L’arbre liquide est décoratif, fonctionnel et vert. C’est un affichage de retour de liquide créé par [Jia Yi Lin] qui est développé pour vous dire exactement combien d’eau vous gaspillez dans la douche. Derrière les jolis tubes est un quincaillerie intéressant. [Lin] […]

ybokm