MIN-Fakultät
Fachbereich Informatik
Szenenanalyse und Visualisierung (SAV)

Infoseite zu dem Bildverarbeitungspraktikum (Do 14 - 18 Uhr) im SoSe 2016

Ablauf des Praktikums:

Ziel des Praktikums ist die Entwicklung eines Spiels mit Hilfe der funktionalen Programmiersprache Racket sowie der Anbindung der VIGRA-Bildverarbeitungsbibliothek über die VigRacket-Schnittstelle. Das Spiel sollte hierbei aus einer Aufnahme des Spielzustands generiert werden, und anschließend Multi- oder Singleplayer-basiert weiter gespielt werden können. Insgesamt werden in diesem Praktikum folgende Kenntnisse vermittelt:

  • Bildentstehung und Bildvorverarbeitung,
  • Objekterkennung / Klassifikation von Bildinhalten,
  • Bildverstehen,
  • Interaktive, Netzwerkbasierte GUI-Programmierung und
  • Künstliche Intelligenz (im Sinne der implementierten Spiellogik sowie mögl. Computergegner).

Die gewählten Teilprojekte sollen in Kleingruppen bearbeitet werden, die aus jeweils 2 bis 3 Personen bestehen.

Aufnahmen der Spielfelder vom 21. April 2016

Die Bilder der Spielfelder werden einige Minuten nach dem Abschluss der Aufnahmen hier zur Verfügung gestellt. Bitte verwendet direkt nach dem Laden der Bilder die VigRacket-Funktion resizeimage und verkleinert die hochauflösenden Bilder vor der weiteren Verarbeitung. Um ein Bild z.B. prozentual zu verkleinern, hilft folgende Hilfsfunktion:

(define (resizeimage-percent img prozent [interpolation 2])
    (let* ((p (/ prozent 100))
           (new_w (round (* (image-width img) p)))
           (new_h (round (* (image-height img) p))))
        (resizeimage img new_w new_h interpolation)))
