SELFOMAT – Programmiersprache & Hardware

Die Anfänge

Die Fotobox ist aus einem kleinen Projekt entstanden das ich zum Fotografieren im Studio mit fester Kameraposition angefangen habe. Ich wollte die Kamera via Handy auslösen und bestenfalls die Bilder direkt auf den Rechner bekommen oder zumindest ansehen können. Dazu bin ich ein wenig auf Recherche gegangen und habe das hier gefunden: https://www.blaize.net/2014/04/gphoto-webui-a-php-web-ui-for-gphoto2/

Die Lösung hat ehrlich gesagt schon sehr gut Funktioniert. das ganze ist ein PHP-Script, welches gphoto triggert und dann wiederum die Bilder in der Web-UI anzeigt. Dieses Script hatte ich mir dass zwischenzeitlich ein bisschen angepasst und in der ersten Version der Fotobox für eine meiner Geburtstagsparties laufen.

Dazu habe ich wie auch im obigen Artikel ein Raspberry Pi verwendet. Dieses hat mit Chromium und auf den lokalen Webserver zugegriffen und mir das ganze angezeigt. Ein bisschen von hinten durch die Brust ins Auge, aber was solls, hat ja Funktioniert. 😉 Die Kiosk Funktion von Chromium hat das ganze dann sogar nach einer “echten” Benutzeroberfläche aussehen lassen, dadurch dass auf localhost zugegriffen wurde gab es praktisch keine Ladezeiten, passt also.

chromium-browser --noerrdialogs --kiosk http://localhost

Die Masterarbeit

Nachdem das Gerät einige Male auf meinen Feiern gelaufen war, habe ich dann doch meine Masterarbeit anmelden müssen. Die habe ich wie auch hier beschrieben über eben diese Fotobox geschrieben. Dabei musste ich natürlich wissenschaftlich (zumindest so viel wie möglich) vorgehen. Das betraf auch die Wahl der Hardware & Programmiersprache. Ich habe mich, da die Wahl von Hardware und Sprache voneinander abhing für verschiedene RPi-Modelle in verschiedenen Overclocking Stufen so wie alle (alten & neuen) Rechner, die ich so gefunden habe so wie Java & PHP als Sprachen entschieden. Java und PHP einfach deshalb weil beide Plattformunabhängig sind, ich damit also auf kein Gerät/OS festgelegt bin und mit einer breiten Basis an Libraries und Nutzern ankommen, was den wirtschaftlichen Aspekt in der Arbeit unterstützte. Die Entwicklung so wie Hardware sollten möglichst wenig Geld verschlingen.

Einige Tests (die wahnwitzig unterschiedlich lang dauerten) hatte ich erste Tendenzen. PHP knapp hinter Java. Die Tests bestanden maßgeblich aus der zeitkritischsten Aufgabe in der Software, der Bildskalierung. Um dies zu testen habe ich 15 Bilder jeweils 50 runden auf eine bestimmte Größe (1024px an der langen Kante glaube ich) kleiner skaliert und daraus einen Mittelwert pro Bild für jede Programmiersprache und jede darin verwendete Library erstellt, dieser bewegte sich zwischen 0,175s (i5) bis 22,7s (beim RPi 1 ohne OC). Am Schluss hat Java auf dem RPi2 ganz knapp das Rennen gemacht und ich habe angefangen das Projekt darin aufzusetzen. Entschieden wurde dies, da es das RPi2 als Preisgünstigste Alternative schaffte in näherungsweise einer Sekunde die Bilder zu skalieren und entsprechend an der Vorgabe war. Nach etwa einer Sekunde fängt die Aufmerksamkeit beim User an zu sinken und er neigt dazu abgelenkt zu werden.

Testauswertungen, ganz rechts in der Spalte die Durchschnittszeiten.

Der schlussendliche Bildskalierungsagorithmus kam so weit ich mich erinnern kann nicht im Test vor ist ein Nearest Neighbour Algorithmus, der entsprechend schnell läuft, da hierbei lediglich Pixelreihen und -spalten fallen gelassen werden, das kann sogar ein Pi in Bruchteilen von Sekunden. Die war Notwendig da die Übertragung der Bilder von Kamera zum Pi schon eine Weile dauert (2-3 Sek in jedem Fall) und damit der Aufmerksamkeitspunkt schon weit überschritten ist. Tatsächlich verzögert sich das ganze mit der Aufmerksamkeit dadurch dass der User aktiv werden muss vor der Kamera und sich dann erst wieder dem Gerät zuwenden muss (zum Glück 😉 ).

Die Software

Die Software läuft ganz Pragmatisch ab und verzichtet auf so viel “Schnickschnack” wie möglich. Gestartet wird das ganze als Executable JAR, eine Datenbank ist eher hinderlich, da Ressocenintensiv, und auch nicht sonderlich notwendig. Die Bilder haben eine überschaubare Anzahl, also können sie einfach als Objekte mittels Dateipfaden gehalten werden, dazu wird am Anfang wird das Bilderverzeichnis ausgelesen. Fertig.

Die restliche Software wird hier etwas angeschnitten.