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).