Fußgängerzählalgorithmus


12

Zur Zeit entwickle ich ein Projekt für Fußgängerzähler (mit OpenCV + QT unter Linux). Meine Idee zu diesem Ansatz ist:

  1. Frames aufnehmen
  2. Hintergrund-Subtraktion durchführen
  3. Klare Geräusche (erodieren, erweitern)
  4. find blobs (cvBlobslib) - Vordergrundobjekte
  5. Stellen Sie für jeden Blob den ROI ein und suchen Sie in diesen Blobs nach Fußgängern (LBP mit detectMultiScale) (für eine bessere Leistung)
  6. Führen Sie für jeden gefundenen Fußgänger eine verschachtelte Oberkörpersuche durch (nicht sicher) (bessere Zuverlässigkeit)
  7. Wenn derselbe Fußgänger in fortlaufenden Bildern zu finden ist (möglicherweise 3-4 Bilder) - fügen Sie diesen Bereich zur Nockenverschiebung hinzu und verfolgen Sie - markieren Sie ihn als Fußgänger
  8. Schließen Sie verfolgte Camshift-Bereiche für die nächsten Bilder von der Blob-Erkennung aus
  9. Wenn ein Fußgänger eine Zeilenzahl überschreitet

Ich möchte überprüfen, ob ich auf dem richtigen Weg bin. Haben Sie Vorschläge zur Verbesserung meines Ansatzes? Wenn jemand an etwas Ähnlichem arbeitet, würde ich mich über nützliche Tipps, Ressourcen (und Kritik) zu diesem Problem freuen.


5
Vielleicht möchten Sie Ihre Frage umformulieren und die OpenCV-Teile weglassen. Formulieren Sie es eher wie die konzeptionelle Frage, die es wirklich ist (Algorithmus zum Zählen und Verfolgen von Fußgängern).
Geerten

2
Ihr Ansatz klingt vernünftig. Haben Sie nach relevanter akademischer Literatur gesucht? Das soll Ihnen einen Eindruck vom Stand der Technik geben. Hintergrund-Subtraktion kann schwierig sein, Umwelteinflüsse sowie Schatten können ein Problem sein.
geometrikal

Antworten:


8

Ich sehe eine Reihe möglicher Probleme bei diesem Ansatz. Ich spreche hier aus eigener Erfahrung von der Verbesserung eines Zählsystems für Fußgänger mit einem sehr ähnlichen Ansatz, also möchte ich nicht entmutigen. Im Gegenteil, ich möchte Sie vor möglichen Hürden warnen, die Sie überwinden müssen, um ein genaues und robustes System aufzubauen.

Erstens wird bei der Hintergrundsubtraktion davon ausgegangen , dass sich Objekte von Interesse immer bewegen und Objekte, die Sie nicht zählen möchten , vollständig still stehen. Sicherlich ist dies in Ihrem Szenario der Fall, aber es ist immer noch eine sehr begrenzende Annahme. Ich habe auch festgestellt, dass die Hintergrundsubtraktion sehr empfindlich auf Beleuchtungsänderungen reagiert (ich stimme geometrikal zu).

Seien Sie vorsichtig bei der Annahme, dass ein Tropfen = eine Person ist , auch wenn Sie der Meinung sind, dass Ihre Umgebung gut kontrolliert ist. Es ist viel zu oft vorgekommen, dass Blobs, die Personen entsprechen, unentdeckt blieben, weil sie sich nicht bewegten oder zu klein waren, sodass sie durch Erosion oder durch bestimmte Schwellenwerte gelöscht wurden (und glauben Sie mir, Sie möchten nicht in die " stelle die Schwellen ein, bis alles funktioniert "trap. Es funktioniert nicht;)). Es kann auch vorkommen, dass ein einzelner Fleck zwei Personen entspricht, die zusammen gehen, oder dass eine einzelne Person eine Art Gepäck trägt. Oder ein Hund. Machen Sie also keine klugen Annahmen über Blobs.

Zum Glück sind Sie, da Sie erwähnen, dass Sie LBPs zur Personenerkennung verwenden , auf dem richtigen Weg, die Fehler im obigen Absatz nicht zu begehen. Ich kann mich jedoch nicht speziell zur Wirksamkeit von LBP äußern. Ich habe auch gelesen, dass HOG (Histogram of Gradients) eine der modernsten Methoden zur Erkennung von Personen ist, siehe Histogramme orientierter Gradienten zur Erkennung von Menschen .

Mein letzter Kritikpunkt ist die Verwendung von Camshift . Es basiert auf Farbhistogrammen und funktioniert daher für sich genommen sehr gut, wenn ein einzelnes Objekt verfolgt wird, das leicht anhand der Farbe zu unterscheiden ist, sofern das Verfolgungsfenster groß genug ist und keine Verstopfungen oder plötzlichen Änderungen auftreten. Aber sobald Sie mehrere Ziele zu verfolgen, die sehr ähnliche Farbbeschreibungen aufweisen kann und wird bewegen sich sehr nahe beieinander, kann man einfach ohne einen Algorithmus nicht tun , die irgendwie können Sie mehrere Hypothese halten. Dies kann ein Partikelfilter oder ein Framework wie MCMCDA (Markov-Chain-Monte-Carlo-Datenassoziation) sein, siehe Markov-Chain-Monte-Carlo- Datenassoziation für die Verfolgung mehrerer Ziele). Meine Erfahrung mit der alleinigen Verwendung von Meanshift beim Verfolgen mehrerer Objekte ist alles, was beim Verfolgen nicht passieren sollte: Verfolgung verlieren, Ziele verwirren, im Hintergrund korrigieren usw. Lesen Sie etwas über das Verfolgen mehrerer Objekte und Probleme mit der Datenzuordnung Ich zähle immerhin mehrere Leute (ich sage "könnte sein", weil Ihr Ziel darin besteht, nicht zu verfolgen, also schlage ich die Möglichkeit eines cleveren Ansatzes, der zählt, ohne zu verfolgen, nicht vollständig aus ...)

