Photobooth Fotobox Hilfe

Python auf Einplatinencomputer wie Raspberry Pi, Banana Pi / Python für Micro-Controller
Antworten
Goldjunge
User
Beiträge: 3
Registriert: Dienstag 29. Oktober 2019, 18:10

Hallo Leute,

ich habe eine ganz spezielle Idee für eine Fotobox und benötige dringend Hilfe bei der Umsetzung. nach stundenlangem durchforsten des Internets die letzten paar Monate habe ich bisher leider nichts passendes gefunden. Auch im deutschen Raspberry Pi Forum konnte mir bisher keiner Helfen. Fertige Windows Software habe ich auch schon ausprobiert, diese macht mich leider aber auch nicht glücklich. Entweder sind Sie viel zu umfangreich oder haben eine komplett andere Umsetzung.

Letztendlich möchte ich den Photobooth relativ einfach mit sehr wenigen Funktionen aufbauen. Im Prinzip ist es immer nur eine zufällige Abfolge von verschiedenen Videosequenzen mit anschließendem Auslösen einer Kamera und anzeigen des geschossenen Fotos mit anschließender Bereitstellung auf einen Raspi eignem Webserver, that´s all. Alle versuche andere Codes von Github umzuschreiben haben leider nicht geklappt. Und um einen komplett eigenen Code zu schreiben fehlt mir leider die Expertise. Daher hoffe ich auf die Hilfe der User hier im Forum :)

Folgendes soll der Pi können:
Strom einschalten. Raspberry Pi startet. Der Raspberry PI geht mit dem hochfahren bzw. nach Start sofort und automatisch in eine Art Wartezustand/Bildschirmschoner. Hier soll er sich ein beliebiges mp4 Video (Zufallsprinzip) aus dem Ordner „Bildschirmschoner“ holen und dieses dann bis zu einer Aktion in Dauerschleife laufen lassen. Nach Auslösen des GPIO (Funkauslöser/Presenter/Buzzer) soll der Raspberry Pi die Spiegelreflexkamera mit 5 Sekunden Timer starten. Gleichzeitig holt er sich ein beliebiges 1 Sekunden langes mp4 Video (Zufallsprinzip) nach der Reihe aus den Ordnern „Countdown 5“, „Countdown 4“, „Countdown 3“, „Countdown 2“ und „Countdown 1“. Dies gewährleistet, dass der Countdown immer individuell und nie langweilig dargestellt wird. Einen Live-view benötige ich nicht.Die Kamera (Canon, Nikon etc.) wird mittels ghphoto2 ausgelöst. Nachdem das Foto geschossen wurde, benötigt der Raspberry PI ja bekanntlich einen kurzen Moment zum Verarbeiten des Fotos. Während dieser Zeit (Also direkt nach Schritt 3) soll er sich ein beliebiges mp4 Video (Zufallsprinzip) aus dem Ordner „Komplimente“ (Die Videos sind ca. 5 Sekunden lang, damit der RasPi Zeit zum Verarbeiten hat)holen und spielt dieses ab.Nach Ablauf der 5 Sekunden und fertiger Bildverarbeitung soll das fertige Bild für 10 Sekunden angezeigt werden. Parallel soll das fertige Bild in einer Onlinegalerie gespeichert werden (Eigener RasPi Webserver, der ein Wlan aufbaut, damit die Gäste mit der URL alle Bilder ansehen und downloaden können). Anschließend soll er wieder in den Bildschirmschoner (Siehe Punkt 1) springen.

Eine Druckfunktion, Templates o.ä. benötige ich alles nicht.

Bei den Mp4 Dateien soll es sich immer um kurze Animation von Sprüchen, Komplimenten, Zahlen etc. handeln, um den Photobooth selbst zu einer Attraktion auf der Festlichkeit zu machen. Gerne würde ich euch dann auch die entsprechenden Animationen zur Verfügung stellen.

Ist mein vorhaben mit relativ wenig Aufwand realisierbar ? An sich hört sich die Umsetzung ja relativ simpel an...

Bei meiner Anfrage im Raspberry Pi Forum wurde ein ganz interessanter Ansatz vorgeschlagen, dieser jedoch nicht näher erläutert. Ich soll es mithilfe des omxplayers und einer sehr großen Videodatei versuchen, in denen alle Einzelsequenzen zusammengeschnitten sind. Hier soll sich der Player dann per Zufallsprinzip immer aus einem speziellen Zeitstrahl (z.B. zwischen Minute 2-2:30 befinden sich 6x ein 5 Sekunden langer Countdown , hieraus soll er sich dann immer zufällig einen Countdown wählen) ein eine richtige und zufällige Teilsequenz zum richtigen Zeitpunkt herauspicken, ähnlich wie bei diesem "Grusel-Spiegel": https://forum-raspberrypi.de/forum/thre ... ppt-nicht/

