Bild per raspistill in Python

  • Wenn du fortlaufend Bilder machen willst ohne das Programm zu beenden, dann steht die Lösung auch in der Doku:

    Wenn du aber nur sporadisch Bilder machen willst mittels Programmaufruf, dann musst du halt zuerst Prüfen, wie die letzte Datei hieß und zählst eines dazu. Oder du speicherst die Werte ab etc. Einfacher wäre ein Datumstempel...

  • Hallo,
    erstmal Danke. Allerdings macht dies dauerhaft Bilder. Es soll nur auf einen Bewegungsmelder reagieren. Ich habe es nun wie folgt gelöst:

    Falls Verbesserungsbedarf... Ich bin für Kritik offen.

  • Leerzeichen in Dateinamen sind schlecht und sollten vermieden werden.

    Anzumerken wäre außerdem das es einen Unterschied zwischen python2 und python3 gibt. Der obige Code scheint für python3 zu sein und dann müsste picamera gesondert für python3 installiert werden - wenn es aber für python2 is sollten die print Zeilen geändert werden (komisch das bootsmann dazu nix sagte, sonst mecker er darüber doch auch immer :s)

    datetime kann man sich ebenfalls sparen, da es im picamera bereits eine eingebaute 'Datei Benennung' dafür gibt, zwar nur für 'capture_continuous' aber mit einem simplen Trick dennoch hierfür verwendbar.

    Und zu guter letzt verwendest du unterschiedliche Einrückungen: mal 4 Leerzeichen und mal 2 Leerzeichen. Auf eins von beidem solltest du dich festlegen ;)


    Bedeutet also das Script könnte wie folgt aussehen:
    [code=php]
    #!/usr/bin/python3
    # coding=utf-8
    import time, picamera, RPi.GPIO as GPIO

    PIR_PIN = 17

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

    def motion(pin):
    print("Bewegung erkannt")
    with picamera.PiCamera() as camera:
    for filename in camera.capture_continuous('/home/pi/Desktop/Fotos/{timestamp:%d.%m_%H-%M-%S}Uhr.jpg'):
    print('Captured %s' % filename)
    break

    try:
    GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=motion)
    while True:
    time.sleep(0.5)
    except (KeyboardInterrupt, SystemExit):
    GPIO.cleanup()
    [/php]

    Es wäre aber auch ratsam gewisse Einstellungen vorzunehmen wie Auflösung, Qualität, Belichtungszeit usw oder vorher preview anzuwenden damit die Kamera Zeit hat zu initialisieren bzw das Bild zu stabilisieren - was letztlich alles die Bildqualität beeinflusst...

    Beispiel:

    Spoiler anzeigen

    [code=php]
    #!/usr/bin/python3
    # coding=utf-8
    import time, picamera, RPi.GPIO as GPIO

    PIR_PIN = 17

    GPIO.setmode(GPIO.BCM)
    GPIO.setup(PIR_PIN, GPIO.IN, pull_up_down=GPIO.PUD_DOWN)

    def motion(pin):
    print("Bewegung erkannt")
    with picamera.PiCamera() as camera:
    camera.resolution = (1024, 768)
    # Start a preview and let the camera warm up for 2 seconds
    camera.start_preview()
    time.sleep(2)
    for filename in camera.capture_continuous('/home/pi/Desktop/Fotos/{timestamp:%d.%m_%H-%M-%S}Uhr.jpg'):
    print('Captured %s' % filename)
    break
    camera.stop_preview()

    try:
    GPIO.add_event_detect(PIR_PIN, GPIO.RISING, callback=motion)
    while True:
    time.sleep(0.5)
    except (KeyboardInterrupt, SystemExit):
    GPIO.cleanup()
    [/php]

  • Wenn du meinst... Dann schlag halt eine andere Lösung vor wie man den aktuell erstellten Dateinamen erhält, ohne 5 Zeilen Code einzufügen


    Aber passt scho - deine Beiträge werde ich künftig einfach ignorieren


    ...im out...

Jetzt mitmachen!

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