35 votes

Comment puis-je détecter et suivre des personnes en utilisant OpenCV ?

J'ai une caméra qui sera stationnaire, pointée vers une zone intérieure. Les gens passeront devant la caméra, à environ 5 mètres de celle-ci. Utilisation de OpenCV Je veux détecter les individus qui passent devant moi - mon retour idéal est un tableau des individus détectés, avec des rectangles de délimitation.

J'ai regardé plusieurs des échantillons intégrés :

  • Aucun des Python les échantillons s'appliquent réellement
  • Le site C L'échantillon de suivi des blobs semble prometteur, mais il n'accepte pas les vidéos en direct, ce qui rend les tests difficiles. C'est aussi le plus compliqué des échantillons, ce qui rend problématique l'extraction des connaissances pertinentes et leur conversion en API Python.
  • Le site C L'échantillon "motempl" semble également prometteur, dans la mesure où il calcule une silhouette à partir des images vidéo suivantes. Je pourrais probablement l'utiliser pour trouver des composantes fortement connectées et extraire les gouttes individuelles et leurs boîtes de délimitation, mais je dois encore trouver un moyen d'identifier les gouttes trouvées dans les images suivantes comme étant la même goutte.

Quelqu'un est-il en mesure de fournir des conseils ou des exemples pour réaliser cette opération - de préférence dans le format Python ?

27voto

Martin Points 3369

La dernière version SVN d'OpenCV contient une implémentation (non documentée) de la détection de piétons basée sur HOG. Elle est même fournie avec un détecteur pré-entraîné et un wrapper python. L'utilisation de base est la suivante :

from cv import *

storage = CreateMemStorage(0)
img = LoadImage(file)  # or read from camera

found = list(HOGDetectMultiScale(img, storage, win_stride=(8,8),
                padding=(32,32), scale=1.05, group_threshold=2))

Ainsi, au lieu de faire un suivi, vous pourriez simplement exécuter le détecteur dans chaque image et utiliser directement sa sortie.

Voir src/cvaux/cvhog.cpp pour la mise en œuvre et samples/python/peopledetect.py pour un exemple python plus complet (tous deux dans les sources d'OpenCV).

5voto

Nand Points 41

Nick,

Ce que vous recherchez n'est pas la détection de personnes, mais la détection de mouvements. Si vous nous en dites plus sur ce que vous essayez de résoudre/faire, nous pourrons mieux vous répondre. Quoi qu'il en soit, il existe de nombreuses façons de faire de la détection de mouvement en fonction de ce que vous allez faire des résultats. La plus simple serait la différenciation suivie d'un seuillage, tandis qu'une méthode plus complexe pourrait être la modélisation de l'arrière-plan -> la soustraction de l'avant-plan -> les opérations morphologiques -> l'analyse des composants connectés, suivie de l'analyse des blobs si nécessaire. Téléchargez le code opencv et regardez dans le répertoire samples. Vous y trouverez peut-être ce que vous cherchez. Il existe également un livre d'Oreilly sur OCV.

J'espère que cela vous aidera, Nand

4voto

geschema Points 928

Il s'agit clairement d'une tâche non triviale. Vous devrez vous inspirer des publications scientifiques ( Google Scholar est votre ami ici). Voici un article sur la détection et le suivi des humains : Suivi de l'homme par recherche rapide de mode de déplacement moyen

2voto

Hannes Ovrén Points 5781

Ce projet est similaire à celui que nous avons réalisé dans le cadre d'un cours sur la vision par ordinateur, et je peux vous dire dès maintenant que c'est un problème difficile à résoudre.

Vous pourriez utiliser la segmentation avant-plan/arrière-plan, trouver toutes les taches et décider ensuite qu'il s'agit d'une personne. Le problème est que cela ne fonctionnera pas très bien, car les gens ont tendance à aller ensemble, à passer l'un devant l'autre, etc. Un blob peut donc très bien être constitué de deux personnes, et vous verrez ce blob se diviser et fusionner au fur et à mesure qu'elles marchent.

Vous aurez besoin d'une méthode de discrimination entre plusieurs personnes dans une même tache. Ce n'est pas un problème auquel je m'attends à ce que quelqu'un soit capable de répondre en un seul post SO.

Mon conseil est de vous plonger dans les recherches disponibles et de voir si vous pouvez y trouver quelque chose. Le problème n'est pas insoluble puisqu'il existe des produits qui font cela : Autoliv propose un produit permettant de détecter les piétons à l'aide d'une caméra IR installée sur une voiture, et j'ai vu d'autres produits permettant de compter les clients entrant et sortant des magasins.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X