Démarrer avec la vision industrielle en utilisant TinyML et OpenMV – 1re partie

Il existe de nombreux problèmes d'application que l'apprentissage automatique et tinyML peuvent potentiellement résoudre pour les ingénieurs de systèmes embarqués. Un problème unique qui très difficile à coder à partir de zéro est la détection et la reconnaissance d'objets dans une image. Il se trouve que la détection et la reconnaissance d'objets constituent une application parfaite pour tinyML. Cependant, il peut être compliqué de démarrer avec tinyML et la vision industrielle (MV, Machine Vision). Dans les prochains articles, nous étudierons comment démarrer avec la vision industrielle en utilisant la caméra OpenMV.

Présentation de la caméra OpenMV H7

Supposons que vous vous intéressiez à la vision industrielle pour les applications basse consommation utilisant un microcontrôleur. Dans ce cas, vous devez soit concevoir votre module de caméra sur mesure, soit en trouver un déjà disponible dans le commerce. La création d'un module à partir de zéro est un exercice amusant, coûteux et chronophage. Une solution intéressante disponible dans le commerce est la caméra OpenMV.

La caméra OpenMV est une petite carte de développement de type Arduino qui inclut tout ce dont un développeur a besoin pour démarrer avec la vision industrielle. Tout d'abord, il est essentiel de comprendre qu'il existe différentes versions matérielles. La dernière version est la caméra OpenMV H7 (Figure 1). La caméra H7 est basée sur un microcontrôleur STM32H743VI de STMicroelectronics, qui utilise une architecture Arm Cortex-M7 avec une fréquence d'horloge de 480 mégahertz (MHz). La caméra est également dotée de 1 méga-octet (Mo) de mémoire SRAM et de 2 Mo de Flash. Lorsque l'on travaille avec des applications MV et d'apprentissage, il est toujours bon de disposer de beaucoup de mémoire disponible. La caméra H7 utilise un module de caméra MT9M114 qui peut capturer des images 640 x 320 en échelles de gris 8 bits à 40 images par seconde (ips) ou 320 x 240 QVGA à 40-80 ips. Le module de caméra peut être changé en fonction des besoins de l'application.

