Rapport de mini projet image : Comptage de
Transcription
Rapport de mini projet image : Comptage de
1 Rapport de mini projet image : Comptage de piétons Alina Caramizaru, Martin Altenburg, Tom Magnier, Antoine Meissonnier F I NTRODUCTION 2 C Dans le cas présent, nous avons exploré les méthodes qui permettaient de compter des piétons sans utiliser de méthode de tracking. Nous avons également fixé des limites au fonctionnement du programme, à savoir : — Faible densité de piétons — Possibilité de piétons côte à côte ou en file indienne — Gestion des mouvements parasites (caméra qui bouge, vent dans les feuilles . . .) — Angle de prise de vue fixe et imposé. Nous avons volontairement choisi de ne pas utiliser Matlab mais de plutôt nous orienter vers une programmation en C++ avec OpenCV et ce pour plusieurs raisons. La première est que Matlab permet d’obtenir facilement des résultats mais que la vitesse de calcul ne permet pas de gérer en temps réel des flux d’images. L’autre raison est que l’utilisation d’OpenCV ne nous contraignait pas à un système d’exploitation, ni à un système de licences propriétaires. Enfin nous avions envie de découvrir cette librairie "classique" du traitement d’image. projet à pour but de mettre en oeuvre la théorie du traitement d’image et de l’appliquer au comptage de piétons dans une séquence vidéo. 1 21 janvier 2014 1 E E TAT DE L’ ART Afin de définir notre chaîne de traitement, nous avons parcouru les publications scientifiques sur le sujet, parmi lesquelles nous avons sélectionné les plus importantes à nos yeux : La référence [?] offre une bonne approximation du comptage des piétons sur une ligne. On remarque les références [?] et [?] qui présentent des méthodes de soustraction de fond. La référence [?] nous a donné l’idée d’estimer le nombre de piétons par le volume ainsi que le filtrage des blocs inférieurs à une certaine taille. La référence [?] expose de plus les méthodes de comptage sur plusieures lignes. On citera enfin les références [?] et [?] qui montrent d’autres techniques de comptage de piétons. Globalement, beaucoup des techniques de comptage de piétons utilisent le tracking pour détecter le nombre de piétons avant le passage de la ligne et les compter au moment où cette ligne est franchie. Certaines références préconisent des positions de caméra afin de rendre la détection des piétons plus simple [?]. 1. Le sujet complet est disponible sur : http://www.creatis. insa-lyon.fr/~prost/MiniProjets/Sujets/Detection_Pietons/ 3 P RÉCISIONS SUR LE SUJET D ESCRIPTION DE LA MÉTHODE Après lecture de différents articles sur le sujet, nous avons réalisé qu’une grande partie d’entre eux étaient basés sur le suivi de piétons, "tracking". Nous avons choisi d’explorer une voie permettant d’utiliser des algorithmes plus simples et plus légers, en remarquant qu’en analysant une unique ligne de l’image au cours du temps, il était possible de visualiser les groupes de piétons à leur passage sur cette ligne (voir 2 F IGURE 1. Tracé de la ligne de comptage la figure 2 qui représente l’historique d’une des lignes de l’image au cours de la séquence vidéo). Afin de s’affranchir du fond de l’image (pixels représentant la route qui sont sensiblement constants au cours du temps), nous avons tout d’abord implémenté un algorithme de soustraction du fond. Dans un premier temps, nous avons soustrait uniquement la première image à l’image courante (figure 3). Par la suite, nous avons supprimé le fond de manière plus fine en soustrayant une image calculée à partir de la moyenne glissante des images précédentes à l’image courante. Ceci permet de tenir compte des variations de luminosité et du bruit dû aux petites variations (mouvement des feuilles). Les lignes: Nous comptons les piétons à partir du moment ou ils franchissent une ligne. Cette ligne pourra être définie par l’utilisateur au moyen de deux clics de souris. Afin de réduire les erreurs de comptage, on pourra créer plusieurs lignes proches et moyenner les résultats obtenus sur chaque ligne de comptage. Pour chaque nouvelle image, on extrait la ligne qui nous intéresse, on lui soustrait le fond puis on cherche les pixels dont l’intensité est supérieure à un certain seuil i.e. qui n’appartiennent pas à l’image de fond (voir figure 4). Pour chaque groupe de pixels non noirs, on regarde si ce groupe de pixels n’appartient pas à un bloc de pixels déjà détecté, sinon on crée un nouveau bloc. Les blocs: Les blocs sont des groupes de pixels non noirs. A chaque nouvelle image, on F IGURE 2. Empilement successif des lignes analysées au cours du temps (1e image en haut) F IGURE 3. "empilement" des lignes après soustraction du fond. parcourt la liste de tous les blocs et on regarde si les pixels non noirs de la ligne peuvent s’ajouter à un bloc. Ensuite, on balaie la liste de blocs et on distingue plusieurs cas : l.1 à l.5 : des pixels ont été ajoutés au bloc. l.1 : la largeur maximale du bloc est mise à jour l.6 : le bloc se coupe en deux. On ajoute alors les deux sections de ligne au bloc. l.11 : aucun pixel n’a été ajouté : on dit que le bloc est "mort" l.16 : on a deux blocs de paramètres identiques : on les fusionne l.12 & l.18 : les groupes de pixels n’appar- 3 F IGURE 4. Visualisation de la matrice d’une ligne avec les bords des blocs détectés en rouge et vert. tiennent à aucun bloc, on crée de nouveaux blocs F IGURE 5. Les différents types de blocs rencontrés Tant que le bloc n’est pas "mort", on ajoute les pixels à une matrice interne à chaque bloc. Cette matrice servira ensuite a compter le nombre de piétons qui se trouvent dans le bloc. Au final, nous nous somme rendus compte que le volume du bloc donnait des informations plus précises que la segmentation du bloc (voir paragraphe 5). Quand le bloc est mort, on le supprime de la liste des blocs existants et on ajoute le nombre de piétons au nombre de piétons total comptés sur la ligne. 4 P ERFORMANCES DE L’ ALGORITHME 4.1 Vitesse de traitement Sur un ordinateur grand public, 2 le traitement de 505 images prend approximativement 13 secondes. Nous avons volontairement ajouté un délai de 20 ms entre les images pour distinguer le mouvement des piétons. 4.2 Robustesse La robustesse de l’algorithme dépend beaucoup des paramètres de seuil et de volume 2. processeur :AMD 2x 1.60 GHz, 4Go de Ram d’un piéton. Tous les blocs de piétons sont détectés, mais le dénombrement des piétons à l’intérieur d’un bloc n’est pas toujours bon. On a une erreur de ± 1 piéton sur les blocs où les piétons sont vraiment proches. L’utilisation de plusieurs lignes de comptage permet d’améliorer grandement les résultats : il y a parfois de fausses détections ou des piétons non détectés, et le moyennage sur plusieurs lignes différentes (où la posture des piétons est donc différente ainsi que l’espacement entre eux) augmente donc la fiabilité. Nous avons également testé l’algorithme avec une autre séquence d’image (celle du sujet "tracking de piétons") et obtenu des résultats similaires. On note cependant que les paramètres de seuil de détection et de largeur des piétons sont importants et dépendent de la position de la caméra. Aussi, nous avons décidé de sortir ces paramètres dans un fichier de configuration *.xml éditable par l’utilisateur avant l’exécution du programme. 5 A MÉLIORATIONS Afin d’améliorer la précision de notre algorithme, nous avons tenté d’utiliser une autre méthode pour dénombrer les piétons à l’intérieur d’un bloc. Pour améliorer le comptage dans un bloc où il y a plusieurs piétons, nous avons essayé d’effectuer un "watershed" à l’intérieur du bloc. Afin de traiter un bloc avec cet algorithme, nous avons extrait la matrice contenant les lignes de ce bloc. Finalement, pour un piéton (voir figure 6), on obtient une matrice (figure 7) dans laquelle on peut observer le contour d’un piéton. Cependant, si on regarde la matrice (figure 9) d’un groupe de piétons (figure 8), nous avons constaté qu’elle ne permettait pas de segmenter les piétons à l’intérieur d’un bloc. Au final, la matrice obtenue n’est pas exploitable en l’état. Une autre amélioration possible aurait consisté à adapter automatiquement les paramètres de largeur d’un piéton et les seuils de détection après une période d’apprentissage ou l’opérateur indique au programme combien de piétons sont présents dans le bloc. 4 F IGURE 9. bloc correspondant à la figure 8 6 F IGURE 6. Piéton passant la ligne F IGURE 7. Matrice extraite du bloc correspondant au piéton de la figure 6 F IGURE 8. Groupe de piétons passant la ligne C ONCLUSIONS L’algorithme que nous avons implémenté offre une approche différente des approches classiquement utilisées. Il se concentre sur l’analyse de quelques lignes de l’image ce qui permet une analyse très rapide, permettant éventuellement de l’implémenter sur une architecture embarquée. Globalement, il permet de détecter les groupes de piétons. Des améliorations sont à apporter quand à la segmentation des blocs pour détecter les piétons. Il est également difficile de prévoir le comportement de cette chaîne de détection dans des conditions d’affluence plus importante (foule compacte).