Mobile Fotobox mit Raspberry Pi

Mobile Fotoboxen kennst du wahrscheinlich von Hochzeiten oder Geburtstagsfeiern. Sie sorgen nicht nur für einzigartige Erinnerungen, sondern machen auch einfach gute Laune. Wenn sie nur nicht so teuer im Verleih wären…

Doch dafür gibt es eine Lösung: die eigene Fotobox – gebaut mit einem Raspberry Pi. Neben dem Minicomputer benötigst du einen Touchscreen, eine Kamera und haptische Tasten. Nachdem du zusätzliche Software installiert und die Hardware verbunden hast, programmierst du die Befehle für die Buttons und ein GUI (General User Interface). Zudem wirst du Fotofilter (Overlays) hinzufügen. Dein Setup baust du in einen dafür vorbereiteten Pappkarton ein oder druckst dir eine passende Fotobox mit einem 3D-Drucker aus. Deine Box solltest du bereits präpariert haben, bevor du mit deinem technischen Setup beginnst. Wie diese Fotobox aussieht, hängt ganz von deinen Wünschen und deinem Material ab. Deiner Kreativität sind hier keine Grenzen gesetzt.

Diese Hardware benötigst du

WARENKORB

Alle für dieses Projekt notwendigen Artikel landen mit einem Klick auf den Button direkt in deinem Warenkorb, sofern sie in unserem Shop verfügbar sind. Kontrolliere daher deinen Warenkorb genau!

Vorbereitungen: Software installieren und Touchscreen verbinden

Zunächst musst du einige zusätzliche Software installieren, damit du Kamera und Touchscreen kontrollieren und ein GUI aufsetzen kannst. Gib daher folgende Befehle in einem Terminal-Fenster ein.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install -y raspberrypi-ui-mods
sudo apt-get install -y raspberrypi-net-mods
sudo pip3 install guizero

Nun verbindest du deinen Raspberry Pi mit einem Touchscreen. Wenn du hierfür etwas Unterstützung benötigst, findest du bei Maker Tutorials eine hilfreiche Anleitung dafür.

Kamera mit dem Raspberry Pi verbinden

Stecke die Kamera in den dafür vorgesehenen Port am Raspberry Pi und prüfe, ob die Verbindung fest sitzt. Über das Hauptmenü checkst du nun, ob die Kamera im Konfigurationsbereich als Interface zugelassen ist. Nur wenn du diese Funktion zulässt, hat der Raspberry Pi auch Zugriff auf die Kamera.

Touchscreen und Kamera in die Fotobox einbauen

Nun kannst du den Touchscreen und die Kamera in deine bereits vorbereitete Fotobox einsetzen. Wenn du hier mit Kleber arbeitest, achte ganz besonders darauf, keine Anschlüsse zu verkleben.

Tasten mit dem Raspberry Pi verbinden und testen

Mit Jumper-Kabeln verbindest du nun die haptischen Tasten mit GPIO 23 und GPIO 25 und einem beliebigen Erdungsstift an der Raspberry-Pi-Anschlussleiste. Die Taste an GPIO 23 wird das Overlay, den Fotofilter, auswählen. Die Taste an GPIO 25 hingegen wird das Foto auslösen. Schalte nun deinen Raspberry Pi an, damit du die Tasten testen kannst. Erstelle dafür zunächst einen neuen Dateiordner, in dem du dein Programm und alle Fotos speichern willst, etwa „Fotobox“. Notiere dir den Pfad zum Ordner, beispielsweise /home/pi/Fotobox.

Öffne nun Python 3 und erstelle eine neue Datei, die du in deinem gerade erstellten Ordner abspeicherst, etwa unter dem Namen „Fotobox.py“. Gib nun folgenden Code ein, um auf die Tasten zuzugreifen und sie zu definieren.

from gpiozero import Button
def next_overlay():
    print("Overlay")
def take_picture():
    print("Mache ein Bild")
next_overlay_btn = Button(23)
take_pic_btn = Button(25)
next_overlay_btn.when_pressed = next_overlay
take_pic_btn.when_pressed = take_picture

