Bilderkennung mit dem Raspberry Pi und OpenCV

30. Januar 2017

Wenn große Mengen gleichartiger Bilder nach bestimmten Merkmalen durchsucht werden müssen, dann ist Bilderkennung für den Menschen eine mühsame und monotone Arbeit. Die maschinelle Automatisierung einer solchen Arbeit spart also Zeit und Geld und ist zudem weniger fehleranfällig. Anwendungsbereiche für Bilderkennung sind beispielsweise die Auswertung und das Zusammenfügen von Satellitenbildern, Aufnahmen von Überwachungskameras, oder auch die Identifizierung und Markierung von mangelhaften Produkten auf einer Produktionsstraße.
Die Kosten für den Einstieg in das Feld der Bilderkennung und die dafür notwendige Hard- und Software betragen für Privatleute mittlerweile weniger als 100 Euro.
Diese Artikel zeigt, welche Möglichkeiten der Bilderkennung mit einem Raspberry Pi 3, der Raspberry Pi Kamera bzw. einer Webcam und der offenen Bilderkennungs-Bibliothek (im Sinne einer Software-Bibliothek) OpenCV gegeben sind.

Grundlagen der Bilderkennung
Der Begriff Bilderkennung beschreibt den Prozess der Auswertung eines Einzelbildes in Hinblick auf definierte Bildinformationen. Diese Bildinformationen können dabei Farben, Formen, Muster oder auch Zusammensetzungen von Farben, Formen oder Mustern sein, also komplexe Muster wie beispielsweise menschliche Gesichter oder Alltagsgegenstände. Je nach gewünschter Anwendung kann nun die durch die Algorithmen gewonnene Bildinformation aus dem Bild extrahiert und maschinenlesbar kategorisiert, klassifiziert oder ausgegeben werden um daraufhin weiter verarbeitet zu werden.
Die Komplexität der Algorithmen steigt dabei mit der Komplexität der gesuchten Bildinformation. Sollen beispielsweise Farbinformationen in einem Bild analysiert werden, so genügt die Filterung von Farbwerten mit jeweils festgelegten Abweichungstoleranzen.
Um Unterschiede zwischen mehreren Bildern festzustellen, so empfiehlt sich die Berechnung der Differenz der Farbwerte je Bildpunkt. Man spricht bezüglich der Bilderkennung von einer Hintergrund Subtraktion (engl. Background Subtraction). Zwei identische Bildpunkte unterscheiden sich nicht und ergeben in der Theorie daher eine Differenz von 0, wobei in der Realität Bildrauschen und feine Lichtunterschiede selbst für den Menschen gleichartig erscheinende Bilder für Algorithmen dennoch unterschiedlich aussehen lässt. Um diesen Unterschied zu glätten, werden Filter wie z.B. ein Weichzeichner eingesetzt, um die Differenzen zu minimieren und nur wesentliche Unterschiede zu berechnen. Der Algorithmus wird gewissermaßen künstlich in seiner Sehkraft geschwächt.
Soll nach einem definierten Muster gesucht werden, welches im zu untersuchenden Bild nicht exakt einem Referenzbild entspricht, so muss der Algorithmus bereits erkennen ob sich dieses Muster in seiner Farbe, Position, Rotation oder Skalierung verändert hat.
Schauen Menschen sich zwei deutlich verschiedene Bilder an, so erkennen wir direkt den Unterschied zwischen diesen Bildern. Die Abläufe bei primitiver maschineller Bilderkennung sind jedoch nicht vergleichbar zu den komplexeren Vorgängen im Gehirn. Auch wenn es bereits einige Bereiche gibt, in denen diese einfachen Algorithmen das menschliche Erkennen und Sehen übertreffen, gibt es noch viele Bereiche in dem maschinelle Bilderkennung noch nicht ausreichend gut funktioniert. Hier ist jedoch zu erwähnen, dass es bereits Ansätze gibt, die Vorgänge im Gehirn mit Hilfe von neuronalen Netzen und Deep-Learning zu imitieren. Diese Art der Bilderkennungsalgorithmen wird nicht mehr direkt programmiert und konfiguriert, sondern trainiert. Ein Algorithmus der aus großen Datenmengen lernt.