Aber leider kriege ich das nicht hin, aber der Ansatz klingt interessant.

Ich habe versucht den Code zu verstehenden, dabei sind ein paar Fragen offen geblieben (siehe Anhang) Vielleicht kann die mir ja jemand von euch freundlicherweise beantworten:
Code
1. #!/usr/bin/env python
2.
3.
4. import RPi.GPIO as GPIO
5. from time import sleep
6. import subprocess
7. from random import randint
8. from omxplayer import OMXPlayer
9. import sys
10. #import os
11. #import glob
12.
13.
14. # 17 als Sensoreingang
15. sensorpin = 17 Hier könnte man statt den Bewegungsmelder einen Button oder Presenter integrieren, richtig? Wäre auch zum Beispiel ein Sprachkommando mit mehreren verschiedenen Stichworten (Cheese, Auslösen, Fertig etc.) technisch möglich? Wäre das arg Kompliziert?
16.
17.
18. # 23 als Programmende
19. exitpin=23 Welche Funktion hat der Exitpin? Das erschließt sich mir leider noch nicht und Google spuckt auch nichts aus.
20.
21.
22. # Pins entsprechend setzen
23. GPIO.setmode(GPIO.BCM)
24. GPIO.setup(sensorpin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
25. GPIO.setup(exitpin, GPIO.IN, pull_up_down=GPIO.PUD_UP)
26.
27.
28. # Bouncetime
29. BTIME = 100
30.
31.
32. # Die Videodatei
33. videofile = "girl.mp4"
34.
35.
36. # Array mit Start- und Endzeiten der Sequenzen im Video
37. # 0 = Standbild
38. # 1 = Gruselteil 1
39. # 2 = Gruselteil 2
40. video_start = [ 0,20,72]
41. video_end = [20,72,85]
42. # im Moment nur 2 Gruselsequenzen
43. maxvideos = 2 Es sind doch 3 Videos? Warum steht der Wert hier auf 2?
44. # ggf weitere Positionen wo z.B. nur kleine Bewegungen drin sind
45.
46.
47. # Hier die Interruptroutine mit der Erkennung des IR-Sensors
48. def makesensor(channel):
49. global sensortrigger
50.
51.
52. print("Sensor Trigger")
53. sensortrigger = True
54.
55.
56.
57.
58. # Beim Triggern von Sensor springt er zu makesensor
59. GPIO.add_event_detect(sensorpin, GPIO.FALLING, callback=makesensor, bouncetime=BTIME)
60.
61.
62. # Variablendefinition
63. firststart = 60 * 2 # 60 Sekunden warten auf IR-Sensor bis er sich kalibriert hat
64. # Da alle halbe Seunde gecheckt wird, Wert * 2
65.
66.
67. selectvideo = 0 # erstes Video ist Video ohne Bewegung Hier soll bereits eine zufällige Startsequenz ausgewählt werden. Die einzelnen Startsequenzen befinden sich zum Beispiel im Bereich 0:00 - 04:00 Min und umfassen jeweils 20 Sekunden. Wie genau legt man hier die Zufallsauswahl einer einzelnen entsprechenden Sequenz fest?
68. ende = False # Wenn man beenden will
69. sensortrigger = False # Und Sensorerkennung zuruecksetzen
70.
71.
72. # Los gehts
73. # Video laden
74. player = OMXPlayer(videofile, args=['--no-osd'])
75. # Auf Anfang setzen
76. player.set_position(video_start[selectvideo])
77. # und abspielen starten
78. player.play()
79.
80.
81. try:
82. # Nun Schleife
83. while ende == False:
84. # ne halbe Sekunde warten
85. sleep (0.5)
86. # wenn angewaehlte Videosequenz vorbei ist
87. if player.position() >= video_end[selectvideo]:
88. # wieder mit erster Videosequenz beginnen
89. selectvideo = 0
90. player.set_position(video_start[selectvideo]) Hier soll die zuvor zufällig ausgewählte Startsequenz in der Schleife laufen und keine andere Startsequenz zufällig gewählt werden. Es soll quasi immer das gleiche Video in der Schleife laufen. Wie ist das zu lösen?
91. sensortrigger = False
92.
93.
94. # Sensor noch nicht bereit, dann nix machen und warten
95. if firststart > 0:
96. firststart-=1
97. # Erkennung zuruecksetzen
98. sensortrigger = False
99.
100.
101. # Sensor sollte bereit sein, also los
102. else:
103. # Wenn Annaeherungssensor angesprochen hat und noch Standbild laeuft
104. if sensortrigger == True and selectvideo == 0: Gleichzeitig soll gphoto2 mit einem 5 Sekunden Timer gestartet werden und parallel im Hintergrund laufen. Ideen?
105. # waehlen wir per Zufall ein Gruselvideo aus
106. selectvideo = randint(1, maxvideos) Hier soll ein 5 sekündiger "Videoschnipsel" nur aus dem "Countdownbereich" ausgewählt werden. Wie können hier die einzelnen Sequenzen unterschieden werden? Es gibt ja ein großes Gesamtvideo, in dem alle Bereiche vereint sind (Startvideos, Countdown, Komplimente), jeder dieser Bereiche besteht ja wieder aus mehreren einzelnen Sequenzen. Die jeweils 5 Sekunden langen Countdowns befinden sich zum Beispiel zwischen 4:00 und 6:30 Minuten des Gesamtvideos. Wie grenzt man den Bereich der Zufallsauswahl ein und lässt tatsächlich nur 5 Sekunden "Schnipsel" aus dem Bereich 04:00-06:30 Min zu? Es soll auf keinen Fall eine "Startsequenz" oder "Komplimentesequenz"ausgewählt werden.
107. # und springen zum entsprechenden Startzeitpunkt
108. player.set_position(video_start[selectvideo])
109. # Erkennung zuruecksetzen
110. sensortrigger = False Mit Ablauf der "Countdownsequenz" soll ein "Videoschnipsel" aus der "Komplimentesequenz" (Zeitbereich im Gesamtvideo zum Beispiel 6:30 - 08:00 Min, jeweils ca. 5 Sekunden lang) gestartet werden. Wie bindet man das ein? Ansonsten stellen sich hier die gleiche Frage wie in Zeile 106.
111. Nach Ablauf des Videos aus der "Komplimentesequenz" soll das geschossene Foto über gphoto2 für etwa 10 Sekunden auf dem Bildschirm angezeigt und anschließend in einer Onlinegalerie gespeichert werden. Auch hier brauche ich Hilfe. Zunächst stellt sich die Frage, wie ich das Bild angezeigt bekomme und zweitens wie ich es dem Publikum (Webserver über RasPi?) zugänglich machen kann. Würde mich über Hinweise, Vorschläge und vielleicht auch Links zu anderen Projekten freuen.
112. Nachdem die 10 Sekunden der Bildanzeige vorüber sind, soll das Programm wieder zum Anfang (Startsequenz) springen und auf einen "Trigger" warten. Wichtig ist hier, dass eine neue ZUFÄLLIGE Startsequenz ausgewählt wird. Siehe auch Zeile 67.
113.
114.
115. # wenn exitpin, dann halt beenden
116. if GPIO.input(exitpin) == 0:
117. ende = True
118.
119.
120.
121. except KeyboardInterrupt:
122. GPIO.cleanup() # clean up GPIO on CTRL+C exit
123. GPIO.cleanup() # clean up GPIO on normal exit


Oder hat generell einen komplett anderen Ansatz der Umsetzung ?


Ich würde mich über eure Rückmeldung sehr freuen und bedanke mich für die Hilfe im Voraus.

Gruß
Chris
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das umzusetzen sind mehrere Tage Arbeit - Minimum. Dazu wird dann auch noch ein wenigstens aequivalentes Setup aus PI, Kamera, Bildschirm benoetigt. Das wird dir hier keiner abnehmen. Ich wuerde dir raten, dich mit bestehenden Fotoboxen zufrieden zu geben, wenn du nicht Programmieren kannst. Und sich das soweit raufzuschaffen, dass du das selbst hinbekommst, dauert Monate oder eher Jahre.
nezzcarth
User
Beiträge: 1634
Registriert: Samstag 16. April 2011, 12:47

In Bezug auf Python+RaspberryPI sehe ich das ähnlich. Du müsstest dir dafür zumindest passable Python und (wenn noch nicht vorhanden) Linux Kenntnisse aneignen. Es gibt ein paar Entwicklungsumgebungen speziell für Audio/Video, z.B. vvvv oder pure data. Letzteres ist vor allem im Musikbereich bekannt, kann aber wohl auch Video, letzteres ist speziell für Videozeug, allerdings brauchst du dafür einen Windows-Rechner. Du kannst ja mal schauen, ob es damit vielleicht etwas leichter umzusetzen wäre; einfach wird es aber vermutlich trotzdem nicht.
Goldjunge
User
Beiträge: 3
Registriert: Dienstag 29. Oktober 2019, 18:10

Hallo __deets__,

vielen Dank für die flotte Rückmeldung. Kannst du mir näher erläutern, warum genau dieses Vorhaben so umfangreich und schwierig ist ? Zum ersten scheint der Code ja nicht wirklich kompliziert zu sein und zum zweiten ist das ganze Vorhaben doch im Prinzip nur ein ein Videoplayer, welcher an bestimmten Positionen zufällige Videosequenzen aufruft. Angeblich soll all dies ja der omxplayer problemlos können, nur komme ich nicht drauf wie. Im Hintergrund läuft dann einfach nur ein Timer, welcher die Kamera nach 5 Sekunden einlöst. So kompliziert kann das doch garnicht sein? Hatte gehofft dem obigen Code fehlen einfach nur ein paar kleinere Ergänzungen und Anpassungen und das wars. Jetzt jagst du mir schon einen schrecken ein, daher würde ich wirklich gerne verstehen, was das Projekt so "unlösbar" machen soll... Hardware und die "Videoschnipsel" an sich sind schon mal kein Problem...
__deets__
User
Beiträge: 14536
Registriert: Mittwoch 14. Oktober 2015, 14:29

Das Projekt ist nicht unloesbar. Es ist noch nicht mal besonders schwierig im Sinne von da gaebe es Dinge, die eine Menge Recherche und Experimente benoetigen wuerden. Es ist aber trotzdem viel Arbeit.

Es ist auch nicht besonders schwer, Steine zu einer Mauer aufzuschichten. Macht die Menscheit seit Jahrtausenden. Trotzdem dauert es Monate, auch ein einfaches Haus zu bauen, auch heute noch.

Dem Code fehlen NICHT nur ein paar kleine Ergaenzungen und Anpassungen. Der Code kuemmert sich nicht um alles, was mit Foto ausloesen, auf das Ergebnis warten, abgreifen, verschieben. Aus vergangener Erfahrung mit dem OMXPlayer wuerde ich die momentane Implementierung auch nicht fuer problemlos halten, das muss ueberhaupt erstmal verifiziert werden. Wenn das NICHT so klappt wie geplant (hast du das mal am laufen gehabt? Gibt es glitches, unerklaerliche Verzoegerungen, unpraezise Timecodes, Latenzen beim umschalten?) muss man das komplett neu aufziehen. Ich kenne erstmal keine fertige Alternative, einen Videoplayer selbst geschrieben auf Basis des OMX-layers habe ich allerdings schonmal (das ist auch die Grundlage des OMXPlayers)

Die Integration von DBUS fuer den OMXPlayer mit zeitgleicher Ansteuerung von gphoto ist unklar, vertraegt sich das oder kommen sich die verschiedenen mainloops in die Quere? Wenn ja, muss man ggf. mehrere Programme per IPC zusammenschnueren. Wie zuverlaessig ist gphoto, kommt es zu Fehlern, um die man dann rumarbeiten muss? Aendert das ggf. die Interaktion mit den Benutzern?

Woher kommt die Galerie, wie kann man der Fotos unterschieben, wie weiss die, dass neue Fotos da sind.
Das aufsetzen des PI als Accesspoint, das aufsetzen des PI mit vor beschreiben geschuetztem Filesystem (ausser wo es notwendig ist), um die SD Karte nicht zu zerstoeren, einhaengen in den Auto-Start, Anleitung erstellen zu wiederaufsetzen des Systems wenn es dann doch mal abraucht, etc.

Anders gesagt: ich habe diverse Medieninstallationen in meinem Leben erstellt. Von diversen Riesentastaturen (http://typefighter.com/), eine davon sogar mit Foto-Ausloeser-und-per-Mail-Verschicker. Alle die haben mehrere Tage Arbeit alleine fuer diese "triviale" Programmierung benoetigt. Wenn du mich das fragst - das ist meine Antwort. Wenn du selbst glaubst es besser zu koennen - dann man in die Haende gespuckt.
Goldjunge
User
Beiträge: 3
Registriert: Dienstag 29. Oktober 2019, 18:10

Vielen Dank für dein ehrliches Feedback. Bin nun doch Recht niedergeschlagen, da ich leider aufgrund der anstehenden Hochzeit nicht die Zeit haben werde, mich damit Monate beschäftigen zu können. Ich hatte mir das viel einfacher vorgestellt. Ich war tatsächlich der Meinung mit ein paar kleinen Forenmeinungen zu einzelnen Zeilen das Ding zum laufen zu bringen. Schade
Antworten