FotoBox Projekt für den Raspberry Pi [C++/Qt/wiringPi/gphoto2]

  • Hi Raspberry Pi Nutzer,


    ich würde gerne mein Open Source namens "FotoBox" kurz vorstellen. Wie der Name schon sagt, ist es eine kleine GUI Anwendung (in C++/Qt entwickelt) mit der man eine Fotokamera (Spiegelreflexkamera oder das Raspberry Pi Camera Module support) ansteuern kann um eine Foto zu schießen, es abzuspeichern und es auf einem Bildschirm anzuzeigen.


    Man kann die FotoBox/Countdown mit einer Maus, einer Tastatur, einem Touchscreen oder ein Buzzer der mithilfe der GPIO abgefragt wird, starten. Die Anwendung startet zuerst einen Einstellungsdialog. Hier kann man alles notwendige konfigurieren oder man wartet einfach 10 Sekunden bis sich der Einstellungsdialog automatisch schließt und die FotoBox startet.



    Den sourcecode mit einer kleinen Anleitung sowie den Releases der Software für Raspbian und macOS findet ihr auf gitlab oder auf github.



    FotoBox Features:

    • Unterstützung für Spiegelreflexkameras (gphoto2 supported cameras) und das Raspberry Pi Camera Module
    • Unterstützung für einen Buzzer (GPIO wiringPi)
    • in deutscher und englischer Sprache
    • Einstellungsdialog (persistieren der Einstellungen in eine INI Datei) z.B. um unter anderem die Länge oder die Farbe des Countdowns festzulegen
    • läuft unter Raspbian/Linux und macOS
    • abspeichern der geschossenen Fotos auf der Speicherkarte des Raspberry Pi und der SD Karte der Kamera
    • Vollbild/Fullscreen Anwendung
    • schnell, stabil und mit geringem Speicherverbrauch
    • Interessant für Entwickler: multi threading, docker build, continuous integration, doxygen Dokumentation

    Ideen für zukünftige Releases:

    • hilfreiches Skript zur Installation der Anwendung mit allen Abhängigkeiten
    • Neues Design
    • "Bildschirmschoner" mit den bereits aufgenommenen Bildern
    • Live Bild/View der Kamera
    • Unterstützung für Drucker
    • Sprachsteuerung
    • ...


    Wenn jemand gerne das Projekt unterstützen oder mitentwickeln möchte, darf sich herzlich gerne bei mir melden :)


    Viele Grüße, Thomas

  • tomikais

    Changed the title of the thread from “Fotobox für den Raspberry Pi [C++/Qt/wiringPi/gphoto2]” to “FotoBox Projekt für den Raspberry Pi [C++/Qt/wiringPi/gphoto2]”.
  • Magst Du vielleicht noch ein paar Screenshots von der Anwendung selbst dazupacken? Das würde es m.E. anschaulicher machen. Wie das Ganze von außen aussieht, würde mich auch interessieren.

  • Klar! :)


    Einstellungsdialog: Man kann eine Hintergrundfarbe wählen, Buttons aktivieren/deaktivieren, die Farbe und die Dauer des Countdowns wählen. Alle Einstellungen werden nach bestätige des "OK" Buttons oder nach Ablauf von 10 Sekunden (mit Mauszeiger in den Dialog fahren, stoppt den Timer) in einer INI Datei gespeichert. Beim nächsten Start werden diese gespeicherten Einstellungen wieder geladen. Man kann alle Einstellungen auch wieder auf die Standardeinstellungen zurücksetzen. Bild des Einstellungsdialog unter macOS:


    photo folder: Ordner in dem die Bilder gespeichert werden.

    photo name: Als prefix erhält das Bild das aktuelle Datum und danach kommt der Name der hier angegeben wird.

    countdown: Anzahl der Sekunden (max 9 Sekunden) und die Schriftfarbe.

    buttons: Aktiviert oder Deaktiviert die Buttons auf der FotoBox Oberfläche.

    background color: Die Hintergrundfarbe der Fotbox.

    input/output PIN: Pins auf der GPIO Leiste die abgefragt werden.

    query intervall: Legt fest wie oft der PIN abgefragt wird. Das ganze findet in einem thread start und beeinflusst den main thread nicht.

    camera mode: "gphoto2" (Spiegelreflex oder andere Kameras) oder "raspistill" (Raspberry Pi Camera Modul) kann hier gewählt werden.

    argument line: Befehle die an die Entsprechende Kamera Applikation übergeben werden.

    timeout value: Wie lange gewartet wird bis die Anwendung die die Kamera ansteuert abgebrochen wird.


    Nach dem Starten des Countdowns, wird ein Foto gemacht und dieses bleibt bis zum nächsten auslösen der Kamera sichtbar. Bild des Countdowns:


    FotoBox: Die Oberfläche der FotoBox Anwendung ist recht schlicht. Das geschossene Foto wird möglichst bildschirmfüllend (evtl. skaliert) dargestellt aber ohne es zu beschneiden. D.h. im besten Fall ist sehr wenig oder kein schwarzer Hintergrund mehr zu sehen oder eine andere Hintergrundfarbe die man gewählt hat.


    Aufbau des Gehäuse: Die Box hat oben eine Halterung für ein Biltzschuh der ins Innere der Box zur Kamera führt. Ist quasi eine Art Verlängerungskabel für die Steuerung des Blitzes. Der Bildschirm in der Mitte zeigt die Oberfläche des Betriebssystems und somit der Anwendung an. Das Bild bleibt stehen, bis das nächste Foto geschossen wird. Im Fehlerfall wird eine Leiste zur Ausgabe der Fehlermeldungen im unteren Bildschirmbereich angezeigt. Unter dem Monitor ist ein Loch für die Kamera.



    Innenleben: Im Inneren der Box ist oben zur Stromversorgung eine Steckerleiste angebracht. Da wir in einen Notausknopf einen Funksender eingebaut haben, ist im Innenleben der Box, unterhalb der Steckerleiste, der entsprechende Empfänger verankert. Dieser wir auf die GPIO leiste des Raspberry Pi gesteckt. Natürlich ist hier ein Raspberry Pi 3 verbaut (links). Der Foto ist per USB mit dem Raspberry Pi verbunden und erhält über ein Netzteil dauerhaft Strom (kein Akku). Auf dem Raspberry Pi ist noch eine Bilder Gallery aktiv. Somit wurde auch ein entsprechend starker Access Point (rechts, blau beleuchtet) mit offenem WLAN in die Box gebaut.



    Testgerät: Da ich nicht immer die ganze Box aufbauen kann, habe ich mir ein kleines Testgerät gebaut. Ein Touchscreen mit Raspberry Pi 2 auf der Rückseite ist zusammen in ein Gehäuse eingebaut. Ein kleiner Kabelgebundener Knopf löst die Fotobox aus. Das Raspberry Pi Camera Modul oben auf dem Gehäuse dient zum Schießen der Bilder.



    Ich hoffe ich konnte einen besseren Einblick geben ;-)

  • Hey,


    ich bin echt begeistert von deinem Projekt. Suche schon ewig nach so einer Lösung. Das Problem ist nur, das ich bis jetzt nur theoretisch Freude an deinem Projekt habe. Bekomme es nicht ans laufen. Muss aber dazusagen das ich nicht der mega Fuchs bin in Sachen Rasp. Hab deine Anleitung bis zu dem Punkt wo ich deine " Programm" starten muss. Ich habe kein Plan wie ich es starten soll.

    Bin den Punkt das erstmal überflogen und habe den Scrennsaver deaktiviert und dann die Autostart Befehle eingetrage, in der Hoffnung das sich das Pogramm autoamtisch nach einem Reboot starten. Aber auch nicht. Jetzt schreib ich dir weil ich jetzt echt am Ende bin aber gerne dein Programm mal probieren möchte.. Wäre super wenn du mir antworten könntest und "eben" helfen würdest. ;-)


    Vielen Dank vorab.


    Notch

  • Hi Notch,


    schön das du über mein Projekt gestolpert bist und das du dich bei einem Problem auch gleich gemeldet hast. Prinzipiell kannst du die Anwendung für den Pi auch nur herunterladen (GitLab oder GitHub), die tar Datei entpacken und dann direkt per doppelklick starten. Hast du das schon einmal probiert?


    Viele Grüße, Thomas

  • Hallo, können Sie mir kurz erklären wie der Taster angeschlossen werden muss um die Kamera auszulösen.

  • Natürlich! Im Moment ist es hard codiert (siehe fotobox.cpp)

    Foto schießen --> Return + Enter Taste (Num Block)

    [Blocked Image: https://upload.wikimedia.org/wikipedia/commons/thumb/a/a5/Enter.png/193px-Enter.png]

    Beenden der Anwendung --> Escape

    Einstellungsdialog wieder anzeigen --> Taste P + S + E


    Bei Bedarf könnte ich es konfigurierbar machen (INI Datei).

  • Hi,


    sorry für die späte Antwort! Irgendwie kam die Benachrichtigung nicht an, dass hier ein neuer Post gemacht wurde. Gerade durch Zufall dein Post entdeckt^^

    Du kannst die GPIO Pins die genutzt werden sollen, auch am Anfang konfigurieren. Default sind diese PINs konfiguriert: 17 / 18 (siehe Bild)


  • FotoBox v1.3.0 (neue Version)

    • new option to show photos black and white
    • you can use a presenter as a remote to start the countdown (e.g. Logitech Presenter). to close the application hold down Shift and press Escape.
    • changed license from MIT to GNU GPLv2
    • update README and Doxygen documentation
    • improve German/English translation
    • make better use of the screen area (remove margins)
    • bugfixes
      • the countdown can't be manipulated anymore (complete refactoring of the countdown feature)
      • status bar messages are now closed immediately to prevent the photo from being not displayed in its maximum possible size
      • macOS: closing the full-screen application don't leave an empty window. use macOS API to close the empty windows (Qt bug workaround)
      • display status bar messages for longer period
      • fix Qt Properties in PreferenceProvider class
      • fix Qt MOC issue in all header files
    • improvements: fix deprecated function to prepare for Qt 6, auto generate qm translation files each time building the application, add Qt default translations, clang Tidy/Clazy fixes, add header guards, move to balena Docker images, remove pointer usage when possible, refactoring, update gitignore file, ...

    Würde mich über Rückmeldung freuen :-)

  • Bitte immer daran denken, dass wir hier im deutschen Raspberry Pi Forum sind. Viele verstehen Englisch, aber andere eben nur schlecht oder gar nicht.


    Daher bitte am besten für englische Texte immer noch eine deutsche Übersetzung erstellen, z. B. mit https://deepl.com/translator.

  • FotoBox v1.3.0 (neue Version)

    • Fotos können nun auch in Schwarz/Weiß angezeigt werden
    • man kann seinen Logitech Presenter als eine Art Fernbedienung zum auslösen der FotoBox verwenden. Anwendung muss nun mit gedrückter Shift-Taste und Escape beendet werden.
    • Wechsel der Lizenz von MIT nach GNU GPLv2
    • Aktualisierung der README Datei und Doxygen Dokumentation (Entwickler Dokumentation)
    • Deutsch/Englische Übersetzungen überarbeitet
    • Bildschirmfläche wird nun besser ausgenutzt (Begrenzungen am Rand entfernt)
    • Bugfixes
      • der Countdown kann nicht mehr durch verkürzt werden (Neugestaltung der Countdown Funktion)
      • Meldungen in der Statusleiste konnten dazu führen dass das Foto nicht in der maximal möglichen Größe angezeigt wurde
      • macOS: beim schließen der Anwendung im Vollbild Modus, blieb ein leeres Fenster zurück. Dies wird nun mit Hilfe der macOS API geschlossen. (Workaround für einen macOS Qt Bug)
      • Meldungen in der Statusleiste werden nun länger angezeigt
      • fix Qt Properties in der PreferenceProvider Klasse
      • fix Qt MOC Fehler in de Header Dateien
    • Verbesserungen: veraltete Qt Funktionen ersetzt zur Vorbereitung auf Qt 6, QM Übersetzungsdateien werden nun immer automatisch erstellt, Qt Standard Übersetzungen eingebaut, clang Tidy/Clazy Warnungen behoben, Header guards implementiert, benutze nun balena Docker images, Benutzung von Pointern minimiert, refactoring, gitignore Datei aktualisiert, ...

    Habe es schnell übersetzt ;-)

  • Hallo Tomi,


    Ich muss dir erst mal sagen das ich ein absoluter raspberry anfänger bin.

    Hab mir letzte Woche eins gekauft weil ich unbedingt ein fotobox haben wil.

    bin dann auf dein Projekt gestossen, und bin der meinung das das für mich genau richtig ist.

    Hab aber hier und da noch ein paar probleme.

    Vielleicht kannst du mir ja helfen ?

    Hab dein software am laufen.

    So weit so gut.

    Funktioniert aber nur mit mein Raspberry PI camera, und geht bis jetzt bei mir leider nicht mit mein Canon 450D reflex.

    Wie kann ich das irgenwie hinkriegne das das funktioniert ?

    Was bei mir auch nicht fiunktioniert ist die Bilder in ein order zu speichern dei ich selber gemacht habe.

    Bis jetzt kommen alle Bilder auf mein Desktop.

    Hab alles schon probiert, funktioniert bei mir leider noch nicht.

    Sonnst würde ich gerne ein schalter als auslöser benutzen.

    Kannst du mir sagen an welche pins ich die anschliessen muss ?

    Und, last but not least ...... gibt es ein möglichkeit anstatt die hintergrundfarben ein Bild oder so als hintergrund zu haben ?


    Hoffe du hast zeit und lust mir ein wenig weiter zu helfen.


    LG,Henko

  • Hi Henko,


    schön, dass du Freude an meiner kleinen Applikation gefunden hast :-). Damit du noch mehr Freude hast, unterstütze ich dich natürlich sehr gerne.


    Zum ansprechen der Spiegelreflex Kamera benutze ich das libgphoto2 Framework. Erste frage: hast du gphoto erfolgreich installiert? Testen kannst du indem du im Terminal

    Code
    1. gpphoto -v

    eingibst. Hier sollte dann so eine Meldung zu sehen sein:

    Falls nicht, findest du hier die Anleitung die neuste Version zu installieren: https://github.com/gonzalo/gphoto2-updater (wähle die stabile version)

    Deine Kamera sollte nämlich von dem Framework unterstützt werden und somit funktionieren (siehe libgphoto2 :: supported cameras)


    Zum Thema Bilder im Ordner speichern eine Frage: Hast du den letzten Stand (v1.3.0) der Anwendung am laufen? Du kannst nämlich einen Ordner auswählen in dem deine Bilder gespeichert werden.

    Anleitung: Den "Bilder Ordner" über den Button "Verzeichnis auswählen" auswählen. Nach der Auswahl müsste der Ordnerpfad in dem Textfeld angezeigt werden. Danach FotoBox starten um die Einstellungen auch dauerhaft zu speichern.


    Hast du dir schon einen Schalter besorgt oder gebastelt? Mit version 1.3.0 hast du auch die Möglichkeit einen Logitech Presenter oder ähnliches als Fernauslöser zu nutzen. Wäre zumindest mit weniger Aufwand verbunden (Plug & Play).


    Ein Hintergrundbild kann man nicht festlegen. Bis jetzt kann man nur die Farbe wählen. Könnte ich in einer späteren Version aufnehmen. Mein Gedanke war aber immer möglichst das Bild größtmöglich darzustellen und so wenig wie möglich "Hintergrund" zu haben. Wir haben ein Display dass das Bild fast 1:1 darstellt. Oder meinst du das Hintergrundbild direkt über das Foto zu legen?


    Viele Grüße Thomas

    Edited once, last by tomikais ().

  • Hallo tomikais,

    habe die Installation soweit durchgeführt, jedoch startet die Anwendung nicht. Bekommen den Desktop von Rasbian angezeigt. Meine Vermutung ist, dass ich einen Fehler beim einfügen der:


    • Download latest "FotoBox" application here according to your Raspbian version. Start the application and configure it accordingly.

    gemacht habe. Die entpackte Datei habe ich auf die SD kopiert. Ist dies so richtig?


    VG


    Ingo

  • Hi xs4002a2 ,


    sorry für die späte Antwort.

    Du hast hast auf deinem Raspberry Pi die neuste Raspbian version laufen und bekommst meine Anwendung nicht gestartet? Verstehe ich das so richtig? Was bekommst du den für eine Fehlermeldung angezeigt?


    Damit die Anwendung auch auf deinem Pi startet, musst du noch fehlende Pakete/Programme installieren. Führe dazu die Schritte die in der README Datei im Kapitel "installation and operating instructions" beschrieben sind aus.


    Werde mit dem nächsten Release eine Skript Datei hinzufügen, die nach Doppelklick alle nötigen Schritte automatisiert abarbeitet.


    Viele Grüße Thomas

  • Hoi Thomas,


    Danke für dein Antwort.

    Ich war nebenbei noch mit ein anderes Pohotobox Projekt beschäftigt.

    Das scheitert aber beim Start Button:-(

    Schade, weil ich am diesen Projekt wirklich alle Hintergrund Bilder ändern kann.


    Jetzt mal zurück zu dein Projekt.

    Ich will ja gerne was haben was wirklich funktioniert.

    Ja, ich hab schon ein Button gekauft, und würde diese gerne am Photobox benutzen.

    Kannst du mir vielleicht erklären wie genau ich das machen kann ?

  • Hi Henko ,


    zum Abfragen der Signalflanken benutze ich das wiringPi Framework. Das Mappen der Pins des RaspberryPi/wiringPi wird hier beschrieben: http://wiringpi.com/pins/

    Man kann also auch die Pins in der Anwendung frei konfigurieren. Siehe Tab "Fortgeschritten" --> "Buzzer" --> Input/Output PIN. Als Standardeinstellung werden diese Pins abgefragt:

    (rot umrandet)


    Wie hast du dir das mit dem Hintergrundbild gedacht? Einfach ein Bild wählen und das soll dann als Hintergrundbild angezeigt werden?


    Lg Thomas