Anwendungsbeispiele für Bilderkennung und dessen Hardwarevoraussetzungen
Wie im vorangehenden Abschnitt angedeutet wird, lässt sich die Komplexität von Algorithmen auf einem Spektrum anordnen. Grundsätzlich gilt: Je komplexer ein Bilderkennungsalgorithmus ist, desto mehr Rechenschritte werden für die Verarbeitung benötigt. Das impliziert eine längere Zeit die vergeht, bis eine gewünschte Information aus einem Bild gewonnen wird. Die Anwendung von Filtern und die Berechnung von Farbdifferenzen (Vgl. Background-Subtraction) benötigen beispielsweise im Vergleich zur Gesichtserkennung deutlich weniger Rechenschritte, da hier keine komplexen Muster erkannt werden müssen. Das gleiche gilt für Muster und Objekte, die sich zur Referenz in ihrer Skalierung, Form, Position und Rotation unterscheiden. Je größer der Unterschied zwischen einem Referenzbild und einem gesuchten Bild ist, desto größer ist der Aufwand, um das Objekt im gesuchten Bild zu erkennen.
Sollen zeitkritische und Echtzeitanwendungen, wie die Identifizierung und Markierung von mangelhaften Produkten auf einer Produktionsstraße oder autonomes Fahren durch Bilderkennung ausgeführt werden, so ist eine sehr hohe Rechenleistung nötig. Bei der Sortierung von Getreide müssen beispielsweise pro Sekunde etwa 300 Objekte erkannt und klassifiziert werden.
Bei solchen zeitkritischen Aufgaben wird versucht, die Algorithmen durch direkte Implementierung in Hardware zu beschleunigen.
Werden mehrere Bilder aufgenommen, um daraus ein gesamtheitliches Bild zu erzeugen, dies ist beispielsweise bei Panoramaaufnahmen oder Satellitenbildern, die für eine Karte verwendet werden sollen der Fall, so wird nach Überschneidungsbereichen gesucht. Diese Bereiche werden dann übereinander gelegt, skaliert, rotiert und transformiert. Vergleichbar ist diese Aufgabe mit einem Puzzle. Je größer die Menge der Bilder ist, desto länger dauert der Prozess des so genannten Stiching.

Der Raspberry Pi und die Raspberry Foundation
Die Raspberry Pi Foundation wurde 2009 von Alan Mycroft, Eben Upton, Jack Lang, David Braben und Pete Lomas gegründet und ist in Großbritannien als Wohltätigkeitsorganisation eingetragen.
Die Raspberry Pi Foundation hat als Ziel, das Interesse an Informatik und Elektrotechnik in Schulen und bei Kindern zu fördern und früh Kenntnisse in diesen Bereichen zu erlangen. Daher stellt die Raspberry Pi Foundation preisgünstige Einplatinenrechner, wie auch den Raspberry Pi 3, her. Diese können und sollen für Experimente genutzt werden. Die Raspberry Pi Foundation wird unterstützt durch Bildungsfonds
Der durch Massenproduktion ermöglichte günstige Preis hat auch schließlich das Interesse von Hobby-Bastlern geweckt, die so genannte Maker-Szene.
Das Raspberry Pi 3, welches für „Experiment: Erkennung des Paketboten mit dem Raspberry Pi und OpenCV“ genutzt wurde, ist 50% schneller als das Model 2b, welches etwa der Rechenleistung eines Athlon Thunderbird mit einer Taktfrequenz von 1.1Ghz entspricht. Die GPU des Raspberry Pi berechnet etwa 24 GFLOP/s.
Auf dem Raspberry Pi 3 wird standardmäßig Linux (Raspbian, ein Derivat von Debian) als Betriebssystem genutzt. Als Speicher dient eine wechselbare Micro-SD Karte, der Arbeitsspeicher ist auf der Platine integriert. Der Raspberry Pi verfügt über diverse Anschlüsse, wie USB, Ethernet, ein Kamera-Interface (CSI), HDMI-Videoausgang, Audio-Ausgang, 802.11n Wireless LAN und Bluetooth 4.1. Als Stromversorgung dient ein 5V Micro USB Netzteil, als portable Stromversorgung kann ein portables USB-Ladegerät genutzt werden. Im Vergleich zu Verbraucher-Laptops und PC’s besitzt der Raspberry Pi frei programmierbare und belegbare GPIO Pins. Dabei handelt es sich um digitale Eingänge/Ausgänge, welche für Schaltungen genutzt werden können.