Mein letzter Ratschlag ist: es gibt nur so viel Sie mit einem bestimmten Ansatz tun können , und Sie werden ausgefallenere Sachen brauchen eine bessere Leistung zu erzielen (so ich mit user36624 in dieser Hinsicht nicht einverstanden ist ). Dies kann bedeuten, dass Sie einen Teil Ihres Algorithmus durch etwas Stärkeres ändern oder die Architektur insgesamt ändern. Natürlich muss man wissen, welche ausgefallenen Sachen für einen wirklich nützlich sind. Es gibt Veröffentlichungen, die versuchen, das Problem auf prinzipielle Weise zu lösen, während andere einfach einen Algorithmus für einen bestimmten Datensatz entwickeln und von Ihnen erwarten, dass Sie einen Klassifikator trainieren, der für das jeweilige Problem nicht wirklich geeignet ist Stellen Sie auch einige Schwellenwerte ein. Personenzählung istLaufende Forschung, also erwarte nicht, dass die Dinge leicht kommen. Bemühen Sie sich, Dinge zu lernen, die etwas über Ihre Fähigkeiten hinausgehen, und tun Sie es dann immer wieder ...

Ich gebe zu, dass ich keine Lösungen angeboten habe und habe stattdessen nur auf Fehler in Ihrem Ansatz hingewiesen (die alle aus meiner eigenen Erfahrung stammen). Als Inspiration empfehle ich Ihnen, einige neuere Forschungsergebnisse zu lesen, z. B. Stabile Verfolgung mehrerer Ziele in Echtzeit-Überwachungsvideos . Viel Glück!


9

Ich denke, was Sie fragen, ist über die Machbarkeit Ihres Fußgängeralgorithmus.

Es gibt zwei allgemeine Strategien für diese Art von Problemen:

  1. (von unten nach oben) Betrachten Sie es als reines Erkennungsproblem, bei dem Sie in jedem Frame nur Fußgänger erkennen. Sobald Sie sie erkannt haben, ist a) das Zählen ihrer Nummer in einem Frame ziemlich einfach; und b) es ist auch einfach, irgendeinen von ihnen in aufeinanderfolgenden Rahmen zu verfolgen. Deshalb löst du alles.

  2. (von oben nach unten) Betrachten Sie es als ein Aktionserkennungsproblem, bei dem Sie erkennen, ob ein ROI in aufeinanderfolgenden Frames ein Fußgänger ist oder nicht. Sobald Sie dieses Problem gelöst haben, lösen Sie gleichzeitig die Erkennungs- und Verfolgungsprobleme.

Ihr heuristischer Algorithmus gehört zur ersten Kategorie. Ich möchte Sie nicht entmutigen, aber Sie könnten den entscheidenden Punkt verpassen, wie man einen Fußgänger erkennt. Denn echte Daten können komplizierter sein als gedacht. Zum Beispiel, wenn es sich um eine U-Bahn-Kamera handelt, deren Rahmen möglicherweise mit Fußgängern gefüllt sind und daher Hintergrundinformationen entfernen oder Kleckse erkennen, hilft das überhaupt nicht. In diesem Fall ist es möglicherweise sinnvoller, Gesichtserkennungs- und Gesichtserkennungsalgorithmen zu verwenden, um das Problem zu lösen, denn wenn Sie ein Gesicht finden, finden Sie einen Fußgänger. Andererseits kann es sein, dass abhängig von Ihrer Definition eines Fußgängers nicht jeder, der in einem Frame erscheint, als Fußgänger behandelt werden sollte. In diesem Fall kann es sinnvoll sein, Aktionserkennungsalgorithmen (zweite Kategorie) zu verwenden, bei denen Sie einen Fußgänger explizit anhand seines Verhaltens definieren können.

Hier sind einige Tipps, die auf meinen Erfahrungen basieren:

  1. Halten Sie sich an das, was Sie wissen und was Sie leicht abholen können. Investiere deine Zeit nicht in etwas Phantasievolles, sondern benötige viele Hintergründe, die du nicht hast. Vertrauen Sie mir, all diese Algorithmen werden in einigen Fällen gut, in anderen jedoch schlecht sein. Daher ist das erste, was funktioniert, egal wie gut oder schlecht es ist.

  2. Erfahren Sie mehr über Ihre Daten und bestimmen Sie dann Ihre Methode. Eine allgemeine Beschreibung eines Problems ist in vielen Fällen unzureichend.

  3. Wenn Sie Ihre Idee demonstrieren möchten, ist es besser, MATLAB zu verwenden und einen Prototyp zu erstellen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.