Um ein Bild img sowohl in der Breite, als auch in der Höhe zu halbieren, kann dann folgender Aufruf dienen:
(define small_img (resizeimage-percent img 50))
Und hier nun die Übersicht über die bereits verfügbaren Aufnahmen. Sobald die Bilder verfügbar sind, erscheint eine Download-Möglichkeit - möglicherweise muss diese Seite dafür im Browser neu geladen werden!
GruppeSpielAufnahmen (zip-komprimiert)
IReversidownload
IIBackgammonTake 1   Take 2
IIIPoker (Texas Hold'em)download
IVMalefizdownload
VDas ver-rückte LabyrinthTake 1   Take 2
VIMensch ärgere dich nichtdownload
VIIMensch ärgere dich nichtdownload

Wichtige Termine (tabellarische Ansicht)

  • 7. April 2016
  • 14. April 2016
    • Weitere praktische Bildverarbeitungsübungen am Rechner (Minikurs BV - 2. Teil).
    • Vorstellung der Projektgruppen und Themen untereinander.
  • 21. April 2016
    • Mitbringen der ausgewählten Spiele, Aufnahmen mit DSLR im Labor.
    • Beginn der Erstellung des Grobentwurfs und des Pflichtenheftes.
  • 28. April 2016
    Weitere Experimente mit den aufgenommenen Bildern. Hilfreiche Materialien hierzu:
  • 5. Mai 2016 - Himmelfahrt
  • 12. Mai 2016
    Vorstellung und Abgabe des Grobentwurfs und des Pflichtenheftes. Darin sollten folgende Punkte enthalten sein:
    1. Das Team, also alle Mitglieder mit Namen und Matrikelnummern.
    2. Das Thema, mit dem ihr Euch beschäftigen wollt.
    3. Der Leistungsumfang der Software, die Ihr entwickeln möchtet.
    4. Rahmenbedinungen, die erfüllt sein müssen, damit das Programm erfolgreich arbeiten kann.
  • 19. Mai 2016 - Pfingstferien UHH
  • 26. Mai 2016
    • Einführung in die Versionsverwaltung mit SVN (Folien, Handout).
    • Einrichtung der Versionsverwaltung für alle Gruppen
  • 2. Juni 2016
    • Einführung in die verteilte GUI-Programmierung mit Racket
      anhand des Client-Server-basierten TicTacToe-Beispiels (universe-ttt.rkt, world-ttt.rkt)
    • Unterscheidung zwischen Single- und Multiplayer.
    • Nachtrag 1: Hier ein TicTacToe-Beispiel, das direkt die TCP-Schnittstelle von Racket benutzt, also ohne das World/Universe-Paket auskommt. Diese Demo besitzt zur Zeit allerdings auch noch keine GUI...
      Der TCP-Server: tcp-server-ttt.rkt und der TCP-Client: tcp-client-ttt.rkt
    • Nachtrag 2: Hier ein TicTacToe-Beispiel, das direkt die TCP-Schnittstelle des Universe-Paket nachbaut, so dass eigene GUIs (ohne World) mit dem Racket-Universe als Server verwendet werden können. Diese Demo besitzt zur Zeit allerdings auf der Client-Seite noch keine GUI...
      Das Archiv mit allen Dateien kann hier heruntergeladen werden.
    • Nachtrag 3: Falls ihr eine eigene GUI um die "World" mit den Widgets von DrRacket brauen wollt, so rate ich erst einmal davon ab. Wer es dennoch probieren möchte, kann wie folgt vorgehen:
      1. Arbeitet euch in die benötigten Module racket/gui und racket/class ein.
      2. Erzeugt euch eine lokale Kopie des Ordners "DrRacket/share/pkgs/htdp-lib/2htdp" im collects-Verzeichnis von Racket, z.B. "DrRacket/collects/my2htdp"
      3. Öffnet die Datei "DrRacket/collects/my2htdp/private/world.rkt"
      4. Ab Zeile 199 wird die GUI zu einer World erzeugt. Hier könnt ihr entweder eure Änderungen einarbeiten, oder aber von der Klasse world% erben und die Methode (create-frame) überladen. Schaut euch hierzu auch die bereits definierte Klasse aworld% an.
      5. Für den Fall einer Spezialisierung, z.B. als Klasse bworld%, muss diese noch in "DrRacket/collects/my2htdp/private/world.rkt" provided werden und in "DrRacket/collects/my2htdp/universe.rkt" in Zeile 271 ergänzt werden.
  • 16. Juni 2016
    Vorstellung des Zwischenstandes der Gruppen untereinander. Diese sollte folgendes umfassen:
    • Das Gruppenthema,
    • die gewählten Lösungsansätze und
    • die bisher entwickelten Software-Module.
    Weitere Materialien: Beispiel eines erweiterten Spielzustandes am Beispiel Mensch Ärgere Dich nicht: Download.
  • 23. Juni 2016
    Abgabe des Feinentwurfes des Programms. Dieser sollte folgendes umfassen:
    • Die Schnittstellen,
    • die Paketstruktur und
    • die verschiedenen Module der Software.
  • 14. Juli 2016 (letze Sitzung)
    • Präsentation der Software auf dem vorläufigen endgültigen Stand
  • bis spätestens 20. September 2016!
    Endgültiger Praktikumsabschluss
    • Fertige Software liegt vor
    • Abgabe der Entwickler- und Anwender-Handbücher

Benötigte Softwarepakete:

Racket

Das aktuelle Racket kann man unter http://racket-lang.org herunterladen. Es steht für nahezu jeden Betriebssystem bereit. Auf den Pool Rechnern ist zurzeit Racket 6.0 (64-bit) installiert.

Eine gelungene Einführung in die Programmiersprache findet sich unter der offiziellen Dokumentation, die auch in Racket unter Hilfe (F1) verfügbar ist.

Bildverarbeitung mit Racket: VigRacket

Die Bildverarbeitungsanbindung, mit der wir die Aufgaben der Bildverarbeitung innerhalb des Praktikums lösen werden, kann hier heruntergeladen werden. Die Installation besteht im Entpacken des Verzeichnisses und dem Aufrufen/Ausführen der Datei "install.rkt" mit DrRacket. Nach der Installation kann man durch Aufruf der enthaltenen Beispiele "examples.rkt" die Funktionalität testen.

Wer Fehler an der VigRacket findet oder beim Entwickeln selbiger helfen möchte, kann das gerne tun. Die Bibliothek kann z.B. von meiner github-Seite ge-cloned werden.

VigRacket unter Windows benutzen

Befolgt man folgende Schritte, so lässt sie die VigRacket-Erweiterung auch unter Windows mit der entsprechenden Windows-Version von Racket benutzen:

  1. Herunterladen und Installieren der MS Visual Studio 2012 Runtime (Download Link).
  2. Danach gleiche Vorgehensweise wie oben genannt.

VigRacket unter Linux/Unix benutzen

Befolgt man folgende Schritte, so lässt sie die VigRacket-Erweiterung auch unter Linux (z.B. Ubuntu) mit der entsprechenden Version von Racket benutzen:

  1. Herunterladen und Installieren VIGRA-Bibliothek (mindestens Version 1.11.0, entweder über den System-Paketmanager oder von der VIGRA-Homepage aus).
    ACHTUNG! Unter Ubuntu kann es passieren, dass die Vigra-Bibliotheken (libvigraimpex.so.*) im falschen Verzeichnis (usr/local/lib) installiert werden!
    Um dies zu korrigieren, kopiert die Biblitheken bitte an den Ort, den euch "vigra-config --libs" nennt! Zum Beispiel mit:
    sudo cp /usr/local/lib/libvigraimpex.* /usr/lib/x86_64-linux-gnu
  2. Herunterladen und Entpacken der VigRacket-Anbindung (gleiches Paket für alle Betriebssysteme!).
  3. Anpassen der "config.rkt", so dass Racket die korrekte Umgebungsvariablen kennt.
    Falls VIGRA in ein Standardverzeichnis installiert wurde, einfach die Zeile 28 ändern in:
    (define (system-env arg) (system arg))
    Falls VIGRA in ein anderes Verzeichnis installiert wurde, den "source" Befehl (Zeile 27) ggf. anpassen und die Datei "vigra_c/fallback.profile" so anpassen, dass diese den Systempfad um den Installationspfad der VIGRA erweitert.
    ACHTUNG: Aufgrund mangelnder Verzeichnis-Rechte kann es vorkommen, dass die vigra-C-Anbindung nicht in das vigracket Verzeichnis kopiert werden kann. Kontrolliert daher bitte das Vorhandensein der "libvigra_c.so" im vigracket-Verzeichnis.
  4. Danach, wie bei allen anderen Systemen, Ausführen der Datei "install.rkt" mit DrRacket.
  5. Sollte die VIGRA in der passenden Version (>= 1.11.0) gefunden worden sein, es dennoch zu Compilerfehlern kommen, kann das am fehlenden Sprachstandard C++11 liegen. In diesem Fall kann es helfen in der Datei "vigra_c/CMakeLists.txt" folgende Zeile hinzuzufügen:
    set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c++11")

VigRacket unter Mac OS X benutzen

Auf den Pool-iMacs ist die VIGRA bereits installiert, hier kann direkt das install.rkt Skript gestartet werden. Ansonsten empfehle ich, die aktuelle Version der vigra über die MacPorts (www.macports.org) zu installieren:

  1. Herunterladen und Installieren der MacPorts (https://www.macports.org/install.php).
  2. Im Terminal die Vigra und alle Abhängigkeiten installieren:
    > sudo port install vigra
  3. Danach gleiche Vorgehensweise wie oben genannt.