Table des matières:

Comptage d'objets Raspberry Pi : 5 étapes
Comptage d'objets Raspberry Pi : 5 étapes

Vidéo: Comptage d'objets Raspberry Pi : 5 étapes

Vidéo: Comptage d'objets Raspberry Pi : 5 étapes
Vidéo: 5 MEILLEURS Projets Raspberry Pi !! GENIAUX !! Home Assistant, OSMC, RecalBox, AdGuard, NextCloud 2024, Juillet
Anonim
Comptage d'objets Raspberry Pi
Comptage d'objets Raspberry Pi

La vision par ordinateur, sans aucun doute, est une chose fantastique ! En utilisant cela, un ordinateur acquiert la capacité de "voir" et de mieux détecter l'environnement qui l'entoure, ce qui permet le développement d'applications complexes, utiles et intéressantes. Des applications telles que la détection et la reconnaissance de visage, le suivi d'objets et la détection d'objets sont de plus en plus présentes dans nos activités quotidiennes, grâce aux avancées de la vision par ordinateur.

Considérant à quel point les frameworks et outils de vision par ordinateur sont avancés et accessibles, l'application décrite dans cet article s'adapte bien: en utilisant un simple Raspberry PI et un framework de vision par ordinateur gratuit et open source appelé OpenCV pour compter les objets en mouvement, plus précisément combien les objets entrent et sortent d'une certaine zone surveillée.

Étape 1: Approfondissement: Comment le mouvement d'objets peut-il être détecté dans un flux d'images ?

Approfondissement: comment le mouvement d'objets peut-il être détecté dans un flux d'images ?
Approfondissement: comment le mouvement d'objets peut-il être détecté dans un flux d'images ?

Il est maintenant temps d'approfondir le traitement d'images:

comment obtenir des images de flux de webcam et détecter que quelque chose s'y est déplacé

Il consiste en cinq étapes:

Étape 1: Mettre en évidence l'objet en mouvement

Comme défini en physique classique, une référence est nécessaire pour déduire que quelque chose bouge ou s'il est immobile. Ici, pour déterminer si quelque chose a bougé, c'est à peu près la même chose: chaque image capturée par flux webcam sera comparée à une image de référence. Si quelque chose est différent, quelque chose a été déplacé. C'est aussi simple que ça en a l'air.

Ce référentiel doit être capté dans les conditions les plus parfaites (rien en mouvement par exemple). Dans le monde du traitement d'images, cette comparaison entre une image capturée et une image de référence consiste en une technique appelée soustraction de fond. La soustration d'arrière-plan consiste à soustraire littéralement les informations de couleur pixel à pixel de l'image capturée et de l'image de référence. Ainsi, l'image résultante de ce processus mettra en évidence / affichera avec plus de détails uniquement ce qui est différent entre ces deux cadres (ou, ce qui a bougé / a eu du mouvement) et tout le reste sera noir dans l'image (la couleur de valeur zéro sur un fond gris -pixel à l'échelle). Important: les conditions d'éclairage et la qualité de l'image de la webcam capturée (en raison de la qualité des capteurs de capture) peuvent légèrement varier d'une image à l'autre. Cela implique que les "parties égales" du cadre de référence et d'un autre cadre ne seront pas totalement noires après soustraction de l'arrière-plan. Malgré ce comportement, il n'y a pas de conséquences sérieuses dans les prochaines étapes de traitement d'image dans ce projet.

Afin de minimiser le temps de traitement de l'image, avant d'effectuer une soustraction d'arrière-plan, l'image capturée et l'image de référence sont converties en une image en niveaux de gris. Mais pourquoi? C'est une question d'efficacité de calcul: une image qui présente plusieurs couleurs (image couleur) a trois informations par pixel: les composantes de couleur Rouge, Bleu et Vert (l'ancien mais or standard RVB). Ainsi, matériellement, chaque pixel peut être défini comme un tableau à trois valeurs, chacune représentant une composante de couleur. Par conséquent, en l'étendant à l'ensemble de l'image, l'image finale sera en fait le mélange de trois composants d'image: les composants d'image rouge, bleu et vert.

Pour le traiter, beaucoup de travail est nécessaire! Cependant, dans les images en niveaux de gris, chaque pixel n'a qu'une seule information de couleur. Ainsi, le traitement d'une image couleur est trois fois plus lent que dans le cas d'une image en niveaux de gris (au moins trois fois, selon la technique utilisée). Et il y a plus: à certaines fins (comme ce projet), traiter toutes les couleurs n'est pas du tout nécessaire ou important. Par conséquent, nous sommes arrivés à la conclusion: l'utilisation d'images en niveaux de gris est fortement recommandée à des fins de traitement d'images. Après la soustration en arrière-plan, il est nécessaire d'appliquer le filtre Flou gaussien.

