Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

ws1516:interaktives_spiel_gegen_ki

Dies ist eine alte Version des Dokuments!


Interaktives Spiel mit Künstlicher Intelligenz

Einführung

Wer ist dabei?

  • Lea Nicolaus
  • bis 24.2.2016: Dominic van Deest

Projekidee

Die Idee ist einfach. Ein Computer spielt gegen dich Mühle. Auf dem Tisch liegt das Spielbrett vom Spiel Mühle. Der menschliche Spieler bewegt die Spielsteine per Hand, wobei die Künstliche Intelligenz von oben das Spielbrett beobachtet und seine Anweisungen für die Spielzüge auf dem Display anzeigt. Natürlich soll der Computer nicht leicht zu besiegen sein.

Hilfsmittel

Ausstattung

  • Kamera: PS3 Eye Camera
  • Stativ
  • Spielesammlung
  • Computer

Software

  • opencv Paket für Python

Planungsphasen

1. Bildinput verarbeiten

2. Spiel programmieren

3. Dem Computer das Spiel beibringen (KI erstellen)

4. Schnittstellen finden und zusammenfügen

Dokumentation

Phase 1

Kamera und Python

Die Schnitstelle zwischen Python und der Kamera haben wir mit dem Packet „OpenCV“ für Python gefüllt. Das Packet ermöglicht es Bilder von allen angeschlossenen und internen Kameras aufzunehmen, zu betrachten, zu speichern und weiterzuverarbeiten. Das Packet wird importiert mit import cv2 Ein Bild Aufnehmen: cv2.VideoCapture(#Kamera) Die Zählung der Kameras beginnt bei 0 wobei dies meistens die interne Kamera anspricht. Das aufgenommene Bild wird in eine Variable gelsen: bild = cv2.VideoCapture(#Kamera).read() Die variable „bild“ ist ein Tupel, die erste information ist „True“ und die zweite enthällt ein Array mit den Pixeldaten von dem Foto.

Das Bild wird folgendermaßen angezeigt:

cv2.imshow("Anzeige",bild[1])
cv2.waitKey(0)

waitkey ist dafür da, dass gewartet wird, während das Bild angezeigt wird.

Ein Bild Speichern:

cv2.imwrite("Dateiname.png", bild[1])

In Graustufen ändern:

cv2.cvtColor(bild[1], cv2.COLOR_BGR2GRAY)

Ecken im Bild finden

Damit der Computer auch etwas mit dem Bild anfangen kann muss es auf bestimmte Charakteristiker Untersucht werden. Wir haben uns entschieden zunächst die Ecken des Mühle Spielbretts ohne Spielfiguren finden zu lassen, damit es möglich ist ein GRundgerüst zu erstellen, also zu wissen wo die Felder sind. Dazu verwenden wir Eine Funktion von Open CV: Harris Corner DEtection. corner Harris(). Hinter dieser Funktion steht ein Mathematischer Algorythmus, welche einzelne Regionen (Die größen kann man vorgeben) auf Unterschiede in der Helligkeit. Diese Werden in einem Tupel (u,v)Dargestellt, der folgendermaßen berechnet wird:

Um Ecken aufzuspühren muss diese Fuktion maximiert werden. Die Maximierte Fuktion sieht ungefähr so aus:

wobei

Nun weden die Eigenwerte von M, λ_1 und λ_2 berechnet. Mithilfe dieser Werte kann nun bestimmt werden in welchem Bereich eines Bildausschnitts sich Ecken befinden und wo nicht. Folgende Grafik veranschaulicht dies:

Wir haben in unser Bild von dem Mühlespielbrett einmal alle gefundenen Ecken mit grünen Pixeln eingezeichnet:

Dies ist ein großer Erfolg, denn jetzt ist deutlich wo sich die Felder befinden und somit wo eine Spielfigur sein kann.

Quelle: http://docs.opencv.org/3.0-beta/doc/py_tutorials/py_feature2d/py_features_harris/py_features_harris.html

Beleuchtung

Die Beleuchtung des Spielbretts erschien uns eine Wichtige Komponente der Bilderkennung, also haben wir verschiedene Belichtungswinkel ausprobiert, um dann festzustellen, dass es nur einen sehr kleinen unterschied macht, wenn man das Brett separat belichtet oder mit der Raumbeleuchtung erhellt. Wichtig ist nur überhapt licht zu haben, so dass nicht zu hohe Kontraste entstehen, die als Ecken gedeutet werden könnten. Die beleuchtung spielte eine größerer Rolle, als wir dasa Bild von dem Brett, zur besseren Ecken Findung über den Schwellwert komplett auf Schwarz oder Weiß gebracht haben. Allerdings hat sich herrausgestellt, dass es besser ist wenn man das Bild in Graustufen betrachtet, um eben diesen Faktor der Beleuchtung auszuklammern.

Zwischzeitliches Abschließen des ersten Projektabschnitts

Da uns einiges Grundwissen aus der Linearen Algebra fehlt unterbrechen wir hier und fahren fort mit dem zweiten Teil des Projekts. Hier offen geblieben sind folgende Fragen:

  • Wie kann ich fafür sorgen, dass die Spielfelder als solche identifiziert werden und die einzelnen Positionen als Mittelpunkt der vielen Pixel in der Umgebung abspeicchern?
  • Wie erzeuge ich eine Funktion, die ein wenig Tolleranz bezüglich der Position und des Kippwinkels der Kamera gibt, sodass die Brettstruktur immer wieder erkannt wird?
  • Wie erkenne ich Spielsteine im allgemeinem und wie unerschiede ich im speziellem die Farbe der Spielsteine (Weiß oder Schwarz)?

Planung und Protukol

ws1516/interaktives_spiel_gegen_ki.1462131910.txt.gz · Zuletzt geändert: 2016/05/10 14:46 (Externe Bearbeitung)