Anleitung : Snapshots erstellen mit mjpg-streamer

  • Snapshots erstellen mit mjpg-streamer:

    Benötigt wird: PHP5 , PHP5-cli und eine IP Kamera oder die RaspiCam die das aktuelle Bild als Bilddatei bereit stellt.


    Installieren des PHP5-cli:


    Code
    sudo apt-get install php5 php5-cli

    Achtung hier wird auch Apache2 mit installiert der standardmäßig auf Port 80 läuft und somit das Webinterface des DoorPi stört. Bitte ändert den Port des Apache2 auf einen anderen Port oder das Webinterface von DoorPi. Dies ist leicht in der doorpi.ini zu ändern.



    Wenn diese Installation ausgeführt ist können wir PHP Scripte in der Shell ausführen.

    Optional: Nun erstellst du den Ordner tools mit:

    Code
    sudo mkdir /usr/local/etc/DoorPi/tools



    Hier erstellst Du die Datei take_snapshot_doorpi.php.

    Code
    sudo nano /usr/local/etc/DoorPi/tools/take_snapshot_doorpi.php


    Den nachfolgenden Code per copy and paste in die take_snapshot_doorpi.php einfügen und danach abspeichern.

    PHP
    <?php
    #! /usr/bin/php -q
    $snapshot_file = $argv;
    $timestamp = time();
    $datum = date("Ymd-His", $timestamp);
    $url="http://192.168.178.200:9000/?action=snapshot";
    copy($url,"/backup/record-video/".$datum.'.jpg');
    #copy($url,$snapshot_file);
    ?>


    Dieses script sollte natürlich jeder anpassen so wie Du es benötigst.



    Nun was macht diese script:
    Es greift sich ein Bild ab von der Url und Pfad des Webinterfaces des mjpg-streamer und benennt diese nach Datum und Zeit und legt es unter dem Pfad /backup/record-video ab.


    Sehr einfach und simpel gehalten wie ich finde.



    Ausführbar wird das script durch:

    Code
    sudo chmod u+x /usr/local/etc/DoorPi/tools/take_snapshot_doorpi.php



    Zum testen ob das PHP Script funktioniert folgendes eingeben:

    Code
    sudo php /usr/local/etc/DoorPi/tools/take_snapshot_doorpi.php


    Nun sollte ein Bild unter dem Pfad /backup/record-video zu finden sein. Bitte vorher den mjpg-streamer aber starten ;)


    So sollte dann der Befehl in der doorpi.ini aussehen:


    Code
    [EVENT_OnKeyPressed_prodsystem.0]
    10 = os_execute:php /usr/local/etc/DoorPi/tools/take_snapshot_doorpi.php

    Das war es auch schon.


    Über ein "Gefällt mir" würde ich mich freuen.

  • Hallo Andreas,
    hiermit klappt die Aufnahme eines Snapshots! Danke, super.
    Jetzt wäre es noch schön, dies in der mailto.py mit zu verarbeiten.
    Es gibt in dem Skript ja die Variable "smtp_snapshot", die wenn sie auf "true" steht, ja einen Snapshot mit an die Mail packen soll.
    Oder geht dies nicht mit dieser Art der Erstellung eines Snapshots?
    Danke, jbadmin


  • Da ich dieses script mailto.py nicht verwende müsstest Du das mal versuchen. Ich hatte große Problem mit dem script mich mit meinem E-Mail Konto an zu melden oder ich war zu doof dafür. Ich verwende hierfür sendemail.


    Bei mir sieht das script, mailbild.sh, so aus:


    Code
    last=`ls -tr | tail -1`
    if [ -z "$last" ]
    then
              echo "keine Datei gefunden"
    else
              echo "letzte Datei: $last"
    sleep 2
             echo "DoorPi Klingel Mail" | sendEmail -f absender@absender.de -t empfaenger@ampfaenger.de -u DoorPi Klingel Bild -m Es hat geklingelt -s smtp:587 -xu Benutzername -xp Passwort -o tls=yes -a /backup/record-video/"$last"
    fi


    Das script ist zwar nicht schön aber funktioniert. Wenn ich mal wieder etwas mehr zeit habe dann wird das ordentlich geschrieben. Ich hoffe Du kannst etwas damit anfangen.


    Der Befehl in der doorpi.ini sieht dann so aus:

    Code
    10 = os_execute:sudo /usr/local/bin/mail-bild.sh
  • Hallo,


    mein Pi läuft jetzt bis auf die Snapshot Funktion schonmal


    Mit dem Script von Andreas bekomme ich folgende Fehlermeldung


    PHP Warning: copy(/backup/record-video/20160419-205603.jpg): failed to open stream: No such file or directory in /usr/local/etc/DoorPi/tools/take_snapshot_doorpi.php on line 7


    das liegt bestimmt am Verzeichnis, wo muß das Verzeichnis backup/record-video liegen ?


    Sorry bin mehr der Hardwerker und stehe gerade auf dem Schlauch


    Gruß
    Andi

  • Hmm, klar liegt das am fehlenden Verzeichnis. Du müsstest die Angaben im Script auf Deine Verzeichnisstruktur anpassen. Bei mir ist dieses Verzeichnis zwar vorhanden aber nicht reell da da dies meine Verknüpfung auf mein NAS ist.



    Zitat von Nea

    copy($url,"/backup/record-video/".$datum.'.jpg');

    Hier gibst Du in dem script den Speichort des Bildes an. Diese Verzeichnis muss natürlich auch vorhanden bzw. angelegt worden sein. ( Seltsames Deutsch )


    Ein neues Verzeichnis mit dem Namen "backup" kannst Du folgendermaßen anlegen:

    Code
    mkdir backup

    Das ganze hat natürlich auch seine Schattenseite, bei zu vielen abgespeicherten Bildern verschleißt die SD Karte schneller. Deswegen empfehle ich jedem diese Dateien auf ein anderes Laufwerk auszulagern.


    Ich hoffe ich konnte Dir helfen.

  • Hallo Andreas,


    vielen Dank, werde ich heute abend gleich mal ausprobieren. Dann müsste das NAS ja die ganze Zeit mitlaufen bei Deiner Variante. Mein NAS schaltet wenn es nicht drauf zugegriffen wird in Standby


    @'Thomas
    wie sieht die Variante mit take snapshot aus ? in der Anleitung habe ich nur gefunden das FSwebcam dafür benötigt wird.
    Kann man mit der Version auch das Bild direkt auf den C5 übertragen ? Mit dem mjpg streamer klappt das schonmal bestens


    Gruß
    Andi

  • Kannst Du auf der Foscam kein eigenes Zertifikat installieren? Mit openssl sollten sich ja passende Zertifikate erstellen lassen.

  • Mir ist nicht bekannt, dass ich da irgendwie ein eigenes Zertifikat rein bekomme.
    Ich denke es gibt zwei Möglichkeiten
    1. Mal installiert das Zertifikat irgendwie auf dem doorpi
    2. Eventuell dem Script mit einem Parameter anweisen, den Fehler zu ignorieren


    Beide Lösungen muss ich mal nach googeln bisher keine Zeit gehabt.

  • Übernommen aus meinen "Problem-Report" , die ich mit dem Webinterface hatte:


    unter Doorpi 2.5.0.4 hat mir der durch die PHP-installation mitgebrachte Apache gehörig Kopfschmerzen bereitet.


    Als Erstes hatte ich diesen mit Erfolg auf den Port 8080 umgelegt.
    Als Zweites, rabiater mit sudo apt-get remove apache2 einfach entfernt.


    beides hat die Probleme beseitigt ohne PHP zu beeinträchtigen.


    Vielleicht hilft es ja anderen auch.

  • Hallo zusammen.


    Ich habe mich nach einigem Theater von mjpg-streamer ganz verabschiedet und benutze "motion". Das Tool ist out-of-the-box sauber und stabil. Zudem kann es deutlich mehr, z.B. Bewegungserkennung etc. Bei einer USB Kamera (LAN oder PiCam gehen auch) und einer Auflösung von 640x480 habe ich eine CPU Auslastung von 6% auf dem Pi3. Bei 1280x960 ca. 15%. Bei einem Stream. Ohne aktiven Stream ist die CPU Last <1%. Ich finde auch die Qualität, gerade bei snapshot, besser.


    Den Snapshot für die Fritzbox (oder DoorPi an sich) erzeuge ich durch die eingebaute Funktion in Motion per URL Aufruf. Motion speichert das Bild im DoorPiWeb Folder und aktualisiert gleichzeitig einen symlink .lastsnapshot. Damit habe ich einen statischen Link den ich in der FB verwenden kann. Den Zugriff auf das Webinterface von motion kann ich so theoretisch auf loopback reduzieren, so das niemand damit rumspielen kann.


    Ob ich später noch die Bewegungserkennung für weitere Überwachung nutze, hängt davon ab in wie weit das im Endausbau Sinn macht.

  • Das Ding lief gar nicht, bis ich den Patch reingefummelt habe:


    https://www.raspberrypi.org/forums/viewtopic.php?p=751735



    Siehe Kommentare ab:


    "by danjperron » Mon May 04, 2015 10:58 am
    With the new kernel mjpeg_streamer need a patch."


    Ich finde es nicht besonders vertrauenserweckend, wenn ein aktuelles Paket nach über einem Jahr immer noch einen von Hand eingespielten Patch braucht. Motion ist da irgendwie viel entspannter beim Setup und kann mehr. Zumindest, wenn man damit ein Überwachungssystem bauen will. Zudem brauche ich für Snapshots nichts drum rum basteln sondern rufe einfach eine URL auf :)


    P.S.: Den Patch hattest Du ja selbst im März in der Anleitung geposted.:)

  • Ja, da steht anscheinend die Entwicklung ein wenig still. Ich finde das auch schade denn Potential hat der mjpg_streamer.


    Meine ersten Versuche mit Motion waren damals eher ernüchternd. Die CPU und Ram Auslastung waren für meinen Geschmack viel zu hoch aber die Einstellungsmöglichkeiten sind schon gut bei Motion.
    Ich werde die Entwickler mal anschreiben ob beim mjpg_streamer noch gearbeitet wird oder nicht mehr.

  • Ich hatte das Problem auch erst und wäre fast verzweifelt, da immer nur 2 FPS rauskamen. Im Prinzip stellt man die Werte an zwei Stellen ein:


    ###########################################################
    # Capture device options
    ############################################################


    width 640
    height 480
    framerate 5


    Mit den Werten verarbeitet motion die Videodaten auf der Eingangsseite und dann intern bei der Bewegungserkennung. Mehr wird also hinten niemals rauskommen.


    ############################################################
    # Live Stream Server
    ############################################################


    stream_port 8081
    stream_quality 50
    stream_motion off
    stream_maxrate 5


    Damit definierst Du den Stream. Und nur ein verbundener Stream verursacht eine erhöhte CPU Last. Sicher wird es noch ein par andere Parameter geben, aber ohne Stream läuft mein Pi so bei 0,6-0,8%


    Den Rest habe ich erst mal so gelassen wie er war.

  • Korrektur (top ist wirklich kein optimales Werkzeug für sowas):


    Mit 5 FPS bei 640x480: 23% mit 1 Stream, 16% ohne
    Mit 3 FPS bei 640x480: 17% mit 1 Stream, 10% ohne


    Wobei das immer ein bisschen schwankt. Die Speicherauslastung liegt ohne pre capture so bei 1,5-1,7%, mit 5 Frames pre capture bei 2%. Dann kommen auch noch 1-2% CPU dazu. Der Prozess läuft jetzt seit 18h und ich kann da auch kein Memory Leak oder so etwas erkennen. Schön ist, dass Konfig Änderungen ohne Neustart ziehen :)


    Getestet habe ich das Gesamtsystem mal bis 25 FPS, was auch inkl. DoorPi und linphone einwandfrei lief. Aber natürlich unnötig ist. Nach meiner Erfahrung mit anderen Kameras sollten 2-5 FPS für eine brauchbare Bewegungserkennung von Personen ausreichen. Für einen manuellen Snapshot sowieso.