2013-10-20 22 views
5

Hallo ich bin neu zu OpenCV und ich versuche, menschliche Körperverfolgung mit einer Kamera auf einer festen Position platziert zu implementieren. Ich habe ein wenig recherchiert und bin auf die Histogram of Oriented Gradient Methode gestoßen, aber basierend auf meinem Verständnis, was es macht, ist Erkennung statt Tracking. Daher habe ich mich gefragt, was ist der einfachste Weg, um Human Detection und Tracking auf OpenCV zu implementieren?OpenCV Human Body Tracking

P/S: Ich fand diese video und es ist genau das, was ich erreichen wollte.

+0

Sie können eine Antwort akzeptieren, die gut genug war. (klicken Sie auf das Häkchen auf der linken Seite eine Antwort) – samkhan13

Antwort

4

Sie können auch versuchen, eine HAAR-Kaskade für die Erkennung des menschlichen Körpers zu verwenden. Laden Sie einfach die Kaskade mit CascadeClassifier::CascadeClassifier() und verwenden Sie dann CascadeClassifier::detectMultiScale(), um die Bereiche innerhalb des gegebenen Bildes zu erhalten, in denen das Objekt (Körper) erkannt wurde. Stellen Sie die Parameter detectMultiScale() zur Beschleunigung und Erhöhung der Erkennungsgenauigkeit ein.

Sie können eine Reihe von Kaskaden here darunter eine für die Körpererkennung finden.

haben einen Blick auf diese SO-Beiträge:

+0

Danke für den detaillierten Vorschlag, aber wenn es nicht zu beunruhigend ist, habe ich eine Follow-up-Frage. Empfiehlt die von Ihnen vorgeschlagene Methode das Tracking durch eine schnelle Neuerkennung zu "simulieren", da ich für jede Person, die ich tracke (wie im obigen Video gezeigt), einen eindeutigen Identifikator für den Echtzeit-Video-Feed erstellen möchte. Ist es möglich, Ihre Methode zu verwenden? Danke noch einmal. – user2900552

+0

@ user2900552 Mit HAAR- oder LBP-Kaskaden können Sie nur Bereiche innerhalb jedes Kamerarahmens erkennen, die dem gewünschten Objekt ähneln. also ja, du "erkennst" in jedem Frame neu und kannst dadurch Tracking machen. Zuweisen einer eindeutigen ID zu einer Instanz des gewünschten Objekts erfordert die Verwendung der Hauptkomponentenanalyse oder der linearen Diskriminanzanalyse oder "Feature-Erkennung und Feature-Matching". Suchen Sie nach einem Buch mit dem Titel "Mastering OpenCV mit praktischen Computer Vision-Projekten". Es hat C++ Rezepte für was Sie brauchen. – samkhan13

+0

Danke für die freundliche Antwort. Ich werde definitiv Ihre Vorschläge versuchen, aber für jetzt muss ich wirklich auf OpenCV zuerst hochfahren. Danke noch einmal. – user2900552

1

Sie können HOG-Detektor oder Latent-Svm-Detektor mit dem "Person" -Modell verwenden, um die Bounding Box der Person zu erhalten und dann die Person zu verfolgen.

Die Verfolgung des Schwerpunkts der Person kann durch folgendes erfolgen: Messen Sie den neuen Schwerpunktort. Messen Sie seine Geschwindigkeit. Vorhersage der Position des nächsten Frame-Schwerpunkts unter Verwendung der aktuellen Frame-Position und Geschwindigkeit. Überprüfen Sie dann, ob die neue Messung des Schwerpunkts nahe an der Vorhersage liegt. Wenn dies der Fall ist, ist es die gleiche Person wie im vorherigen Frame, wenn nicht, dann ist es eine neue Person, die den Frame eingegeben hat.

Vielleicht sollten Sie die Begrenzungsbox anstelle des Schwerpunkts verfolgen. Sie die Bildrate ist hoch genug, vielleicht könnten Sie nur die Bounding Box plotten und Tracking vergessen.