OpenCV
OpenCV ist eine Open-Source Programmier-Bibliothek, die über 500 optimierte Algorithmen und Funktionen zur Video und Bildanalyse beinhaltet. Darunter auch die Filter, die für das „Experiment: Erkennung des Paketboten mit dem Raspberry Pi und OpenCV“ genutzt wurden. OpenCV wird seit ihrer Einführung im Jahr 1999 von einer breiten Community im Feld der Bilderkennung genutzt. Ursprünglich wurde OpenCV von einem Team um Gary Bradski bei der Firma Intel entwickelt. 2006 wurde die Version 1.0 veröffentlicht.
Gary Bradski ist ebenfalls Autor des Nachschlagewerks „Learning OpenCV“.
OpenCV ist optimiert für Effizienz und Echtzeitanwendungen, es ist in der Programmiersprache C geschrieben und kann mehrere Prozessoren gleichzeitig nutzen. Das Ziel von OpenCV ist es, eine einfache Infrastruktur zu bieten, um kurzfristig Bilderkennungsanwendungen zu entwickeln.22 Auch wenn OpenCV in der Programmiersprache C geschrieben wird, kann die Bibliothek unter anderem auch über Programmiersprachen wie Python und Java eingebunden werden.
Genutzt wird OpenCV beispielsweise für die Analyse von Überwachungskameraaufnahmen und für die Identifizierung und Markierung von mangelhaften Produkten auf einer Produktionsstraße. Nur wenige Menschen wissen, dass Bilderkennung beispielsweise für Google Street View genutzt wird, aber gerade bei solchen Anwendungen werden die Techniken aus OpenCV, wie automatische Kamera-Kalibrierung und Bild-Zusammenfügung, in großem Umfang genutzt.
Die Lizenz von OpenCV erlaubt die kommerzielle Nutzung in Produkten.

Experiment: Erkennung des Paketboten mit dem Raspberry Pi und OpenCV
In diesem Experiment wird getestet, ob die Erkennung des Paketboten mit günstiger Hardware, wenig Vorkenntnissen und Open-Source-Software möglich ist.
Vorüberlegung:
Die Erkennung von Objekten, Formen und Mustern geschieht über prägnante Merkmale. Unterscheiden sich Objekte, Formen oder Muster nicht, so ist auch kein Unterschied festzustellen. Als Voraussetzung für das Experiment wird angenommen, dass der Paketbote, in diesem Fall ein DHL-Lieferwagen, immer gelb ist und eine bestimmte relative Größe zum Gesamtbild besitzt. Da die Kamera fest positioniert wird, ändert sich das Gesamtbild nur durch bewegte Objekte. Das heißt: Ein Bild A unterscheidet sich von Bild B nur durch eine abschätzbare Differenz. Die relative Größe eines Objektes zum Gesamtbild lässt sich ebenfalls feststellen.
Da es sich bei der genutzten Kamera zudem um eine Farbbildkamera handelt, lassen sich auch Farben Filtern. In diesem Fall ist ein Gelbton gesucht.
Es stehen also folgende Merkmale für eine Bilderkennung zur Verfügung:
Die Farbe des Objektes
Die relative Größe des Objektes
Veränderung zu einem Vergleichsbild
Die prägnanten Merkmale für eine einfache Bilderkennung sind also gegeben.
Umsetzung:
Wie bereits beschrieben (Siehe: Background-Subtraction), lässt sich zwischen einem Bild A und Bild B eine Differenz bilden („Bild mit Objekt“ & „Bild ohne Objekt“ in der Abbildung: Schritte der Bilderkennung). Da in dieser Differenz jedoch auch Farbrauschen und Helligkeitsänderungen enthalten sind, enthält das Bild der Differenz mehr als die nötigen Informationen zur Unterscheidung von signifikanten Merkmalen. Dies lässt sich durch eine Glättung der Differenz lösen. Dazu wird ein gaußscher Weichzeichner über das Bild der Differenz gelegt. Kleine Änderungen im Bild, wie sie durch Farbrauschen und Helligkeitsänderungen entstehen, werden so vernachlässigt und es verbleiben nur noch die signifikanten Änderungen (Siehe „Weichzeichnung von Differenz“ in der Abbildung: Schritte der Bilderkennung).
Da ein auffälliger Gelbton im gesuchten Objekt auftritt, wird auch dazu ein Filter verwendet, um die Farbwerte vom Urbild zu isolieren. Kombiniert man nun das verarbeitete Bild der Differenz und den gefilterten gelben Farbton, so entsteht ein Kandidatenbild. (Siehe „Kombination“ in der Abbildung: Schritte der Bilderkennung).
Durch die Bemessung der relativen Größe der Objekte im Kandidatenbild im Vergleich zum Gesamtbild, lässt sich bei der fest positionierten Kamera ein Größenbereich festlegen, der erwartungsgemäß einem DHL-Lieferwagen entspricht. So werden kleinere gelbe Objekte aus dem Kombinationsbild ausgefiltert.