Du hast nun einen Zugriff auf die benötigte Bibliothek geschaffen und kontrollierst, was die beiden Tasten tun sollen, wenn sie gedrückt werden. Drücke F5, um das Programm einmal durchlaufen zu lassen. Nach Drücken der einzelnen Tasten sollten dir in der Python Shell „Overlay“ und „Mache ein Bild“ angezeigt werden. Ist das nicht der Fall, solltest du noch einmal kontrollieren, ob die Tasten richtig angesteckt sind.

Kamera mit den Tasten verbinden

Als nächstes verbindest du die Kamera der Raspberry-Pi-Fotobox. Füge zunächst oben in den Code Folgendes ein:

from picamera import PiCamera

Unterhalb des bisherigen Codes legst du nun die Auflösung der „PiCamera“ fest. Diese entspricht der Auflösung des Touchscreens, also etwa 800 x 480. Des Weiteren soll sich die Kamera horizontal drehen, damit das Bild nicht gespiegelt wird. Zudem fügst du einen Alpha-Wert ein, der den Screen halbtransparent macht, damit du etwaige darunter angezeigte Fehler sehen kannst. Später kannst du diesen Wert löschen.

camera = PiCamera()
camera.resolution = (800, 480)
camera.hflip = True
camera.start_preview(alpha=128)

Damit du mehrere Bilder mit deiner Raspberry-Pi-Fotobox machen kannst und diese nicht nur überschrieben werden, fügst du den Bilddateien automatische Datums- und Zeitangaben hinzu. Oben in deinem Code bei den Import-Funktionen schreibst du daher:

from time import gmtime, strftime

Hinzu kommt unten im Code die Benennung des Dateinamens. Das aktuelle Datum wird hier mit Tag, Monat, Stunde und Minute hinzugefügt. Dies kannst du natürlich nach Belieben anpassen.

output = strftime("/home/pi/Fotobox/image-%d-%m %H:%M.png", gmtime())

Gehe nun zurück zu deinem Take-Picture-Befehl, lösche die Print-Zeile und füge stattdessen Folgendes hinzu, um das Foto entsprechend zu speichern.

def take_picture():
    camera.capture(output)
    camera.stop_preview()

Drücke nun F5, um dein Programm zu starten und nutze dabei auch die Taste zum Auslösen eines Fotos. In deinem Fotobox-Ordner sollte das Bild nun korrekt mit Zeitangabe gespeichert sein.

Filter für die Fotobox

Du hast oben bereits eine Overlay-Funktion in deinem Programm vorgesehen. Darüber kannst du mit der zweiten Taste deinen Bildern einen Filter hinzufügen. Diese kannst du entweder fertig im Netz finden oder selber welche erstellen . Wichtig ist hierbei, dass die Filter die gleiche Größe haben wie das Bild, also in diesem Beispiel 800 x 480. Zudem müssen die Filterbilder als PNG-Dateien mit einem transparenten Hintergrund abgespeichert sein. Erstelle beispielsweise Frisuren, Hüte, Bärte oder Rahmen, die dann auf Tastendruck auf dem Bild deiner Fotobox erscheinen. Lege hierfür in deinem Fotobox-Ordner einen speziellen Overlays-Ordner an und speichere dort deine Filter.

Die Vorlage für die Filter-Funktion kannst du bei Raspberry.org herunterladen. In dem Programm musst du nun den Pfad (overlays_dir) anpassen. Anschließend fügst du die Filter ohne Dateiendung hinzu, also nicht Rahmen1.png, Elvishaare.png und Cowboyhut.png, sondern:

overlays = ['Rahmen1', 'Elvishaare', 'Cowboyhut']

Oben in deinem Fotobox-Code importierst du nun die angepasste Overlay-Funktion.

from overlay_functions import *

Filter-Taste anpassen

Nun gehst du wie bei der ersten Taste vor und passt die Aktion der zweiten Taste an. Lösche daher die Print-Zeile „Overlay“ und schreibe den Befehl wie folgt um, um die Overlay-Parameter zu aktivieren.

def next_overlay():
    global overlay
    overlay = next(all_overlays)
    preview_overlay(camera, overlay)

