Inhaltsverzeichnis:

Zählen von Raspberry Pi-Objekten - Gunook
Zählen von Raspberry Pi-Objekten - Gunook

Video: Zählen von Raspberry Pi-Objekten - Gunook

Video: Zählen von Raspberry Pi-Objekten - Gunook
Video: Eigene Website ohne Vorkenntnisse | Selbstexperiment 2024, Juli
Anonim
Zählen von Raspberry Pi-Objekten
Zählen von Raspberry Pi-Objekten

Computer Vision ist zweifellos eine fantastische Sache! Dadurch erhält ein Computer die Fähigkeit, die Umgebung besser zu "sehen" und zu erfassen, was die Entwicklung komplexer, nützlicher und cooler Anwendungen ermöglicht. Anwendungen wie Gesichtserkennung und -erkennung, Objektverfolgung und Objekterkennung werden dank der Fortschritte im Bereich Computer Vision immer häufiger in unseren täglichen Aktivitäten eingesetzt.

Wenn man bedenkt, wie fortschrittlich und zugänglich Computer-Vision-Frameworks und -Tools sind, passt die in diesem Artikel beschriebene Anwendung gut: Verwenden eines einfachen Raspberry PI und eines kostenlosen und Open-Source-Computer-Vision-Frameworks namens OpenCV, um Objekte in Bewegung zu zählen, genauer gesagt, wie viel Objekte in eine bestimmte überwachte Zone ein- und ausgehen.

Schritt 1: In die Tiefe gehen: Wie kann eine Objektbewegung in einem Bildstrom erkannt werden?

Tiefer gehen: Wie kann eine Objektbewegung in einem Bildstrom erkannt werden?
Tiefer gehen: Wie kann eine Objektbewegung in einem Bildstrom erkannt werden?

Jetzt ist es an der Zeit, tiefer in die Bildverarbeitung einzusteigen:

wie man einige Webcam-Stream-Bilder erhält und erkennt, dass sich etwas dorthin bewegt hat

Es besteht aus fünf Schritten:

Schritt 1: Um das Objekt in Bewegung hervorzuheben

Wie in der klassischen Physik definiert, ist eine Referenz notwendig, um darauf zu schließen, dass sich etwas bewegt oder stillsteht. Hier, um festzustellen, ob sich etwas bewegt hat, ist es ziemlich gleich: Jedes einzelne aufgenommene Bild des Webcam-Streams wird mit einem Referenzbild verglichen. Wenn etwas anders ist, wurde etwas verschoben. Es ist einfach, wie es sich anhört.

Dieser Referenzrahmen muss unter den besten Bedingungen aufgenommen werden (z. B. nichts Bewegtes). In der Welt der Bildverarbeitung besteht dieser Vergleich zwischen einem aufgenommenen Bild und einem Referenzbild aus einer Technik namens Hintergrundsubtraktion. Die Hintergrundsubtrahierung besteht darin, buchstäblich Pixel-zu-Pixel-Farbinformationen von dem aufgenommenen Bild und dem Referenzbild zu subtrahieren. Das resultierende Bild aus diesem Prozess wird also nur das hervorheben / zeigen, was sich zwischen diesen beiden Bildern unterscheidet (oder was sich bewegt / bewegt hat) und alles andere wird im Bild schwarz sein (die Farbe des Nullwerts auf einem Grau). -Skalierungspixel). Wichtig: Die Lichtverhältnisse und die Qualität des aufgenommenen Webcam-Bildes (aufgrund der Qualität der Aufnahmesensoren) können von Bild zu Bild leicht variieren. Dies impliziert, dass die "gleichen Teile" aus dem Referenzrahmen und einem anderen Rahmen nach der Hintergrundsubtraktion nicht vollständig schwarz sind. Trotz dieses Verhaltens gibt es keine ernsthaften Konsequenzen für die nächsten Schritte der Bildverarbeitung in diesem Projekt.

Um die Bildverarbeitungszeit zu minimieren, werden das aufgenommene Bild und das Referenzbild vor der Hintergrundsubtraktion in ein Graustufenbild umgewandelt. Aber warum? Es ist ein Problem der Recheneffizienz: Ein Bild mit mehreren Farben (Farbbild) hat drei Informationen pro Pixel: rote, blaue und grüne Farbkomponenten (der alte, aber goldene RGB-Standard). Mathematisch kann also jedes Pixel als ein Array mit drei Werten definiert werden, von denen jedes eine Farbkomponente darstellt. Wenn man es auf das gesamte Bild ausdehnt, wird das endgültige Bild daher tatsächlich eine Mischung aus drei Bildkomponenten sein: Rote, blaue und grüne Bildkomponenten.

Um es zu verarbeiten, ist viel Arbeit erforderlich! In Graustufenbildern hat jedoch jedes Pixel nur eine Farbinformation. Die Verarbeitung eines Farbbildes ist also dreimal langsamer als bei einem Graustufenbild (mindestens dreimal, je nach verwendeter Technik). Und es gibt noch mehr: Für einige Zwecke (wie dieses Projekt) ist es nicht notwendig oder wichtig, alle Farben zu verarbeiten. Daher sind wir zu dem Schluss gekommen: Die Verwendung von Graustufenbildern wird für die Bildverarbeitung dringend empfohlen. Nach der Hintergrundsubtraktion muss der Filter Gaußscher Weichzeichner angewendet werden.

Der Gaußsche Weichzeichnerfilter, der auf das vom Hintergrund subtrahierte Bild angewendet wird, glättet alle Konturen des sich bewegenden erkannten Objekts. Sicherlich wird es bei den nächsten Schritten der Bildbearbeitung hilfreich sein.

