web-dev-qa-db-fra.com

Comment puis-je détecter et suivre des personnes à l'aide d'OpenCV?

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

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

  • Aucun des exemples Python ne s'applique vraiment
  • L'échantillon de suivi des blob C semble prometteur, mais n'accepte pas la vidéo en direct, ce qui rend les tests difficiles. C'est également le plus compliqué des exemples, ce qui rend problématique l'extraction des connaissances pertinentes et leur conversion en API Python).
  • L'exemple C 'motempl' semble également prometteur, car il calcule une silhouette à partir des images vidéo suivantes. Vraisemblablement, je pourrais ensuite l'utiliser pour trouver des composants fortement connectés et extraire des objets blob individuels et leurs boîtes englobantes - mais je reste à essayer de trouver un moyen d'identifier les objets blob trouvés dans les images suivantes comme le même objet blob.

Quelqu'un peut-il fournir des conseils ou des exemples pour ce faire - de préférence en Python?

35
Nick Johnson

La dernière version SVN d'OpenCV contient une implémentation (non documentée) de la détection des piétons basée sur HOG. Il est même livré avec un détecteur pré-formé 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 suivre, vous pouvez simplement exécuter le détecteur dans chaque trame et utiliser sa sortie directement.

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

27
Martin

Pseudo,

Ce que vous recherchez n'est pas la détection de personnes, mais la détection de mouvement. Si vous nous en dites beaucoup plus sur ce que vous essayez de résoudre/faire, nous pouvons mieux répondre. Quoi qu'il en soit, il existe de nombreuses façons de faire la détection de mouvement en fonction de ce que vous allez faire avec les résultats. La plus simple serait une différenciation suivie d'un seuillage tandis qu'une autre complexe pourrait être une modélisation d'arrière-plan appropriée -> une soustraction de premier plan -> des opérations morphologiques -> une analyse des composants connectés, suivie d'une analyse de blob si nécessaire. Téléchargez le code opencv et regardez dans le répertoire des exemples. Vous pourriez voir ce que vous cherchez. En outre, il existe un livre Oreilly sur l'OCV.

J'espère que cela aide, Nand

5
Nand

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 humains: Suivi humain par recherche de mode de décalage moyen rapide

4
geschema

Ceci est similaire à un projet que nous avons fait dans le cadre d'un cours de vision par ordinateur, et je peux vous dire dès maintenant que c'est un problème difficile à réussir.

Vous pouvez utiliser la segmentation de premier plan/arrière-plan, trouver tous les blobs, puis décider qu'ils sont une personne. Le problème est que cela ne fonctionnera pas très bien car les gens ont tendance à aller ensemble, à se dépasser, etc., donc un blob pourrait très bien être composé de deux personnes et vous verrez alors ce blob se diviser et fusionner en marchant.

Vous aurez besoin d'une méthode de discrimination entre plusieurs personnes dans un blob. Ce n'est pas un problème, je m'attends à ce que quiconque puisse répondre en un seul message SO.

Mon conseil est de plonger dans les recherches disponibles et de voir si vous pouvez y trouver quelque chose. Le problème n'est pas insoluble étant donné qu'il existe des produits qui font cela: Autoliv a un produit pour détecter les piétons utilisant une caméra infrarouge sur une voiture, et j'ai vu d'autres produits qui traitent du comptage des clients entrant et sortant des magasins.

2
Hannes Ovrén