MIN-Faculty
Department of Informatics
Scene analysis and visualization (SAV)

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

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.

Vorläufiger Zeitplan / Wichtige Termine:

  • 3. April 2014
    • Vorstellung des Praktikums,
    • Gruppen bilden und Thema aussuchen,
    • Erste praktische Bildverarbeitungsübungen am Rechner.
  • 10. April 2014
    • Weitere praktische Bildverarbeitungsübungen am Rechner.
    • Vorstellung der Projektgruppen und Themen untereinander.
  • 17. April 2014
    • Mitbringen der ausgwählten Spiele, Aufnahmen mit DSLR im Labor.
    • Beginn der Erstellung des Grobentwurfs und des Pflichtenheftes.
  • 24. April 2014
    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.
  • 8. Mai 2014
    • Einführung in die Versionsverwaltung mit SVN.
    • Einrichtung der Versionsverwaltung für alle Gruppen
  • 22. Mai 2014
    • Einführung in die verteilte GUI-Programmierung mit Racket.
    • Unterscheidung zwischen Single- und Multiplayer.
  • 5. Juni 2014
    Vorstellung des Zwischenstandes der Gruppen untereinander. Diese sollte folgendes umfassen:
    • Das Gruppenthema,
    • die gewählten Lösungsansätze und
    • die bisher entwickelten Software-Module.
  • 19. Juni 2014
    Abgabe des Feinentwurfes des Programms. Dieser sollte folgendes umfassen:
    • Die Schnittstellen,
    • die Paketstruktur und
    • die verschiedenen Module der Software.
  • 10. Juli 2013 (letze Sitzung)
    • Präsentation der Software auf dem vorläufigen endgültigen Stand
  • bis spätestens 20. September 2014!
    Endgültiger Praktikumsabschluss
    • Fertige Software liegt vor
    • Abgabe der Entwickler- und Anwender-Handbücher

Materialien:

27. Mai 2014 - Neue VigRacket-Version

Heute habe ich eine neue Version der VigRacket BV-Bibliothek veröffentlicht. Diese bringt als wesentliche Neuerung einen verbesserten Image-Viewer mit, der auch Zoomen und Navigieren beinhaltet:

  • Ctrl+"+" oder Mausrad drehen: Hinein zoomen (+10%)
  • Ctrl+"-" oder Mausrad drehen: Hinaus zoomen (-10%)
  • Ctrl+"0": Zoom zurücksetzen (auf 100%)
  • Pfeiltasten oder Scrollbars: Innerhalb des Bildes navigieren

Die neue Version kann hier heruntergeladen werden. Die Links weiter unten wurden bereits aktualisiert.

22. Mai 2014 - Verteilte Spieleprogrammierung

Zu diesem Termin wurde von Susanne Germer eine von mir programmierte Netzwerk-basierte Variante des bekannten TicTacToe-Spiels vorgestellt. Die dazugehörigen Dateien können hier heruntergeladen werden:

Die beiden Dateien sind im Moment so vorkonfiguriert, dass sie auf einem Rechner lokal ausgeführt werden können. Soll das Spiel wirklich über Netzwerk-Multiplayer erfolgen, so sind folgende Dinge zu tun bzw. in Erfahrung zu bringen:

  1. IP-Adresse des Hosts (auf diesem Rechner wird die "universe.rkt"-Datei ausgeführt).
    Diese bekommt man z.B. durch Öffnen eines Terminals und der Eingabe von "ifconfig" heraus (inet: XXX.XXX.XXX.XXX)
  2. Datei "universe.rkt" auf dem Host starten. Auf diesem kann natürlich auch ein Spieler spielen.
  3. Die Datei "world.rkt" an alle Spieler verteilen.
  4. In der Datei "world.rkt" in der Funktion "(create-world n)" (ganz unten):
    "LOCALHOST" durch die herausgefundene IP-Adresse des Universe-Hosts ersetzen
  5. In der Datei "world.rkt" (ebenfalls ganz unten) den Ausdruck "(create-many-worlds ... )" durch "(create-world "X")" ersetzen. Hierbei ist "X" der String, mit dem sich der Spieler identifiziert und seine Marke auf das 3x3-Feld setzt.
  6. Auf jedem Rechner, an dem ein Spieler sitzt, die "world.rkt" ausführen. Warten, bis alle Spieler da sind und spielen!

8. Mai 2014 - Versionsverwaltung mit Subversion

Das Subversion-Handout sowie die Präsentation habe ich nun online gestellt:

Ausserdem gibt es unter Windows das gute Explorer PlugIn Tortoise SVN welches mit SVN verwaltete Verzeichnisse im Explorer hervorhebt und den Umgang erleichtert. Unter Mac OS X 10.6 funktioniert das Äquivalent SCPlugin leider nicht, statt dessen kann aber das im RZ installierte Xcode verwendete werden (Menüeintrag: SCM).

17. April 2014 - Nützliche Bildverarbeitungsverfahren (zur Spielfelderkennung)

  • Download der Folien des Seminarteils.
  • Download des zugehörigen Racket-Programms (inklusive Bild)

10. April 2014 - Bildverarbeitungsübungen (Teil 2)

  • Download der zweiten Bildverarbeitungsübungen.
  • Download der zusätzlichen Racket-Übungsaufgaben

3. April 2014 - Bildverarbeitungsübungen (Teil 1)

  • Download der Einführungspräsentation.
  • Download der Installationsanleitung der VigRacket-Bibliothek.
  • Download der ersten Bildverarbeitungsübungen.

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 z.Zt 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 in den Order "~/Library", so dass eine Verzeichnisstruktur "~/Library/Racket/6.0/collects/vigracket/" entsteht. Nach der Installation kann man durch Aufruf der enthaltenen Beispiele (Doppelklick auf "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 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 2010 Runtime (32bit und/oder 64bit).
  2. Herunterladen und Entpacken der VigRACKET-Anbindung (gleiches Paket für alle Betriebssysteme!).
  3. Kopieren des entpackten "Racket"-Ordners nach C:\Users\BENUTZERNAME\AppData\Roaming\ (für Windows 7+8). Bei Nachfrage des Kopiervorgangs "In Ordner integrieren" auswählen!

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 (am besten Version 1.10.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. Kopieren des entpackten "VigRACKET"-Ordners in das (systemspezifische) collects-Verzeichnis von Racket.
  4. 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
    Sollte die Datei fehlen, kopiert sie (mit entsprechenden Rechten) nach der Erstellung mittels (require vigracket) aus dem vigra_c/bin-Unterordner.