Schritt 2: Binarisierung

Binarisierung
Binarisierung

In den meisten Fällen der Bildverarbeitung ist die Binarisierung fast ein obligatorischer Schritt nach dem Hervorheben von Objekten / Merkmalen in einem Bild. Grund: In einem Binärbild kann jede Pixelfarbe nur zwei Werte annehmen: 0x00 (Schwarz) oder 0xFF (Weiß). Dies hilft der Bildverarbeitung sehr, um in den nächsten Schritten noch weniger "Rechenleistung" für die Anwendung von Bildverarbeitungstechniken zu benötigen. Eine Binarisierung kann durchgeführt werden, indem jede Pixelfarbe des Graustufenbilds mit einem bestimmten Schwellenwert verglichen wird. Wenn der Wert der Pixelfarbe größer als der Schwellenwert ist, nimmt diese Pixelfarbe den Weißwert (0xFF) an, und wenn der Wert der Pixelfarbe niedriger als der Schwellenwert ist, nimmt diese Pixelfarbe den Schwarzwert (0x00) an. Leider ist die Wahl des Schwellenwerts nicht so einfach zu treffen. Es hängt von Umgebungsfaktoren wie den Lichtverhältnissen ab. Eine falsche Wahl eines Schwellenwerts kann alle weiteren Schritte ruinieren. Ich empfehle daher dringend, einen Schwellenwert im Projekt für Ihren Fall manuell anzupassen, bevor Sie weitere Aktionen ausführen. Dieser Schwellenwert muss sicherstellen, dass das bewegte Objekt im Binärbild angezeigt wird. In meinem Fall ergibt sich nach einer angemessenen Auswahl eines Schwellenwerts das, was Sie in Abbildung 5 sehen.

Abbildung 5 - Binärbild

Schritt 3: Dilatieren

Bisher war es möglich, bewegte Objekte zu erkennen, hervorzuheben und zu binarisieren, was zu einem ziemlich klaren Bild des bewegten Objekts (= ziemlich klares Bild des Objekts für Bildverarbeitungszwecke) führt. Die Vorbereitung für die Objektzählung ist FAST abgeschlossen. Das "FAST" hier bedeutet, dass Sie einige Feineinstellungen vornehmen müssen, bevor Sie fortfahren. An diesem Punkt gibt es echte Chancen auf das Vorhandensein von "Löchern" in den Objekten (schwarze Pixelmassen in dem weiß hervorgehobenen Objekt). Diese Löcher können alles sein, von bestimmten Lichtverhältnissen bis hin zu einem Teil der Objektform. Sobald Löcher falsche Objekte in realen Objekten "produzieren" können (je nachdem, wie groß und wo sie sich befinden), können die Folgen des Vorhandenseins von Löchern in einem Bild katastrophal für die Zählung von Objekten sein. Eine Möglichkeit, diese Löcher zu beseitigen, ist die Verwendung einer Bildverarbeitungstechnik namens Dilate. Verwenden Sie dies und Löcher verschwinden.

Schritt 4: Die Suche nach den Konturen (und ihren Schwerpunkten)

Die Suche nach den Konturen (und ihren Schwerpunkten)
Die Suche nach den Konturen (und ihren Schwerpunkten)

An diesem Punkt haben wir die hervorgehobenen Objekte, keine Löcher darin und bereit für das, was als nächstes kommt: die Suche nach den Konturen (und ihren Schwerpunkten). Es gibt Ressourcen in OpenCV, um automatisch Konturen zu erkennen, aber die erkannten Konturen müssen mit Bedacht gewählt werden (um nur das oder die echten Objekte auszuwählen). Das Kriterium zur Erkennung der Konturen ist also die Fläche des Objekts, gemessen in Pixel². Hat eine Kontur eine größere Fläche als ein Grenzwert (in der Software konfiguriert), so muss sie als reales zu zählendes Objekt betrachtet werden. Die Wahl dieser Bereichsgrenze/-kriterien ist sehr wichtig, und eine schlechte Wahl bedeutet hier falsche Zählungen. Sie müssen einige Bereichswertgrenzwerte ausprobieren und prüfen, was besser zu Ihrer Verwendung passt. Keine Sorge, diese Grenze ist nicht so schwer zu finden / anzupassen. Nachdem alle Objekte im Bild ausgewählt wurden, besteht der nächste Schritt darin, ein Rechteck darauf zu zeichnen (dieses Rechteck muss ein gesamtes erkanntes Objekt enthalten). Und die Mitte dieses Rechtecks ist…. der Objektschwerpunkt! Sie denken vielleicht "Was ist die große Sache mit diesem Schwerpunkt?", oder? Hier ist Ihre Antwort: Egal wie groß oder wie die Form des Objekts ist, seine Bewegung entspricht der des Schwerpunkts. Mit anderen Worten: Dieser einfache Punkt, der als Schwerpunkt bezeichnet wird, repräsentiert die gesamte Bewegung des Objekts. Es macht das Zählen jetzt sehr einfach, nicht wahr? Siehe das Bild unten (Abbildung 6), in dem der Schwerpunkt des Objekts als schwarzer Punkt dargestellt wird.

Schritt 5: Centorids Bewegung und Objektzählung

Das große Finale: Vergleichen Sie die Schwerpunktkoordinaten des Objekts mit den Koordinaten der Eingangs- und Ausgangslinien und wenden Sie den zuvor beschriebenen Zählalgorithmus an. Und es werden bewegte Objekte gezählt!

EndergebnisWie ganz am Anfang dieses Beitrags gezeigt, ist hier das Projekt in Aktion:

Empfohlen: