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