Raspberry <--> GPHOTO2 <--> PYTHON

Du hast eine Idee für ein Projekt?
Antworten
Grabb001
User
Beiträge: 2
Registriert: Dienstag 15. April 2014, 15:49

Hallo zusammen,
ich würde mir gerne ein PHOTOBOOTH bauen. Dazu habe ich mir einen Raspberry Pi bestellt und nun es auch geschafft diesen zum laufen zu bringen, gphoto2 zu installieren und ich habe auch erfolgreich getestet, dass das Programm über einen Befehl (gphoto2 --capture-image) den Foto zum auslösen bringt. Darauf bin ich schon mal STOLZ, da ich null Vorkenntnisse habe.
Nun zu meinem Projekt:
Wenn ich das System hoch fahre, soll ein Bild angezeigt werden mit einer kurzen Bedienungsanleitung. Alternative können auch alle bisher gemachten Bilder als random gezeigt werden. Wird nun ein Knopf gedrückt (dieser geht über die I/O an den Raspberry) läuft ein Countdown 5-4-3-2-1 und dann wird ein Bild gemacht. Dieses wird dann für 3 sekunden gezeigt und dann gehts wieder in Standby mit Bedienungsanleitung.

- Bild mit Bedienungsanleitung
- Knopf wird gedrückt --> ein Foto wird geschossen
- Das gemachte Foto wird für 3 sekunden angezeigt
- Bild mit Bedienungsanleitung

Kann mir jemand helfen hierfür ein python-script zu schreiben?
Ja ich weiß, es gibt google und andere zahlreiche Tutorials, ... Ich bin aber sehr froh dass ich das soweit jetzt irgendwie hinbekommen habe und bin nun über Hilfe SEHR FROH :-)

Schon mal im voraus vielen Dank!! :D
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

Grabb001 hat geschrieben:Kann mir jemand helfen hierfür ein python-script zu schreiben?
Fang' einfach mal damit an und sobald Du die erste Frage hast bzw. mit einem Problem nicht weiterkommst, wird Dir hier ganz sicher weitergeholfen.
Zuerst einmal würde ich Dir raten, über das offizielle Python Tutorial, das es auch in einer deutschen Übersetzung gibt, einen Überblick und ein Gefühl für Python zu bekommen. Gern empfohlen wird auch Learn python the hard way. Wobei hard hier IMHO bedeutet, dass es gerade am Anfang hart sein kann, die Dinge erstmal etwas trocken anzugehen. Aber so ein Tutorial kostet wenige Stunden und danach ist der Einstieg in ein Programm um vieles frustfreier... :wink:

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
Grabb001
User
Beiträge: 2
Registriert: Dienstag 15. April 2014, 15:49

Hallo mutella,
danke für die Antwort. Ich probiere schon fleißig und werde mir auch mal das Tutorial ansehen.

Nun bin ich soweit, dass wenn ich einen Botton drücke, ein Text ausgegeben wird. Ich will aber keinen Text ausgeben, sondern einen Befehl ausführen (gphoto2 --capture.image) damit ein Bild gemacht wird und dieses dann als Vorschau auf dem raspberry anzeigen. Wie geht das?

Merci Gruß


Code: Alles auswählen

# -*- coding: utf-8 -*-
from Tkinter import *

master = Tk()

def callback():
    print "Nun sollte ein Foto gemacht werden."

b=Button(master, text="Bitte klicken fuer Foto", command=callback)
b.pack()

mainloop()
Zuletzt geändert von Anonymous am Mittwoch 16. April 2014, 11:08, insgesamt 1-mal geändert.
Grund: Quelltext in Python-Code-Tags gesetzt.
mutetella
User
Beiträge: 1695
Registriert: Donnerstag 5. März 2009, 17:10
Kontaktdaten:

@Grabb001
Um externe Befehle auszuführen, benutzt man das subprocess Modul.

mutetella
Entspanne dich und wisse, dass es Zeit für alles gibt. (YogiTea Teebeutel Weisheit ;-) )
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Dafür gibt es das subprocess-Modul.

Bei der Gelegenheit solltest du dir auch gleich die *-Importe abgewöhnen, damit müllst du dir den globalen Namensraum zu. Das führt nicht nur dazu, dass es schwer nachvollziehbar ist von wo Namen kommen, sondern auch zu ungewollten Überdeckungen von Namen. Bei Tkinter wird üblicherweise das Modul über ``import Tkinter as tk`` importiert und anschließend dessen Elemente über qualifizierten Zugriff angesprochen: ``tk.Button(...)``.

Auch solltest du dir Code auf Modulebene abgewöhnen, damit machst du eine Wiederverwendung deines Moduls unmöglich, da der Code beim Importieren des Moduls ausgeführt wird. Nur Importe, Funktionen, Klassen und Konstanten gehören auf die Modulebene. Alles andere solltest du in Funktionen verpacken. Für Python gibt es dafür ein Idiom, so dass der Code auch nur dann ausgeführt wird, wenn die Datei direkt gestartet wird: (ungetestet)

Code: Alles auswählen

import Tkinter as tk

def callback():
    print "Nun sollte ein Foto gemacht werden."


def main():
    master = tk.Tk()
    b = tk.Button(master, text="Bitte klicken fuer Foto", command=callback)
    b.pack()
 
    mainloop()


if __name__ == "__main__":
    main()
Das Leben ist wie ein Tennisball.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Statt befehle auszuführen kannst du auch das gphoto-Python-Binding nutzen. Das wurde hier, sogar im Kontext vom Raspberry Pi, im Forum besprochen, vor gar nicht langer Zeit.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten