RisikoCam

Aus toolbox_interaktion
Wechseln zu: Navigation, Suche
 „Automatisierte Erkennung von Spielfiguren des Brettspieles Risiko“
Gesamtaufbau

Die Projektarbeit „RisikoCam“ ist eine Projektarbeit im Fach Interaktion, das von vier Elektro- und Informationstechnik Studenten an der Technischen Hochschule Nürnberg Georg Simon Ohm durchgeführt wird. Dabei geht es um das Brettspiel Risiko, bei dem in jeder Runde die Figuren jedes Spielers gezählt werden müssen. Die Zählung der Figuren soll automatisiert und angezeigt werden.

Konzept

Das Risiko Spielfeld zeigt die Weltkarte mit den verschiedenen Kontinenten, die ihrerseits wieder in Regionen aufgeteilt sind. Am Ende einer Runde stehen pro Region nur Spielfiguren eines Spielers, die durch die Farbe identifiziert werden. Das Ziel dieses Projektes ist es, die Spielfiguren zu erkennen, einem Spieler zuzuordnen und das Ergebnis der Zählung anzuzeigen. Die Hardware besteht, wie im Bild „Gesamtaufbau“ oben zu sehen ist, aus dem Spielbrett mit Spielfiguren, einer Kamera, die über ein Stativ senkrecht über dem Spielfeld positioniert wird und einem Computer, der die Verarbeitung und Ausgabe steuert. Bei jedem Bild, was im Folgenden erwähnt wird, muss die Kamera senkrecht über dem Spielfeld platziert sein und das Spielfeld soll ausreichend Hell mit natürlichem Licht bestrahlt werden. Dies soll ein möglichst unverzerrtes Bild mit hohem Kontrast ergeben. Zuerst wird ein Bild vom leeren Spielfeld als Ausgansbild aufgenommen. Jetzt darf das Spielfeld nicht mehr verschoben werden, um später eine Hintergrundsubtraktion mit wenig Rauschen zu ermöglichen. Nach jeder Runde wird erneut ein Runden-Bild aufgenommen, welches mit Hintergrundsubtraktion vom Eingangsbild abgezogen wird. Das subtrahierte Bild enthält nun neben Rauschen nur noch die Farbunterschiede, die von den Spielfiguren erzeugt werden. Durch Wertung der einzelnen Pixel im subtrahierten Bild, wobei Weiß und Rauschen als null und Grauwert, der kein Rauschen ist, als eins gewertet wird, bekommt man nun die Position und Anzahl der Figuren. Nimmt man nun den Grauwert der Pixel vom Runden-Bild an den Positionen der als eins gewerteten Pixel, findet man die Farbe der Figuren. Dies kann entweder durch den Schwerpunkt der Figur oder den Medianwert erfolgen. Nachdem alle mit eins gelabelten Regionen den einzelnen Spielern zugeordnet wurden, wird das Punkte-Ergebnis auf dem Bildschirm des Computers angezeigt.

Systemeigenschaften

Hardware


- Als Risiko Brettspiel wurde das Modell B7404100 in deutscher Ausgabe benutzt.
- Die Kamera ist eine QuickCam Pro 9000 mit 2 Megapixel Auflösung.
- Der Computer ist beliebig, sollte aber Windows 7 oder neuer installiert haben, da sonst die Software wahrscheinlich nicht installierbar ist.


Software


- Als Betriebssystem wird Windows 10 verwendet
- Als Entwicklungsumgebung wird Visual Studio Community 2017 mit einem OpenFrameworks Plugin verwendet.
- Es wird für die Bibliothek OpenFrameworks Version „of_v0.9.8_vs2017_release“ benutzt. Für die Bildverarbeitung wird vor allem ofOpenCV als mitgeliefertes Addon eingesetzt. OpenCv ist eine eigenständige Bibliothek und das Addon ofOpenCv in OpenFrameworks ist ein Wrapper zur einheitlichen Verwendung mit der OpenFrameworks Syntax. Zum leichteren Bedienen der Bibliothek wird noch das Addon ofxCv nachinstalliert (siehe: https://github.com/kylemcdonald/ofxCv).


Softwareimplementierung

Für die Implementierung wird, wie oben erwähnt, Visual Studio mit OpenFrameworks benutzt. Bei der Erstellung eines Projektes in Visual Studio wurde der Projektgenerator aus der OpenFrameworks Bibliothek verwendet. Dieser ermöglicht es grafisch die benötigten Addons ofxGui, ofxOpenCv und ofxCv einzubinden und so alle nötigen Abhängigkeiten automatisch zu erzeugen. Dabei ist ofxGui vor allem für das Anzeigen der Teilschritte, Tests und die Darstellung des Ergebnisses notwendig. ofxOpenCv und ofxCv sind dagegen für die Bildverarbeitung notwendig. Mit der Einbindung des ofxGui Addons bekommt man automatisch eine Struktur mit einer main.cpp ofApp.cpp und ofApp.h. Dabei erstellt die main()-Funktion ein ofApp Objekt, welches dazu konzipiert ist erst die setup()- Funktion einmal aufzurufen und darauf die update()-Funktion periodisch zu durchlaufen. Noch dazu gibt es Funktionen, die bei u.a. Tastendruck aufgerufen werden.

Bild Eingabe

Die Kamera wird in OpenFrameworks automatisch durch ein „ofVideoGrabber“ Objekt erkannt. Dazu wird ein Objekt in App.h angelegt. Und in der setup()-Funktion von ofApp.cpp mit cam.setup(winWidth, winHeigth); initialisiert. Wobei „winWidth“ auf 1600 und „winHeight“ auf 1200 die Auflösung in Pixeln festgelegt. Mit ofPixelsRef pixels = cam.getPixelsRef(); werden in der keyPressed()-Funktion von ofApp die Pixel des Bildes, mit den RGB-Werten, von der Kamera an das Programm übergeben.

Bildverarbeitung

Beim Risiko Brettspiel werden Punkte aufgrund des Standortes der Figuren einer Farbe vergeben. Dabei gibt eine eingenommene Region und ein eingenommener Kontinent Punkte. Eingenommen bedeutet dabei, dass nur Figuren einer Farbe auf einer Region bzw. Kontinent stehen, was am Ende einer Runde immer gegeben ist. Um dies Zählung der Punkte zu ermöglichen, wird ein Kontinent und die Regionen durch eine Maske erkannt und in einer Klasse „kontinent“ gekapselt. Diese hat eine set()-Funktion für den Kontinent-Schwerpunkt und eine add()-Funktion für die einzelnen Regionen, die den Datentyp „ofPolyline“ besitzen. Eine Figur wird durch Farbe, X- und Y-Position definiert ist, diese wird in einer Klasse Figur gespeichert. Jeder Spieler hat genau eine Farbe und wird in einer Klasse Player definiert. Jeder Player wird u.a. durch eine Liste an Figuren und einen minimalen und einen maximalen Farbwert vom Typ „ofColor“ definiert. Im Folgenden wird die logische Abarbeitung der einzelnen Schritte aufgezeigt. Die Verarbeitung der Bilder erfolgt in der ofApp Klasse. Dabei werden die einzelnen Schritte durch Tastendruck in der keyPressed()-Funktion aufgerufen. Mit Taste „q“ wird ein Hintergrundbild vom leeren Spielfeld als Eingangsbild aufgenommen. Mit einer Maske werden die Regionen auf dem Eingangsbild definiert und in einem Objekt der Kontinent-Klasse gespeichert. Mit „w“ kann darauf das Runden-Bild am Ende einer Runde aufgenommen werden. Hiermit werden die Figuren durch Hintergrundsubtraktion herausgefiltert und durch den Schwerpunkt und die Farbe definiert und den Spielern zugeordnet. Das Programm vergleicht die Position der Figuren jedes Spielers mit der Position der Regionen und vergibt dementsprechend Punkte. Am Ende wird der Punktestand auf der Konsole ausgegeben.


Zusammenfassung

Mit dem Projekt RisikoCam wird die Erkennung und Verarbeitung von Spielfiguren, dynamisch für jede Runde, erstellt. Dazu wird auch eine Ausgabe in der Konsole für den Punktestand der einzelnen Spieler realisiert.

Ausblick

Dieses Projekt ist für eine Weiterführung geeignet, da noch Verbesserungen möglich sind. Ein wichtiger Punkt ist die Erkennung der Regionen und Kontinente aus dem Eingangsbild, anstatt der Verwendung einer Maske. Dies hat sich wegen der geringen Farbunterschiede der einzelnen Regionen, vor allem bei schlechten Lichtverhältnissen, als schwierig herausgestellt. Die Ausgabe der Punktestände kann noch anschaulicher in der grafischen Oberfläche integriert werden, damit alle Informationen auf einen Blick sichtbar sind.

Download