-
Notifications
You must be signed in to change notification settings - Fork 4
HoloView
Was ist HoloView? HoloView ist ein kleines Programm, das uns bei der Auswertung der aufgenommenen Interferenzbildern helfen wird. Zudem ermöglicht HoloView den Einstieg in das Schreiben von Python Scripts zur Bildauswertung.
Hier ein Screenshot des Programms in Aktion:
HoloView wird mithilfe eines Debian-Repositories vertrieben. So weiß der Raspberry Pi genau, wann es eine neue Version gibt. Standardmäßig ist das entsprechende Repository aber nicht eingetragen -- selbstverständlich. Deshalb muss dies zuerst getan werden.
Dazu muss lediglich eine Konsole geöffnet und folgende Befehle eingetippt werden (keine Angst vor dem komischen, schwarzen Fenster!):
curl https://debian.ch-st.de/E622EA3.pub | sudo apt-key add -
sudo nano /etc/apt/sources.list
sudo apt update
sudo apt install python3-holoview
Momentan gibt es noch keine Desktopverknüpfung für HoloView, deshalb muss es ebenfalls aus der Konsole heraus gestartet werden. Dazu einfach holoview
als Befehl eingeben.
Um das Prinzip von HoloView zu verdeutlichen, hier ein Beispiel.
- Zuerst muss im
Capture
-Tab ein Bild aufgenommen werden. Mit einem Klick aufCapture
öffnet sich der sogenannte Viewfinder, der das aktuelle Kamerabild anzeigt. Passt der Winkel etc. kann man C das Bild aufnehmen, andernfalls kommt man mit Q wieder zurück zu den Bildeinstellungen. - Hast du das perfekte Bild aufgenommen, kann es mit der Auswertung losgehen.
- Wechsle dazu in den
Processing
-Tab, wo dich ein blaues Editorfenster erwartet. - Hier kannst du nun ein Python-Skript schreiben und siehst auf der rechten Seite die Ausgaben, die dein Skript produziert.
Dieses einfache Beispiel zeigt einfach nur das aufgenommene Bild an und schreibt Hello World
in die Variablentabelle:
output_figs["Bild"] = plt.figure()
plt.imshow(image)
output_vars["txt"] = "Hello World"
HoloView kann auch für etwas komplexere Aufgaben eingesetzt werden. Für dieses Beispiel verwenden wir das erste Interferenzbild, das wir aufgenommen haben:
Mithilfe eines entsprechenden Skripts können wir auswerten, in welcher Form der Rotanteil von links nach rechts zunimmt.
output_figs["x-average"] = plt.figure()
xaverages = []
for x in np.rollaxis(image, 1):
xaverages.append(np.average(image[x][:]))
plt.plot(xaverages)
Hierfür wird zuerst mithilfe von matplotlib eine neue Figur angelegt. Zusätlich initialisieren wir noch ein leeres Array, das den Durchschnitt der Werte auf der y-Achse für jeden Punkt auf der x-Achse enthält.
Dann iteriert das Skript über die x-Achse. Da die erste Dimension des Bildes die y-Achse ist, bringen wir zuerst die x-Achse an die erste Stelle (mit np.rollaxis ), um später leichter den Durchschnitt an dieser Position errechnen zu können. Innerhalb der Schleife wird dieser Wert von numpy errechnet und an das Array angehängt (xaverages.append).
Wenn das Array mit den Werten gefüllt ist, wird es einfach an matplotlib übergeben. In dem ausgegebenen Graphen lässt sich sowohl der Anstieg der Rotanteile in der rechten Bildhälfte erkennen, als auch die einzelnen Streifen des Originalbildes.
HoloView wird ebenfalls in der Python-Skriptsprache entwickelt. Das graphische Frontend wird mithilfe von Gtk angezeigt. Die Pythonbindings von Gtk heißen gi und werden mit dem Debian-Paket python3-gi installiert.
Natürlich kann HoloView auch direkt auf dem Raspberry Pi weiterentwickelt werden. Des Komforts wegen empfiehlt es sich jedoch, seinen Desktoprechner dafür zu nutzen -- natürlich mit GNU/Linux ;-).
Gerade für Einsteiger ist die Distribution ubuntu.com empfehlenswert.
Mit dem Programm sshfs kann das Dateisystem des Raspberry Pi direkt im Home-Verzeichnis eingehängt werden:
mkdir MountPi
sshfs [email protected] MountPi
- Mit der IDE des GNOME Projekts kann HoloView bequem entwickelt werden
- Das Programm devhelp zeigt zudem die Dokumentation der Python-Bindings an.
- Um die gemeinsame Arbeit an der Software möglich einfach zu gestalten, kommt das Versionsverwaltungprogramm Git zum Einsatz (Hier ein gutes E-Book zu git).
- Es wird dieses Github-Repo genutzt, in welchem sich zudem ein Issue-Tracker, Projektpläne und ein eigenes Wiki befinden.