SELFOMAT Software

Für meine Fotobox, den SELFOMAT, habe ich eine Software in Java geschrieben um diese per Touchscreen zu bedienen. Das Konzept hierzu habe ich, neben einigen anderen Themen, in meiner Masterarbeit behandelt. Dabei ging es Maßgeblich darum ein möglichst kosteneffizientes Gerät inklusive Software zu entwickeln welches geeignet ist in den aufkommenden Markt der Fotobox-Vermietungen für Parties einzudringen.

Hier soll es sich Hauptsächlich um die Software als solche drehen. Weitere Themen sind die Auswahl der Programmiersprache und der Hardware unter Betrachtung von Performance und Kosten, und die Fotografische Herleitung des Aufbaus dieser Fotobox.

UI

Der „Home Screen“: Bild-Ansicht mit Galerie-, Einzelbild- und Serienbild-Button

Als Oberfläche kommt hier JavaFX zum Einsatz. Dieses hat sich vorerst unter Raspbian etwas gesträubt, mit ein paar crosskompileten Libraries die ich gefunden habe und so weit ich weiß auch einigen selbst kompilierten weil die anderen nicht gelaufen sind habe ich es dann doch dazu gebracht zu funktionieren.

Die Userführung ist verhältnismäßig simpel. Der Ausgangspunkt der Software, sozusagen der „Home Screen“, ist die Bild-Ansicht. Von hier aus können neue Bilder aufgenommen werden. Zuerst wird nach dem drücken des Auslösebuttons ein Bild mit der eingebauten Kamera geschossen und direkt in den Bilderordner verschoben. Vor dem Auslösen wird ein Countdown angezeigt um den fotografierenden Zeit zu geben in Stellung zu gehen. Ist das Bild geschossen wechselt die Software wieder zurück in den Bildansichts-Modus.

Ansicht während des Countdowns

Von hier aus kann Außerdem auf die Galerie zugegriffen werden in welcher sich der User die bereits geschossenen Bilder per klick auf das Bild in die Bildansicht laden kann. Die Galerie ist in Seiten unterteilt, die jeweils neun Bilder anzeigen. Sind Mehr als neun Bilder geschossen aktiviert sich die Blätterfunktion zu den nächsten Seiten.

Die Galerie-Ansicht

Der Aufbau ist angelehnt an aktuelle Kamera-Apps für Mobilgeräte um dem User einen möglichst einfachen Einstieg in das Gerät zu ermöglichen.

JavaFX

Aus Gründen der Performance und der Möglichkeiten so wie weil es schlicht das aktuellste Oberflächentechnologie, welche sich ohne massiven Aufwand hat Umsetzen lassen. Das mit dem Aufwand habe ich bereits angeschnitten. Bevor die Software auf dem eigentlichen Gerät gelaufen ist, ist einiges an Zeit ins Land gegangen, auf dem Entwicklungsrechner ließ sich die die Software indes allerdings ausführen, also kam es dadurch nicht zu einem Entwicklungsstop.

JavaFX Bietet den Vorteil dass das Layout, ähnlich wie bei Android, zuerst einmal per XML (FXML) erstellt wird und damit der grobe Aufbau  mit Hierarchien schnell gemacht ist, vor allem wenn der SceneBuilder, eine Art WYSIWYG Editor zur Gestaltung, verwendet wird. Danach wird die Funktionalität mittels eines Controllers, also einer Java-Klasse hinzugefügt.

Ein Nachteil an JavaFX ist die leider nicht sonderlich große Verbreitung im Gegensatz zu beispielsweise Swing, auf welchem eine vorhergehende Version des Codes basierte. Die Fehlerbehebung zieht sich so, durch evtl. fehlende Erfahrungswerte anderer Entwickler unter Umständen stark in die Länge.

Die Stage & die StackPanes

Der größte Vorteil von JavaFX der mich dazu bewogen hat diese Technologie zu verwenden war die Performance bei Umschalten zwischen verschiedenen Oberflächen. In JavaFX können innerhalb einer Stage also innerhalb eines Fensters so genannte StackPanes gehalten werden, diese verhalten sich wie übereinander gesapelte Ebenen von Oberflächen die lediglich in den Vordergrund oder Hintergrund geschoben werden anstatt jedes mal komplett neu aufgebaut werden zu müssen. Dadurch kann vor allem auf kleinen Geräten die Zeit des Umschaltens zwischen verschiedenen Ansichten enorm verkürzt und so die UI-Geschwindigkeit und damit die gefühlte Gerätegeschwindigkeit entsprechend erhöht werden. Dies geschieht beispielsweise durch das Ansprechen der verschiedenen UI-Bestandteile im Hintergrund, bevor sie (vom User oder vom Programm) auf die sichtbare Ebene geholt werden.

Funktionen

Auch die Funktionalität gestaltet sich entsprechend dem Kosteneffizienz-Prinzip, verhältnismäßig übersichtlich.

Automatischer Bildupload

Um möglichst viel Manuelle Arbeitsschritte zu überbrücken musste die Fotobox so weit gebracht werden dass sie komplett selbständig arbeitet und lediglich Arbeitsschritte an Rechnerarbeitsplätzen anfallen. Dazu gehört ein Automatischer und Fehlerfreier Start beim Kunden so wie ein automatischer Bildupload auf den Server wenn die Fotobox zurück ist.

Die Fotobox ist mit den Zugangsdaten für einige bekannte WLANs ausgestattet in welche sie sich beim Start automatisch einloggt falls sie sich in deren Radius befindet. Daraufhin wird beim Start der Software ein Test auf Konnektivität des Servers getestet auf welchen sie hochladen möchte. Ist die Konnektivität vorhanden startet der Uploadzyklus zum Server. Dabei wird per MD5-Hash geprüft ob die Bilder wirklich auf dem Server liegen. Ist dies der Fall, werden sie von der Fotobox gelöscht.

Bild Aufnahme

Die neuen Bilder werden wie schon angeschnitten mittels der eingebauten Kamera Bilder aufgenommen. Hierzu wird aus dem Programm heraus gphoto2 als externes Programm Zusammen mit einer einer kompatiblen DSLR verwendet. Das externe Programm wird dabei gestartet und ein File-Watcher überwacht die Ankunft einer bestimmten vorgegebenen Datei. Sobald diese von gphoto geliefert wird, wird ein Skalierungsprozess angestoßen, der verschiedene Größen der Datei bereit stellt 

Bildskalierung

Beider Bildskalierung sind viele verschiedene Einflüsse in Betracht zu nehmen. Schlussendlich hat sich nach einigen Tests herausgestellt dass die Skalierung von JPEGs mittels Graphics2D und Nearest Neighbor Interpolation zumindest unter den versuchten Möglichkeiten die effizienteste war. Bei der Bildskalierung wird die Bildschirmauflösung ausgelesen, damit die Bilder in der jeweils exakt richtigen Größe erstellt werden können Dabei wird zum einen eine Bildschirmfüllende Variante angefertigt, wie auch eine die genau die Buttons in der Galerie füllt.

Druck (experimentell)

Die Druckfunktion ist bisher relativ experimentell. Da über das System gedruckt wird und nicht über die Software an sich, ist die Kontrolle begrenzt. Leider stellt es sich aktuell so dar dass die Druckertreiber nicht zuverlässig laufen, entweder weil sie falsch mit dem Drucker zu kommunizieren scheinen oder weil der Drucker teils erst nach einer Neuinstallation des Treibers erkannt wird.