Aller au contenu principal

Localisation des personnes

Une fois que l'on connaît la position approximative d'une caméra dans l'espace, cela nous permet d'estimer la position des personnes détectées dans l'espace. En effet, toujours en se basant sur le modèle du sténopé pour les caméra, on peut effectuer les opérations inverses à la projection d'un point de l'espace sur l'écran pour calculer la position d'une personne dans l'espace à partir de sa détection. Cependant, pour effectuer correctement la projection inverse, il nous manque une information : la distance de la personne à la caméra.

projection
Voici le modèle mathématique du sténopé - ici, u et v sont les coordonnées du pixel sur l'écran, et s est égal à la distance à la caméra du plan dans lequel se situe le point.

Nous avons alors 2 solutions pour estimer la position :

  • A partir de la détection d'une personne sur les images de la caméra, on estime la position de ses pieds sur l'image (en prenant par exemple le bas de la boite de collision de la détection), et en projetant ce point depuis l'écran sur le sol, en considérant que le sol est le plan d'équation y = 0. En effet, on considérant que le sol à une hauteur fixe, on peut calculer la distance à ce point
  • En calculant la distance de la personne à la caméra en se basant sur la carte de profondeur, on projette sur le sol un point qui correspond à la position de la personne.

Dans un premier temps, c'est la première solution qui a été testé, car la plus simple à mettre en place. Cependant, cette solution présente 2 principaux inconvénients :

  • C'est le bas de la détection qui est considéré comme le bas de la personne, donc si l'on ne voit pas la personne en entière, le bas ne correspond pas aux pieds de la personne, et le point projeté n'est donc pas du tout à la bonne position.
  • De façon générale, et notamment lorsque la personne est un peu trop éloignée de la caméra, la boite de collision des personnes n'est pas assez précise et change entre chaque image, même pour une personne statique. La position sur l'écran prise pour la projection n'est donc pas très précise, et le point projeté ne l'est pas non plus.

Malgré ces inconvénients, cette solution peut tout de même apporter une estimation de la position, mais ne sera pas assez précise dans le cadre de reconnaissance inter-caméras, car les positions seraient trop éloignées entre les caméras.

La solution utilisée est donc la seconde, en se basant directement sur la distance de la personne à la caméra, obtenue à partir de la carte de profondeur. Cette solution n'est pas idéale non plus, car selon comment l'on estime la distance on peut se retrouver avec une distance erronée, mais elle permet d'être plus précis en général.
Nous avons commencé par simplement prendre le milieu de la détection et de récupérer la distance à cet endroit là. Cependant, mesurer la distance à un seul endroit de la personne n'est pas précis, car il pourrait y avoir une erreur de calcul à cet endroit là, ou bien l'endroit ne correspondrait pas à une partie du corps de la personne (par exemple, si elle est de profil et tend le bras, le centre de la détection est dans le vide).
Pour améliorer cela, on met en place l'utilisation d'un réseau de neurones de segmentation sémantique, dans le but de créer un "masque de personnes" sur l'image. Puis, pour chaque détection, on calcule la moyenne de la distance à la caméra en suivant le calque, ce qui nous donne une moyenne de la distance de la personne à la caméra. Ce calcul est donc plus lourd, mais plus précis, et l'utilisation de la moyenne permet d’éviter les erreurs de calcul de la profondeur qui pourraient survenir.