Raspberry Pi erkennt Spielkarten
Der Raspberry Pi erkennt Spielkarten anhand deren Farben und Muster. Ein im letzten Jahr veröffentlichtes Video auf Youtube zeigt, wie das Live funktioniert, neben dem Source Code findet man auch alle weiteren Informationen zu dem Projekt.
Raspberry Pi erkennt Spielkarten
Der Raspberry Pi 3 ist schon so leistungsfähig, dass er in Echtzeit Bildinformationen verarbeiten kann. Das erlaubt eine ganze Menge spannender Projekte.
- ein Roboter, der die Umgebung erkennt
- eine Sicherheitskamera die Menschen am Gesicht erkennt
- Kartenzähler für Black Jack
- uvm
Das lässt sich auch spielerisch umsetzen. Ein Entwickler hat mit ein wenig Code dem Pi beigebracht Spielkarten zu erkennen. Dank der OpenCV Python Bibliothek ist das Ganze recht einfach selbst nachzuprogrammieren und lässt eine Menge Folgeprojekte zu (andere Kartenspiele wie Magic The Gathering, Yu-Gi_oh! , usw). Mit Hilfe der zuletzt vorgestellten Pi Bright Platine mit IR und normalen LEDs verbessert man das aufgenommene Bild der Pi Kamera auch bei schlechten Lichtverhältnissen.
Funktionsweise
Neben dem Raspberry Pi 3 und der Pi Kamera benötigt man für das Projekt nur noch Software. Diese besteht nicht etwa in tausenden Zeilen C++ oder Java Code. In einem überschaubar kurzen Python Script wird unter Einsatz der Open CV Bibliothek die Mustererkennung von Live Bildern der Spielkarten ermöglicht. Das Script ist dabei in 2 Teile unterteilt:
- Objekte erkennen
Das Bild wird simultan in ein monochrones Bild umgewandelt (Schwarz/Weiß ohne Farbwerte) und danach über einige Filter bearbeitet (Blur, Threshold). Das führt dazu, dass die Konturen der einzelnen Objekte für die Software besser erkennbar sind. Der erste Schritt resultiert in den Informationen wo Objekte im Bild liegen und wie viele Objekte es insgesamt gibt. - Spielkarten identifizieren
Nachdem die Umrisse jeder Karte bekannt sind wird nun aus dem Originalbild dieser Ausschnitt jeweils mit einer Bibliothek an Bildern verglichen. Dazu werden die Eckpunkte der Karte errechnet und daraus das Bild transformiert (gedreht und skaliert). Aus der Ecke wird danach der Ausschnitt auf Kartentyp und Farbe analysiert.
Muservergleich
Nachdem die Bestandteile einer Spielkarte vom Raspberry Pi 3 durch einfache 2D Bildtransformation herausgefiltert wurde müssen diese nun verglichen werden. Je nach Komplexität spricht man hier auch gern von einer KI, in dem einfachen Fall der Karten beschränkt sich der Vergleich auf wenige unterschiedliche Möglichkeiten.
Damit die Mustererkennung gut funktioniert, ist es wichtig, dass der Kartentyp (Zahl oder Buchstabe) beziehungsweise dessen Farbe (Kreuz, Herz, Pik oder Karo) möglichst Pixel genau extrahiert werden. Der eigentliche Vergleich ist eine simpler Bildfilter, bei dem das eine Query Image = Bitmap (nur schwarz und weiß Infos) vom Train Image subtrahiert wird. Je weniger weiß übrig bleibt, desto wahrscheinlicher ist es das gesuchte Muster. Beispiel:
Das angezeigte Query image der 8 wird vom Train image K subtrahiert. Es ergibt sich ein schwarz/weiß Bild aus einem rechteckigen Feld von 0ern und 1en. Diese werden Summiert, es ergibt sich zum Beispiel eine Summe von 1500 1en. Nun wird das selbe mit dem Train image 8 gemacht, wodurch eine Summe der 1en von 30 errechnet wird. Da diese Zahl wesentlich kleiner ist, ist die Wahrscheinlichkeit viel größer, das es sich um das gesuchte Muster handelt.
Der beschrieben Mustervergleich muss in diesem Fall für jede einzelne Karte im Bild für alle Muster pro Frame gemacht werden. Das entspricht einer starken Belastung für eine CPU und erfordert große Rechenkapazität. An der angezeigten FPS (Frames per second) Zahl ist ersichtlich, dass sich selbst der Raspberry Pi 3 dabei sehr anstrengen muss.
Source Code
Den gesamten Source Code vom Projekt findet man auf GitHub und ist in jedem Fall einen Blick Wert. Daraus kann man gut lernen, wie man selber Bildverarbeitung am Raspberry Pi entwickeln kann. Zusätzlich zeigt es ein recht simples Verfahren von Mustererkennung, dass man für das eigene Projekt gerne optimieren oder erweitern kann.
Fazit
Bildverarbeitung am Raspberry Pi ist ein sehr spannendes Thema, das dank guter Bibliotheken wie Open CV auch für Anfänger recht einfach ist. Damit erkennt der Raspberry Pi nicht nur Spielkarten, je nach Anwendungsfall ergeben sich fast unendlich viele Ansätze. Bildverarbeitung und Mustererkennung ist ein Feld in der Software Entwicklung, in dem man noch große Fortschritte machen kann, insbesondere im Zusammenhang mit künstlicher Intelligenz.
Wofür würdet ihr gerne so eine Mustererkennung einsetzen?