Speichere das Programm und starte es mit F5. Auf Tastendruck sollten jetzt jeweils ein neuer Filter in deinem Vorschaubild erscheinen. Nun musst du den Code noch anpassen, damit der Filter auf dem Bild gespeichert wird und nach der Aufnahme wieder verschwindet. Füge daher zwei entsprechende Zeilen zu deinem Take-Picture-Befehl hinzu und teste deinen Code erneut mit F5.

def take_picture():
    camera.capture(output)
    camera.stop_preview()
    remove_overlays(camera)        
    output_overlay(output, overlay)

GUI für die Fotobox erstellen

Damit deine Raspberry-Pi-Fotobox nicht nur von dir, sondern jedem anderen auch leicht bedient werden kann, baust du eine simple Benutzeroberfläche. Hierfür hast du guizero bereits am Anfang installiert. Füge deinem Code nun eine weitere Import-Funktion hinzu.

from guizero import App, PushButton, Text, Picture

Des Weiteren definierst du nun am Ende deines Fotobox-Codes eine App, die als Container des GUI dient. Hier definierst du die Größe, also 800 x 480, sowie den Titeltext „Fotobox“. Zudem kannst du eine Botschaft einfügen, etwa „Wer bist du heute?“

app = App("Fotobox", 800, 480)
message = Text(app, "Wer bist du heute?")
new_pic = PushButton(app, new_picture, text="New picture")
app.display()

Wenn du das Programm nun startest und die Auslösertaste drückst, sollte dir deine Botschaft angezeigt werden.
Füge nach der Take-Picture-Funktion eine New-Picture-Funktion hinzu. Mit dieser erscheint nach einem aufgenommen Bild erneut eine Vorschau mit einem Filter.

def new_picture():
    camera.start_preview(alpha=128)
    preview_overlay(camera, overlay)

Um sicherzustellen, dass deine Bilder nicht mit dem gleichen Dateinamen überschrieben werden, wenn sie kurz hintereinander aufgenommen werden, musst du den Output noch anpassen. Kopiere daher deinen Output-String in die Take-Picture-Funktion.

def take_picture():
    global output
    output = strftime("/home/pi/Fotobox/image-%d-%m %H:%M.png", gmtime())
    camera.capture(output)
    camera.stop_preview()

Den Output-Code der ursprünglichen Stelle änderst du zu einem leeren String. Damit stellst du sicher, dass die Output-Funktion nicht nach dem ersten Lauf abbricht, sondern als generelle Variable genutzt werden soll.

output = ""

Da die Nutzer deiner Fotobox nicht erst in Ordnern nach ihrem Bild suchen sollen, fügst du unter dieser Zeile nun einen Befehl hinzu, der das gemachte Foto anzeigt.

latest_photo = '/home/pi/Fotobox/latest.gif'

Ändere deinen GUI-Code nun so, dass vor einem neuen Vorschaubild zunächst das gerade gemachte angezeigt wird.

app = App("Fotobox", 800, 480)
message = Text(app, "Wer bist du heute?")
your_pic = Picture(app, latest_photo)
new_pic = PushButton(app, new_picture, text="New picture")
app.display()

Jetzt passt du noch die Take-Picture-Funktion an.

size = 400, 400
gif_img = Image.open(output)
gif_img.thumbnail(size, Image.ANTIALIAS)
gif_img.save(latest_photo, 'gif')

your_pic.set(latest_photo)

Nun wird das jeweils aktuelle Output-Bild als Thumbnail geöffnet und als latest_photo im Gif-Format gespeichert. Zum Schluss kannst du noch den Alpha-Wert in der New-Picture-Funktion löschen. Speichere das Programm. Deine Fotobox ist ab sofort bereit für ihren Einsatz.

Die Anleitung dieses Projekts basiert auf The All Seeing Pi von Raspberry.org. Dort findest du auch weitere Anfänger-Projekte für den Raspberry Pi.

Wie hilfreich war dieser Beitrag?

Klicke auf die Sterne um zu bewerten!

Durchschnittliche Bewertung 0 / 5. Anzahl Bewertungen: 0

Bisher keine Bewertungen! Sei der Erste, der diesen Beitrag bewertet.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.