2014-10-28 3 views
12

Ich arbeite in einem Projekt. Ein Teil des Projekts besteht darin, den HOG People Detector von OpenCV mit einem Kamera-Streaming zu integrieren.Verbesserung der Genauigkeit OpenCV HOG Menschen Detektor

Momentan funktioniert die Kamera und der Basis-HOG-Detektor (CPP detectMultiScale ->http://docs.opencv.org/modules/gpu/doc/object_detection.html). Aber funktioniert nicht sehr gut ... Die Erkennungen sind sehr laut und der Algorithmus ist nicht sehr genau ...

Warum?

Meine Kamera Bild ist 640 x 480 Pixel.

Das Snippet Code Ich verwende ist:

std::vector<cv::Rect> found, found_filtered; 
cv::HOGDescriptor hog; 
hog.setSVMDetector(cv::HOGDescriptor::getDefaultPeopleDetector()); 
hog.detectMultiScale(image, found, 0, cv::Size(8,8), cv::Size(32,32), 1.05, 2); 

Warum nicht richtig funktionieren? Was muss die Genauigkeit verbessern? Ist eine bestimmte Bildgröße erforderlich?

PS: Kennen Sie einige präzise Menschen Erkennung Algorithmus, schneller und in cpp entwickelt ??

+0

Leute im Bild müssen mindestens die Größe des HOG-Deskriptors haben (etwas weniger) und nur größere Personen werden von detectMultiScale zusätzlich gefunden (afaik). Sie können nicht erwarten, dass die Erkennungsrate für solche allgemeinen "Objekte" in der Nähe von 100% liegt, aber in einem Stream sollten Sie jede reale Person mindestens einmal erkennen. Sie können versuchen, diese nachzuverfolgen und Ihre zuvor erkannten Personen zu bestätigen/zu verleugnen. – Micka

+0

Danke für deine Antwort Micka! Sagst du: "mindestens die Größe des HOG-Deskriptors" ... aber ** Was ist diese Größe? ** Kennen Sie andere Möglichkeiten oder existiert nur "getDefaultPeopleDetector" ?? Vielen Dank !! – Ricardo

+0

Diese Website könnte Ihnen helfen: http://www.geocities.ws/talh_davidc/ – SomethingSomething

Antwort

32

Die Größe des Standard-Personen-Detektors ist 64x128, was bedeutet, dass die Personen, die Sie erkennen möchten, mindestens 64x128 sein müssen. Für Ihre Kameraauflösung würde das bedeuten, dass eine Person ziemlich viel Platz einnehmen müsste, bevor sie richtig erkannt wird.

Abhängig von Ihrer spezifischen Situation können Sie versuchen, Ihren eigenen HOG Descriptor mit einer kleineren Größe zu trainieren. Sie können einen Blick auf this answer und die referenced library werfen, wenn Sie Ihren eigenen HOG Descriptor trainieren möchten.

Für die Parameter:

win_stride: Angesichts Ihrer Eingangsbild hat eine Größe von 640 x 480, und die defaultpeopleDetector hat eine Fenstergröße von 64x128, können Sie die HOG Detektionsfenster passen (das 64x128 Fenster) mehrmals im Eingabebild. Der Winstride teilt HOG mit, das Erkennungsfenster jedes Mal um einen bestimmten Betrag zu bewegen. Wie funktioniert das? Hog platziert das Erkennungsfenster oben links in Ihrem Eingabebild. und verschiebt das Erkennungsfenster jedes Mal um win_stride.

wie folgt aus (kleine win_stride): enter image description here

oder so (große win_stride) enter image description here

Eine kleinere winstride Genauigkeit verbessern sollte, sondern verringert preformance und andersrum

Auffüllen Auffüllen fügt auf jeder Seite des Eingabebildes eine bestimmte Menge zusätzlicher Pixel hinzu. Auf diese Weise wird das Erkennungsfenster etwas außerhalb des Eingabebildes platziert. Aufgrund dieser Auffüllung kann HOG Personen erkennen, die sich sehr nahe am Rand des Eingabebilds befinden.

group_threshold Der group_threshold bestimmt einen Wert, wenn erkannte Teile in einer Gruppe platziert werden sollen. Niedriger Wert stellt keine Ergebnisgruppierung bereit, ein höherer Wert stellt Ergebnisgruppierung bereit, wenn der Grenzwert innerhalb der Erkennungsfenster gefunden wurde.(in meiner eigenen Erfahrung, ich musste nie den Standardwert ändern)

Ich hoffe, dass dies für Sie ein wenig sinnvoll ist. Ich habe in den letzten Wochen mit HOG gearbeitet und viele Artikel gelesen, aber ich habe einige der Verweise verloren, daher kann ich Ihnen die Seiten, von denen diese Informationen stammen, nicht verlinken, tut mir leid.

+1

Sie können Ihr Bild vergrößern (vergrößern), um auch kleinere Personen zu finden. – Micka

+0

Vielen Dank für Ihre Antwort Timmynator0! Woher weißt du das? Kennen Sie etwas Dokumentation über diesen Algorithmus und seine Parameter? Jetzt bin ich nicht daran interessiert, meinen eigenen HOG-Deskriptor zu trainieren. Vielen Dank! :) – Ricardo

+0

@Ricardo Ich aktualisierte meine Antwort, um Ihre neue Frage bezüglich der Parameter zu reflektieren. Wenn dies hilfreich war, markieren Sie bitte meine Antwort als richtige Antwort. – Timmynator0