Problem beim Bilder einlesen mit Python/Kivy und Shellskript

Informationen zur neuen Foren-Software hier
Bei Login Problemen bitte ein neues Kennwort anfordern (nur alle 24 Stunden). Neuen Aktivierungscode anfordern oder Registrierung mit Aktivierungscode abschließen
Ansonsten Email an webmaster[äet]forum-raspberrypi.de
  • Hallo liebe Raspberrybastler :)


    Ich baue mir aktuell aus einem Raspberry eine Türsprechanlage mit Überwachungsfunktion und "Live" Bild einer IP-Überwachungskamera.

    Ich habe bis jetzt alles in Python mit Hilfe von Kivy (für einen Touchscreen) geschrieben und hat auch alles soweit funktioniert. Jetzt hab ich mich daran gemacht die Kamera noch mit einzubinden und da hab ich jetzt so meine Probleme.

    Ich hab mir das ganze so vorgestellt, dass der Pi über ffmpeg jede Sek einen Screenshot macht und ich dann jede Sek das aktuelle Bild neu lade. Es würde natürlich auch noch die Möglichkeit bestehen den Livestream der Kamera direkt an Kivy zu übergeben, aber das hab ich bis jetzt auch nicht zum laufen bekommen bzw. nicht mal einen groben Ansatz dafür.:conf:Deshalb auch aktuell die Sache mit "jeder Sek 1 Bild" und das funktioniert auch bis zu ca. 10 Bilder problemlos und dann gibt er mir nur noch ein Schwarzes Bild aus. Ich weiß aber nicht woran es liegen könnte, dass es Anfangs funktioniert und nach ein paar Bildern nicht mehr:conf:

    Das ffmpeg immer im Hintergrund laufen kann hab ich ein Shellskript geschrieben:

    Shell-Script
    1. #!/bin/bash
    2. /usr/bin/ffmpeg -i "rtsp://***" -vf fps=1 /home/***/Pictures/Cam/live/cam%02d.jpg

    und dieses Starte ich beim Initialisieren des Bildschrims und das funktioniert auch passend, also erstellt mir jede Sek brav ein Bild.


    Cam_Update wird jede Sek aufgerufen.

    und self.Bild übergibt dann das aktuelle Bild an die .kv Datei für Kivy.


    Ich verstehe nicht wieso er Anfangs keine Probleme hat die Bilder einzulesen, aber sobald das ca. 11 Bild kommt, er dann nur noch ein "schwarzes" Bild ausgibt, aber ganz selten, vll so alle 40 Bilder, gibt er wieder 1 oder 2 Bilder richtig aus.:conf:

    (Die Bilder sind aber alle ganz normal, wenn ich es mir per ftp hole.


    Ist es möglich die beiden Skripte (sh und py) zu synchronisieren? Also das er zu 100% fertig ist das Bild zu machen und es erst dann einliest? Könnte mir vll vorstellen das es daran liegt, aber ich glaub fast nicht.


    Vll weiß jemand von euch Rat :helpnew::daumendreh2:

  • Hallo,


    meine 1. Vermutung wäre auch, dass der Takt von jede Sekunden 1 Bild zu viel ist.


    Was auch sein könnte ist, dass dein Python-Skript auf eine angelegte, aber noch nicht fertig gefüllte / konvertierte JPEG-Datei zugreifen will. Abhilfe: nicht auf das neuste Bild, sondern das 2. neuste zugreifen. Nachteil: du bist 1 Sekunde "hinterher".


    Du könntest ggf. auch den Aufruf von ffmpeg per `subprocess` direkt in Python machen. Dann würden den Skript so lange blockieren, bis die Konvertierung abgeschlossen ist.


    Zum Skript:


    • Warum ist `counter_bilder` global? Vergiß' am besten, dass es `global` gibt. In 99,9% der Fälle braucht man das nicht.
    • Der Zähler ist so wie so überflüssig. len(Ordnerliste) liefert dir im gezeigten Code die Anzahl der Dateien.
    • Das `str()` in Zeile 10+12 sollte überflüssige sein.
    • Pfade setzt man unter Python mit `os.path.join()` zusammen, nicht per +
    • Nackte `try... except` möchtest du nicht verwenden, weil du damit _alle_ Fehler abfängst. Was man normalerweise nicht will, weil ggf. auch Fehler verdeckt werden, die man sehen will. Man fängt üblicherweise gezielt bestimmt Fehler ab.
    • Warum übergibst du `dt` der Funktion, nutzt es aber nicht im gezeigten Code?
    • Deine Funktion `Cam_Update` ist in sofern schlecht, als dass eine Funktion genau _eine_ Aufgabe erfüllen soll. Bei dir sind es aber zwei: `self.Bild` zuweisen und aufräumen. Zwei Aufgaben -> zwei Funktionen.

    Gruß, noisefloor