Einschränkungen:

  • Die Bilderkennung ist nur bei Tageslicht möglich, da im Dunkeln die Farbunterschiede nicht mehr erkannt werden können.
  • Sollte ein anderes Objekt mit den gesuchten Merkmalen im Bild auftreten, wird auch dieses eventuell fälschlicherweise als DHL-Lieferwagen erkannt.
  • Je nach Toleranz-Einstellung des Farbfilters können auch Orange Objekte als Gelb erkannt werden.
  • Der Gesamte Prozess der Filterung und Informationsauswertung auf dem Raspberry Pi 3 mit OpenCV dauert nach eigenen Messungen zwischen 100ms und 300ms pro Bild.

Fazit
Die Bilderkennung und auch die komplexe Bilderkennung ist mit OpenCV und dem Raspberry Pi möglich.
Eine Einschränkung bilden zeitkritische und Echtzeitanwendungen wie beispielsweise das autonome Fahren. Ist die Zeitspanne zwischen Ereignis und Ergebnis der Auswertung zu vernachlässigen, so lassen sich alle möglichen Szenarien der Bilderkennung mit dem Raspberry Pi umsetzen.
Da die Anschaffungskosten und die Einarbeitungszeit gering sind, wird dies zu mehr durch Bilderkennung gestützte automatisierte Prozesse führen, denn bereits Laien können diese Verfahren in eigenen Projekten einsetzen. Somit ist wahrscheinlich, dass sich mehr Menschen mit diesem Thema befassen, als dies noch vor einigen Jahren der Fall war und damit werden auch mehr neue Produkte auf diesem Gebiet entstehen.
Einfache Objekte, Formen und Muster, dessen Merkmale sich gut eingrenzen lassen, beispielsweise im Kapitel Experiment: Erkennung des Paketboten mit dem Raspberry Pi und OpenCV, können mit wenig Aufwand auf einem Raspberry Pi mit OpenCV implementiert werden. Sollen komplexere Muster erkannt werden, so kann in vielen Fällen ebenfalls auf die Funktionen von OpenCV zurückgegriffen werden. Jedoch ist hier ein größeres Wissen zum Thema Bilderkennung erforderlich.

—————————

Quellen:

  • Gary Bradski und Adrian Kaehler (2008):
    Learning OpenCV
    Verlag: O’Reilly UK Ltd.
  • Computer and Machine Vision: Theory, Algorithms, Practicalities (2012):
    E.R. Davies
    Verlag: Elsevier Science Publishing Co Inc.
  • OpenCV 2 Computer Vision – Application Programming Cookbook (2011):
    Roboert Laganière
    Verlag: Packt Publishing
  • raspberrypi.org

Kommentare sind geschlossen.