Figure 1 : Le module de caméra OpenMV H7 offre tout ce dont vous avez besoin pour commencer à réaliser des conceptions MV. (Source de l'image : OpenMV)

Environnement de développement OpenMV

L'environnement de développement intégré (IDE) OpenMV, illustré à la Figure 2, est le moyen par lequel les développeurs interagissent avec la caméra H7. L'IDE permet aux développeurs de modifier les scripts Python qui seront exécutés sur le module. La caméra H7 utilise MicroPython, un port C Python spécialement conçu pour fonctionner sur des systèmes basés sur des microcontrôleurs. Les développeurs peuvent alors se connecter à leur caméra H7, charger leur script sur le dispositif et exécuter leur application. L'IDE peut également être utilisé pour obtenir un flux en direct des images de la mémoire vidéo de la caméra H7.

Figure 2 : L'environnement de développement OpenMV inclut tout ce dont les développeurs ont besoin pour programmer la caméra H7 et interagir avec elle, comme un éditeur de texte, un terminal et un écran de capture d'images. (Source de l'image : OpenMV)

Les développeurs qui souhaitent commencer à utiliser le module pour la vision industrielle et, tôt ou tard l'apprentissage automatique, n'ont pas besoin de chercher bien loin. L'IDE OpenMV inclut des exemples de scripts allant de la configuration du système en mode basse consommation à la détection d'objets et de visages. Il existe également des exemples d'interfaçage du module avec des cartes de développement externes comme le Wi-Fi, les unités de mesure inertielle (IMU) et d'autres options.

Détection d'un cercle dans une image

L'IDE OpenMV inclut un script HelloWorld qui permet aux développeurs de se connecter à la caméra et de prendre des photos qui alimentent la mémoire vidéo. Pour cet article, j'ai pensé qu'il serait intéressant de prendre pour exemple la détection d'un élément dans une image, comme un cercle.

Si vous ouvrez l'IDE OpenMV et cliquez sur File->Examples->Feature-Detection->find_circles.py (voir Figure 3), vous verrez apparaître un script qui fait exactement cela. Il est très facile de tester ce script. Tout d'abord, vous devez prendre une feuille ou un post-it et dessiner un cercle (ne jugez pas mes talents de dessinateur, ils sont vraiment épouvantables !). Ensuite, en bas à gauche de l'IDE, vous remarquerez un bouton de connexion. Cliquez sur ce bouton pour vous connecter à la caméra H7. Cliquez ensuite sur le bouton vert de lecture juste en dessous du bouton de connexion. Enfin, pointez la caméra H7 sur le cercle que vous avez dessiné et surveillez la mémoire vidéo dans l'IDE OpenMV.

Figure 3 : Navigation vers le script d'exemple find_circles.py dans l'IDE OpenMV. (Source de l'image : Beningo Embedded Group)

Vous devriez remarquer que périodiquement, un cercle rouge est dessiné dans la mémoire vidéo et se superpose au cercle que vous avez dessiné, comme illustré à la Figure 4. Remarquez que, même si mes compétences artistiques laissent à désirer, la caméra H7 a été capable de détecter la présence d'un cercle plus ou moins réussi dans l'image capturée. Le cercle est notre première détection dans cette série de blogs, mais pas la dernière ! Jetons un coup d'œil au script d'exemple pour comprendre ce qu'il fait.

Figure 4 : Le script d'exemple find_circles.py ajoute un cercle rouge à la mémoire vidéo, indiquant qu'un cercle est détecté. (Source de l'image : Beningo Embedded Group)

Analyse de l'exemple find_circles.py

Le script fourni par l'IDE OpenMV pour détecter les cercles est simple. Tout d'abord, le script importe les bibliothèques Python nécessaires et initialise le capteur de la caméra et l'horloge, comme indiqué dans la Liste 1.

Copierimport sensor, image, time

sensor.reset()
sensor.set_pixformat(sensor.RGB565) # grayscale is faster
sensor.set_framesize(sensor.QQVGA)
sensor.skip_frames(time = 2000)
clock = time.clock()

Liste 1 : Exemple de code qui initialise le capteur de la caméra. (Source du code : OpenMV)

Ensuite, une boucle infinie exécute l'application en continu, comme dans toute application embarquée standard. Enfin, la détection est déclenchée, comme par magie. Prenez un moment pour examiner la Liste 2.

Copierwhile(True):
  clock.tick()
  img = sensor.snapshot().lens_corr(1.8)

  for c in img.find_circles(threshold = 2000, x_margin = 10, y_margin = 10, r_margin = 10,
      r_min = 2, r_max = 100, r_step = 2):
    img.draw_circle(c.x(), c.y(), c.r(), color = (255, 0, 0))
    print(c)

  print("FPS %f" % clock.fps())

Liste 2 : Exemple de code qui lit le capteur de la caméra et recherche des cercles dans l'image. (Source du code : OpenMV)

Le code de la Liste 2 commence par prendre un cliché. Une méthode nommée find_circles, incluse dans les bibliothèques OpenMV, est ensuite utilisée pour rechercher des cercles dans l'image. Vous pouvez lire les commentaires dans l'exemple de code source actuel pour obtenir des détails sur les paramètres, mais ce sont surtout les paramètres r_min, r_max et r_step qui nous intéressent ici. Les paramètres r_min spécifient le rayon de cercle minimum pouvant être détecté. Le paramètre r_max définit le rayon maximum. Dans l'exemple, le programme détecte des cercles entre 2 et 100 pixels.

Lorsqu'un cercle est détecté, la méthode draw_circle, avec les valeurs x, y et de rayon du cercle, est utilisée pour dessiner un cercle sur le cercle détecté. Vous remarquerez que la couleur est spécifiée en notation R, G et B, ce qui, dans ce cas, dessine un cercle rouge.

Conclusion

La vision industrielle et TinyML peuvent être exploités par les développeurs et appliqués à un nombre presque infini de cas d'utilisation. Dans cet article, nous avons présenté la caméra OpenMV H7 et l'IDE OpenMV pour vous permettre de détecter des cercles. Cependant, la détection de cercles n'a pas nécessité tinyML, seulement quelques fonctions de bibliothèque. Dans le prochain article, nous étudierons des exemples d'apprentissage automatique intégrés avant de passer à un exemple plus complexe où nous entraînerons et déploierons notre projet de détection.

À propos de l'auteur

Image of Jacob Beningo

Jacob Beningo est un consultant en logiciels embarqués, et il travaille actuellement avec des clients dans plus d'une douzaine de pays pour transformer radicalement leurs activités en améliorant la qualité, les coûts et les délais de commercialisation des produits. Il a publié plus de 200 articles sur les techniques de développement de logiciels embarqués. Jacob Beningo est un conférencier et un formateur technique recherché, et il est titulaire de trois diplômes, dont un master en ingénierie de l'Université du Michigan. N'hésitez pas à le contacter à l'adresse jacob@beningo.com et sur son site Web www.beningo.com, et abonnez-vous à sa newsletter mensuelle Embedded Bytes.

More posts by Jacob Beningo
 TechForum

Have questions or comments? Continue the conversation on TechForum, DigiKey's online community and technical resource.

Visit TechForum