Le filtre Flou gaussien appliqué sur l'image soustraite d'arrière-plan lisse tous les contours de l'objet détecté en mouvement. Bien sûr, cela sera utile dans les prochaines étapes de traitement d'image.

Étape 2: Binarisation

Binarisation
Binarisation

Dans la plupart des cas de traitement d'image, la binarisation est presque une étape obligatoire après avoir mis en évidence des objets/caractéristiques dans une image. Raison: dans une image binaire, chaque couleur de pixel ne peut prendre que deux valeurs: 0x00 (noir) ou 0xFF (blanc). Cela aide beaucoup le traitement d'image afin de nécessiter encore moins de "puissance de calcul" pour appliquer les techniques de traitement d'image dans les étapes suivantes. La binarisation peut être effectuée en comparant chaque couleur de pixel de l'image en niveaux de gris à un certain seuil. Si la valeur de la couleur du pixel est supérieure au seuil, cette couleur du pixel prendra la valeur du blanc (0xFF), et si la valeur de la couleur du pixel est inférieure au seuil, cette couleur du pixel prendra la valeur du noir (0x00). Malheureusement, le choix de la valeur seuil n'est pas si simple à faire. Cela dépend de facteurs environnementaux, tels que les conditions d'éclairage. Un mauvais choix d'une valeur seuil peut ruiner davantage toutes les étapes. Donc, je vous recommande fortement d'ajuster manuellement un seuil dans le projet pour votre cas avant toute autre action. Cette valeur seuil doit garantir que l'objet en mouvement s'affiche en image binaire. Dans mon cas, après le choix adéquat d'un seuil, on obtient ce que vous voyez sur la figure 5.

Figure 5 - image binaire

Étape 3: dilater

Jusqu'à présent, il était possible de détecter des objets en mouvement, de les mettre en évidence et d'appliquer une binarisation, ce qui donne une image assez nette de l'objet en mouvement (= image assez nette de l'objet à des fins de traitement d'image). La préparation pour le comptage d'objets est PRESQUE terminée. Le "PRESQUE" signifie ici qu'il y a quelques ajustements à faire avant de continuer. À ce stade, il existe de réelles chances de présence de "trous" dans les objets (des masses noires de pixels dans l'objet surligné en blanc). Ces trous peuvent être n'importe quoi, des conditions d'éclairage particulières à une partie de la forme de l'objet. Une fois que les trous peuvent « produire » de faux objets à l'intérieur d'objets réels (selon leur taille et leur emplacement), les conséquences de la présence de trous dans une image peuvent être catastrophiques pour le comptage d'objets. Un moyen d'éliminer ces trous consiste à utiliser une technique de traitement d'image appelée Dilate. Utilisez ceci et les trous disparaissent.

Étape 4: La recherche des contours (et de ses centroïdes)

La recherche des contours (et de ses centroïdes)
La recherche des contours (et de ses centroïdes)

À ce stade, nous avons les objets mis en évidence, sans trous à l'intérieur et prêts pour la suite: la recherche des contours (et de ses centroïdes). Il existe des ressources dans OpenCV pour détecter automatiquement les contours, mais les contours détectés doivent être judicieusement choisis (pour sélectionner le ou les objets réels uniquement). Ainsi, le critère pour détecter les contours est la surface de l'objet, mesurée en pixels². Si un contour a une surface supérieure à une limite (configurée dans le logiciel), alors il doit être considéré comme un objet réel à compter. Le choix de cette zone limite/critère est très important, et un mauvais choix signifie ici des comptages erronés. Vous devez essayer certaines valeurs limites de valeur de zone et vérifier ce qui correspond le mieux à votre utilisation. Ne vous inquiétez pas, ces limites ne sont pas si difficiles à trouver/ajuster. Une fois que tous les objets de l'image ont été sélectionnés, l'étape suivante consiste à dessiner un retangle dessus (ce retangle doit contenir un objet détecté entier à l'intérieur). Et le centre de ce rectangle est…. le centre de gravité de l'objet ! Vous pensez peut-être « Quel est le problème avec ce centroïde ? », n'est-ce pas ? Voici votre réponse: peu importe la taille ou la forme de l'objet, son mouvement est le même que celui du centroïde. En d'autres termes: ce point simple appelé centroïde représente tout le mouvement de l'objet. Cela rend le comptage très simple maintenant, n'est-ce pas ? Voir l'image ci-dessous (figure 6), où le centroïde de l'objet est représenté par un point noir.

Étape 5: Mouvement de Centorid et comptage d'objets

La grande finale: comparez les coordonnées centroïdes de l'objet aux coordonnées des lignes d'entrée et de sortie et appliquez l'algorithme de comptage décrit précédemment. Et il y aura le comptage des objets en mouvement !

Résultat finalComme indiqué au tout début de cet article, voici le projet en action:

Conseillé: