Photobooth Fotobox

Heute ist Stammtischzeit:
Jeden Donnerstag 20:30 Uhr hier im Chat.
Wer Lust hat, kann sich gerne beteiligen. ;)
  • Das passt schon so.
    Meine Anfrage bezog sich darauf, worauf ich eben konkret zu achten habe, wenn das Programm Dir helfen soll. Alles andere wäre ja jetzt nicht sinnvoll. Deine obigen Anmerkungen lasse ich jetzt mal in meine Erstversion so einfließen und werde mich bei weiteren Fragen nochmals melden.

    Das mit dem Flackern in Deinem Video hängt wohl nur mit meinem Billig-RPi-Fernseher (so ein 120€-Chinaböller) zusammen, weil der vermutlich die 30Hz von Deinem Video nicht richtig synchronisieren kann.

    Ich glaube als es noch funktioniert hat, war am RPi auch noch mein vernünftiger FullHD-Monitor dran.

    Alles klar ? wirklich lobenswert, wie du dich da reinhängst :)

  • Kleine Einzelvideos anstelle einer großen Videodatei mit allen Sequenzen:

    Es wäre nur eben schöner, wenn man irgendwie einzelne Videos nutzen könnte und nicht immer alles in ein großes Gesamtvideo packen muss (es wäre halt viel einfacher neue Videosequenzen zu ergänzen/auszutauschen, dies macht nämlich im Gesamtvideo jede Menge Arbeit und ist sehr umständlich)

    Um hier störende Pausen insbesondere zwischen den einzelnen "idle"-Sequenzen ("Anlock"-Videos) zu vermeiden, werde ich insgesamt vier Instanzen vom omxplayer anlegen: idle1, idle2, countdown, applause.

    Die können dann ineinander übergeblendet werden. Das muss aber nicht sein. Aber auch wenn sie direkt aneinander gereiht werden, entsteht keine störende Pause, da das nächste Idle-Video rechtzeitig vorbereitet wird.

    Da meine Tests diesbezüglich recht erfolgreich laufen, bin ich ziemlich zuversichtlich, dass dieses Konzept passen wird.

  • Das klingt ja richtig cool. Läuft das dann jeweils über eine Art Wiedergabeliste, die sich die jeweilige Videosequenz aus dem entsprechenden Ordner holt? Sprich man hat dann 3 Ordner (idle, countdown,applause) ? Oder wie kann man sich das vorstellen ? :)

  • Die Definition der einzelnen Kurzvideos sieht in Python3 in etwa so aus:

    Jede Videodatei kann damit sowohl einen beliebigen Dateinamen haben als auch einen beliebigen Speicherort auf dem RPi. Die Art (idle, countdown, applause) des Videos wird nur dadurch bestimmt, dass es in der jeweiligen Listenvariable enthalten ist. Ebenso können alle Listen jederzeit mit neuen Videodateien erweitert werden. Also ziemlich flexibel.

  • Meeega gut. Das wird ja genial :)

    Noch flexibler wäre das ganze, wenn nur der jeweilige Ordnerpfad angegeben werden müsste und er sich dann einfach aus allen darin befindlichen Videos immer wieder eins rauspickt. Dann müsste man beim nachträglichen Hinzufügen von Videosequenzen nicht immer am Code "nachbasteln".

    Wenn das noch irgendwie möglich ist, wäre es natürlich optimal ?

    2 Mal editiert, zuletzt von Goldjunge (10. November 2020 um 15:31)

  • Da fällt mir das Stichwort Konfigdatei ein, in der die Dateipfade hinterlegt werden (z.B. im m3u-Playlistformat). Aber sorry, das werde ich für's Erste nicht einbauen. Auch das Auslesen von Unterverzeichnissen ist lästig und vor allem fehleranfällig.

    Ich muss jetzt die Sache erst einmal so hinbekommen, dass die Videos halbwegs automatisiert ablaufen. So dass man was sieht. Dann werde ich das Projekt mal auf meine github-Seite stellen...

  • Alles klar. Ist wahrscheinlich auch besser so das dann wegzulassen, wenn es so fehleranfälliger ist. Komfortabler wäre es in jedem Fall gewesen ?

    Solltest du "Schlizbäda Preview Videosequenzen" für GitHub benötigen, kann ich mir da gerne Gedanken machen und dir da was kleines basteln. Kann man sicherlich ja später dann auch nicht nur für meine Anwendung, sondern auch für einen sehr breit gefächerten Anwendungsfall nutzen (z.b. Halloweenscreen / aktionsbasierter Infoscreen bei Messen, Ausstellungen, Galerien etc.)

  • Solltest du "Schlizbäda Preview Videosequenzen" für GitHub benötigen, kann ich mir da gerne Gedanken machen und dir da was kleines basteln.

    Gerne! Nur zu...

    Jeweils ein paar Kurzvideos für "idle", "countdown" und "applause". Sie dürfen ruhig in der Dauer etwas unterschiedlich lang sein. Aber alle im gleichen Format (z.B. FullHD oder zumindest 16:9)

    Wichtig ist, dass alle Kurzvideos wegen der geplanten Veröffentlichung auf github eine freie Lizenz haben. Also kein geschütztes Material irgendwo heraus kopieren! Ich habe keinen Bock auf irgendwelche Copyright-Verletzungen...

  • Ja genau das war mein Gedanke. Deswegen auch meine Vorschlag, da das andere Video dafür wohl eher nicht geeignet ist (hier sind teilweise Attribute von bereits vorhandenen Videos übernommen und angepasst worden -> war ja auch nur für meine Privatzwecke gedacht)

    Das Video für dich würde ich komplett selbst erstellen und auch relativ einfach halten. Zum Beispiel "Schlizbäda's Idle 1/2/3" als animierten Text mit jeweils anderen Effekten zur Unterscheidung. Also mimimalistisch gehalten, soll ja nur zur Veranschaulichung der Funktionsweise dienen :)

  • Erstversion Demoversion der Software photomat.py auf github

    Servus Goldjunge,

    ich habe mal eine erste Version der Software auf github unter dem Namen photomat veröffentlicht. Mit dieser Schreibweise bin ich jetzt nicht sonderlich mit bestehenden Projekten kollidiert. Es gab zwar in den USA mal so automatische Fotohäuschen auf irgendwelchen Supermarktparkplätzen, aber die nannten sich fotomat (mit f und nicht mit ph) -- nur so als Hinweis...

    Das Programm dient zum Abspielen von kurzen Videos mit dem omxplayer in zufälliger Reihenfolge. Der omxplayer wird über den python-omxplayer-wrapper v0.3.3 von Will Price per dbus angesteuert. Um die Videos sauber überblenden zu können, werden mehrere Instanzen des omxplayers erstellt und verwendet.

    Derzeit läuft allerdings nur das Abspielen von zufälligen idle-Videos in Überblendung. Es werden noch keine Events von den GPIOs abgefangen, die auf irgendwelche Taster an den GPIO-Pins des RPi reagieren, um damit eine Countdown-Sequenz abzuspielen und ein Foto zu knipsen. Demzufolge gibt es auch noch keine Anzeige von Applausvideos.

    Das Programm besteht aus zwei Klassen:

    class VideoPlayer

    Diese Klasse dient zur Verwaltung aller benötigten Instanzen des omxplayers. Neben einer Referenz auf den omxplayer selbst enthält diese Klasse noch wichtige Zusatzdaten und -funktionen, die für die Verwaltung einer omxplayer-Instanz erforderlich sind (bzw. die ich dafür erforderlich halte).

    Die Klassenmethode updt_playback_status liest den Playback-Status des omxplayers aus ('Playing', 'Pause', Stopped') und die aktuelle Position im Video. Um die zeit- und rechenintensiven(?) dbus-Zugriffe auf den omxplayer möglichst zu reduzieren, werden diese Daten bei jedem Schleifendurch wirklich nur einmal durchgeführt und in lokalen Variablen zwischengespeichert.

    Ebenso setzt die Klassenmethode set_alpha den Alphawert (Transparenz) des omxplayers nur, wenn er sich wirklich geändert hat.

    Die Methode fade überprüft, wie die Transparenz eingestellt werden muss, um das Video mit einem zweiten zu überblenden.

    class StateMachine

    Hier greife ich das oben beschriebene Konzept der Statemachine auf, um den Ablauf zu steuern:

    Die Methode run beinhaltet die Schlaife der Statemachine. Je nach aktuellem Zustand wird die jeweilige Klassenmethode state_... aufgerufen.

    Die abzuspielenden Videos werden im Konstruktor __init__ der Klasse StateMachine wie in Beitrag #64 beschrieben eingestellt.

    Das Überbledeverhalten wird in der Methode state_select_idle_video eingestellt.
    Im Sourcecode verwendete Variante mit Überblenden:

    Python
    self.pl[inst].alpha_start = 0           # Transparenz beim Start des Videos
    self.pl[inst].alpha_start_fadetime = 1  # Zeitdauer des Einblendens in Sekunden
    self.pl[inst].alpha_play = 255          # Transparenz "in der Mitte" (nach dem Einblenden und vor dem Ausblenden)
    self.pl[inst].alpha_end = 0             # Transparenz am Ende des Videos
    self.pl[inst].alpha_end_fadetime = 3    # Zeitdauer des Ausblendens in Sekunden

    Alternative ohne Überblenden:

    Python
    self.pl[inst].alpha_start = 255         # Transparenz beim Start des Videos
    self.pl[inst].alpha_start_fadetime = 0  # Zeitdauer des Einblendens in Sekunden
    self.pl[inst].alpha_play = 255          # Transparenz "in der Mitte" (nach dem Einblenden und vor dem Ausblenden)
    self.pl[inst].alpha_end = 255           # Transparenz am Ende des Videos
    self.pl[inst].alpha_end_fadetime = 0    # Zeitdauer des Ausblendens in Sekunden

    Die "Schlizbäda Preview Videosequenzen" für GitHub aus Beitrag #67 ff. werden jetzt interessant :)

    Die werde ich dann auf meinem github-Repository photomat einspielen. Ich würde Dich dann im Pythonprogramm bei den "Contributions" (Zeile 22) entsprechend erwähnen...

  • Also ich würde mich an der deiner Stelle in der Namensgebung tatsächlich nicht so auf die Fotobox Geschichte von mir versteifen, sondern das fertige Programm für ein breiteres "Anwenderspektrum" anpreisen :) Du willst ja sicher möglichst viele Leute damit erreichen :) Und kreativ in der eigenen Anwendung kann ja dann jeder selbst werden (Einige Beispiele habe ich ja weiter oben schon genannt: z.b. Halloweenscreen / aktionsbasierter Infoscreen bei Messen, Ausstellungen, Galerien etc.)

    Daher würde ich folgenden Namen (auch in Anlehnung an deiner YaMu-Play) vorgeschlagen:

    RaViSe-Play (Aussprache "Rewis-Play"), was für random video sequence player stehen soll :)

    Ist nur ein bescheidener Vorschlag meinerseits, natürlich bleibt die Namensgebung dir überlassen :)


    Ich darf mich mal wieder wiederholen: Das schaut alles vom Ansatz richtig super aus und ich finde es echt Wahnsinn, was du aus dem Projekt machst/machen willst. Vielen vielen Dank dafür.


    Bzgl. der Videos werde ich mich sobald es mir möglich ist ran setzen und was basteln. Bin ja momentan in meiner Freizeit eigentlich komplett in den Hardwarebau vertieft :D Diesen muss ich halt eben mal für die Videos unterbrechen... Bis wann wirst du die benötigen ?

    Erwähnen brauchst du mich nicht, die Lorbeeren gönn ich dir ganz alleine :)

    Gruß

  • Deiner Antwort entnehme ich, dass Du das Programm mit Videos zum Laufen gebracht hast.

    Ich habe auf meinem RPi den Desktophintergrund absichtlich in grellrot eingefärbt, um das Überblenden (Fading) noch besser beobachten zu können.

    Prinzipiell reichen jeweils drei Videos für jede Kategorie mit einer Länge von >= 5 Sekunden.

    Bei den Countdown-Videos wäre am Ende irgendeine markante "Lichtexplosion" oder sowas cool, die das Auslösen der Kamera signalisiert.

    Wichtig bei den Einzelvideos ist dabei, dass sie mit der Bildanzeige wirklich am Anfang beginnen und bis zum letzten Frame durchlaufen. Bei meinen schnell erstellten Videosequenzen mit FFmpeg hatte ich bisweilen gerade am Anfang meiner Kurzvideos Bildaussetzer: Die Anzeige blieb im VLC leer (schwarz mit Verkehrsleitkegel) bzw. am omxplayer transparent, was keinen vernünftigen Test des Fadings zuließ.

    Eine Erwähnung von Dir im Projekt wäre für mich kein Thema. Im Gegenteil, es ist cool, wenn bei einem Projekt mehrere Leute beteiligt sind. Von daher lautet jetzt die Frage, ob (und wie) ich Dich erwähnen darf? ;)

  • Nein, tatsächlich habe ich das Programm noch nicht getestet. Ich folge nur gerne deinen Erklärungen und Ideen :) Kann es auch im Moment leider nicht testen, da ich meine beiden Pi´s momentan in einem konstruierten und 3D gedruckten Gehäuse in den tiefen der Fotobox testweise schon mal verbaut habe, da ich momentan am Vorverkabeln bin. Kann da im derzeitigen Zustand leider auch keinen externen "Test-Monitor" anschließen. Ich muss mir demnächst mal wieder einen Bastel- Pi zulegen :) mal sehen, was der Black Friday hergibt :)

    Das mit den Bildaussetzern ist aber auch ein seltsames Phänomen. Ich meine, bei deinen Testvideos werde ich das nun sicherlich beachten, aber später für die Endanwendung kann man das ja nicht immer garantieren. Manchmal "fliegt" ja was ein oder blendet auf usw. da kann es schon mal vorkommen bzw. ist sogar unvermeidbar, dass am Anfang und Ende ein paar Frames dunkel sind. Wäre sehr schade, wenn man damit Leben muss.

    Welche Möglichkeiten der Erwähnung gäbe es denn? :) Bin da bei Github nicht so im Thema drin, nutze es eigentlich nur zum stöbern und für Installationen (Wie wahrscheinlich 99 % der Websitebesucher auch)

  • Soooo, ich habe jetzt mal den Nachmittag/Abend genutzt und die Videos erstellt. Hoffe, Sie gefallen :)

    Habe mich (wie man unschwer erkennen kann) an deinem Profilbild orientiert, als Erkennungsmerkmal ;)

    Da die ZIP- Datei leider hier für das Forum zu groß ist, können die Videos unter folgendem Link (WeTransfer) heruntergeladen werden:

    Schlizbäda_Videosequenzen.zip

    Einmal editiert, zuletzt von Goldjunge (20. November 2020 um 15:36)

  • Fragen zur Interaktion mit dem anderen RPi

    1. Der Auslösetaster (oder Bewegungssensor?) hängt laut Beitrag #18 offenbar an GPIO17. Ist das noch so? Wie ist er verbaut? Schaltet der Taster Masse oder 3,3V auf den Eingang?

    2. Wie wird das tatsächliche Auslösesignal (also nach Ablauf des Countdowns) dem anderen Kamera-RPi mitgeteilt?

    3. Was hat es mit dem exitpin auf sich? Steht der noch auf Deiner Agenda?

    4. Sind noch weitere Pins erforderlich und welche Funktion haben die?

    Am besten Schaltplan, Skizze oder Foto von Deinem aktuellen Aufbau ins Forum stellen.


    EDIT:

    Die Demo-Videosequenzen sind cool. :thumbup:

    Mit welchem Programm machst Du so etwas?

    Ach ja, drei 5s-Countdowns mit Kamerablitz (oder einem sonstigen Lichteffekt) am Ende wären noch cool :*

  • Anbei das funktionierende und "ausgetüftelte" Schema, das sollte Frage 1,2 und 4 beantworten ;)

    Ich hab nur zusätzlich noch an beiden Pi´s einen Reset/Shutdown Button gehängt (was mit dem shutdown.py Script von Netzmafia läuft) aber das hat ja mit unserem Programm hier nichts zu tun :)

    Zu Punkt 3:

    Da das Programm ja später im Autostart laufen soll, wird ein Taster benötigt, um das Programm zu beenden und auf den Desktop für eventuelle Wartungarbeiten (zum Beispiel Videos ergänzen, Pfad ergänzen etc.) zu kommen. Aktuell ist es so gelöst (bei der derzeitigen Ursprungsversion mit einem langen Video), dass der Exitpin nur die Schleife verlässt, das Video somit anschließend einfach Stur einmal durchläuft und das Programm/der OMXPlayer sich nach Ablauf des Gesamtvideos dann beendet. Wie man das Programm sauber beendet habe ich nicht herausgefunden, daher dieses Weg über etwas Wartezeit :)

    Für die Videos nutze ich Filmora :) Countdownvideos mit "Blitz" kann ich dir irgendwann später mal nachreichen, ich würde mich freuen wenn du aber erstmal mit dem vorhandenen "Material" arbeiten könntest :)

  • Für die Videos nutze ich Filmora :) Countdownvideos mit "Blitz" kann ich dir irgendwann später mal nachreichen, ich würde mich freuen wenn du aber erstmal mit dem vorhandenen "Material" arbeiten könntest :)

    klar, das eilt nicht!

  • Neuer Zwischenstand auf github:

    Heute habe ich das Python-Skript photomat.py so erweitert, dass bei Druck auf einen Taster an GPIO17 (Pin 11) das Abspielen einer Countdown-Videosequenz gestartet wird. Dazu muss der als Eingang konfigurierte GPIO17 über den Taster auf Masse (GND) gezogen werden. Zwei Sekunden vor Ende des Countdownvideos wird an GPIO7 (Pin26) ein High-Impuls von ca. 1 Sekunde Dauer ausgegeben. Siehe Verdrahtung in Beitrag #76.

    Die Steuerung der GPIO-Pins erfolgt über die Python-Bibliothek gpiozero.

    Bei Bedarf kann der High-Impuls auch in einen Low-Impuls geändert werden.

    Zu Debugzwecken wurde die Zufallsauswahl deaktiviert. Die Videos werden in der Reihenfolge aktiviert, wie sie in den Python-Listenvariablen

    self.videos_idle, self.videos_cntdn, self.videos_appl aufgeführt sind.

    Derzeitiger Stand:

    * Abspielen von idle-Videos in Dauerschleife

    * Wenn der als Eingang konfigurierte GPIO17 auf low gezogen wird, wird ein Countdown-Video abgespielt

    offen:

    * Applausvideo

    * Druck auf GPIO17 abfangen und ignorieren, solange das Countdownvideo (und später das Applausvideo) abgespielt wird. Dies kann über die Statemachine leicht implementiert werden...

    * Rücksprung in die idle-Schleife nach Abspielen von Countdown- und Applausvideo. Ebenfalls ein Punkt für die Statemachine.

    Die Programmierung führe ich auf meinem RPi4 durch, weil da alles (z.B. geany) einfach geschmeidiger läuft als auf einem RPi0 (Zero). Aber auch mein eigenes Python3-Programm läuft auf meinem RPi0 in einen Fehler (Traceback...). Aber da habe ich keine Riesenangst, dass das ein echtes Problem werden könnte. Das werde ich wohl hinbringen...

    Frage:

    * Was soll jetzt nochmal der zweite Taster an GPIO23 (Pin 16) genau bewirken?

  • Super, dass es voran geht :) ich bin weiterhin gespannt. Hab in der Zwischenzeit meine Version so einigermaßen zum Laufen gebracht, natürlich total unprofessionell und noch mit einigen Fehlern und nicht ganz zuverlässig :) daher setze ich große Hoffnung auf dein Projekt ;)

    Zur Frage: der zweite Taster soll im Prinzip einfach nur das Programm (welches ja später im Autostart starten soll) sauber beenden, die gpios bereinigen etc. und dann zum Desktop gehen, um die Listenvariable zu überarbeiten, Videos hinzuzufügen etc.

  • Hi Goldjunge,

    Ich habe eine weitere Änderung auf github gestellt. Nach dem Countdownvideo wird jetzt ein Applausvideo abgespielt. Danach läuft wieder die "idle-loop".

    offene Punkte:

    * Konfig-/Metadatei(en) für Videoparameter: fade-in, fade-out, Transparenzen --> ich glaube, das werde ich jetzt doch machen, aber erst am Ende. Das empfinde ich mittlerweile als ganz wichtig!

    * Test mit RPi0 (Zero)

    Erledigte Punkte (Stand 24.01.2021):

    * Programm beenden bei Druck auf Taster an GPIO23 / Pin 16

    * Erneutes Drücken des Fototasters ignorieren, wenn Countdown läuft.

    * Beenden der idle-Videoinstanz nach Fade-out, wenn Countdown läuft


    Teilweise erledigt (24.01.2021, mit Verbesserungspotential):

    * Fading zwischen Countdown und Applausvideo --> funzt prinzipiell, aber Laden des Videos noch früher triggern, um das Fading nicht zu stören 

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!