Dreambox als Babyfon/Überwachung

  • mamba, dies hatte ich dir doch auch schon eher geschrieben (Beitrag vom 15.09.06 - 11.14), das steht in dem KB-Artikel von MS drin, das dieser REG-Eintrag die Lösung ist.
    LazyT, wenn du die Idee von mamba aufgreifen willst, auf der Seite http://www.thomvo.de/ gibt es etliche Livestreams, da kannste bestimmt einen davon zum Testen gebrauchen - die stehen dort auf der Seite unter Livestream - z.B. die weiße Kamera mit dem blauen Wellensittich ist lustig...


    Das Problem der fehlerhaften Bewegungserkennung kann doch recht einfach geklärt werden (aus Anwendersicht):
    Beim normalen Erkennen wird ein Bild ca. alle 3-5 sek. gescannt. Bei Bewegungserkennung werden die nachfolgenden Bilder alle 1 sek.gescannt. Wenn dort auch Bewegungen sind, dann erst wird die Anzeige ausgelöst...

    DM7000 - 80GB-HDD - 1GB-USB-Stick - 100Mbit-LAN
    DM600 - 20GB-HDD - 100Mbit-LAN

    2 Mal editiert, zuletzt von card0384 ()

  • card,


    >Es gibt aus meiner Sicht noch ein theoretisches Problem (...)


    >>Das Problem der fehlerhaften Bewegungserkennung kann doch recht einfach geklärt werden (aus Anwendersicht): (...)


    ich hoffe wir sprechen vom gleichen "Problem":


    es handelt sich hier um ein generelles Thema, was nicht von der Frequenz der Prüfung abhängt. Auch wenn ich nur alle 3-5 Sekunden vergleiche, dann wird ein fehlerhaftens JPG immer eine Bewegungserkennung auslösen, der aber keine reale Bewegung im Vorfeld zu Grund liegt. Anscheinend gibt die Grandtec Bilder aus, obwohl sie selbst noch den File "still.jpg" aktualisiert. Ich frage mich, warum das nicht schon vom OS abgefangen wird bzw. warum der httpd einen noch nicht fertiggeschriebenen File überhaupt ausgibt.


    Gruß Mamba

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

    Einmal editiert, zuletzt von mamba0815 ()

  • mamba, die Frage kann ich dir recht einfach beantworten - die Cam generiert das Bild 30x pro sekunde. Die wget-Funktion ist einfach zu langsam im Herunterladen des einen Bildes, bevor die Cam das nächste erzeugt. Da ist ein gewisser Schreib-Lese-Zugriff in der Cam, der da nicht richtig geht - ist schlecht - ist aber so - müssen wir mit leben - kann bei anderen Cams auch so sein.
    Daher meine Idee der mehrfachen Prüfung in der von mir vorgeschlagenen Variante. Erst wenn "schnelle" Prüfzyklen in der Anzahl X hintereinander eine "erfolgreiche" Veränderung erzielen, wird die Darstellung ausgelöst. Die Anzahl der Prüfungen wäre als Variable in der Config eventuell gut aufgehoben - je nach dem, was man für eine Cam hat (Besser/Schlechter), kann man dann den Wert für sich selbst anpassen. Ist halt ein Parameter, der die "Bilddarstellungsauslösungs-geschwindigkeit" zu Gunsten einer Anzeigegenauigkeit verändern kann. Dies würde im Übrigen auch das Problem (weiter oben beschrieben) abdecken, daß wenn sich das Kind nur mal dreht (oder beim Türwächter ein Schmetterling vorbeifliegt), nicht gleich die Bilddarstellung ausgelöst wird.
    Daher Standart 3-5 sek., dann Überprüfung alle 1/2 sek (oder so schnell, wies geht), dann Darstellung. Sollte bei der Schnellen Überprüfung nur 1 Vergleich keine Bewegung ergeben, wird sofort wieder in die Standart 3-5 sek. umgeschalten...


    Übrigens, weist du schon, daß es auf der Grandtec-Website die Firmware 1.7 für die Cam gibt - nur so als Tip - hat nichts mit dem Thema hier zu tun - ich weiß auch nicht was daran anders/besser ist...

    DM7000 - 80GB-HDD - 1GB-USB-Stick - 100Mbit-LAN
    DM600 - 20GB-HDD - 100Mbit-LAN

    4 Mal editiert, zuletzt von card0384 ()

  • card,


    verstehe. Um die Auslösesicherheit weiter zu erhöhen sollte man nicht beim ersten diff > threshold einen Alarm auslösen, sondern erst, wenn diese eine bestimmte Anzahl an Zyklen gegeben ist.


    Ich progge das gleich mal in meinen Demonstrator rein.


    Melde mich spaeter.


    Gruß Mamba

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

  • Hatte nicht viel Zeit, aber "Bildholen" ist nun auch drin.


    Wegen der Bewegungserkennung würde ich ganz einfach vorschlagen je nach Bildgröße jeden (160x120), jeden zweiten (320x240) oder jeden vierten (640x480) Pixel auszuwerten. Damit ist der Rechenaufwand immer gleich, doppelte Skalierung entfällt und die Erkennung sollte auch nicht groß darunter leiden...

    Ich bin nicht faul sondern im Energiesparmodus!

  • Hallo Alle,


    habe mich weiter mit dem Algorithmus zur Bilderkennung beschaeftigt.
    Verschiedene Anregungen, die ich über das Board bzw. direkt erhielt, sind hier eingeflossen. Insgesamt 10 Änderungen.


    Kurz die wichtigsten Punkte:
    1. Das script merkt sich jpgs vor, während und nach dem Alarm. Damit kann ich später ein mjpeg bruzeln. UPDATE 22.09.: ... damit kann ich ein MPG bruzlen. :smiling_face:
    2. Alle Schwellwerte sind einstellbar (siehe config Bereich im script)
    3. Alle events werden auf der Platte mitgeloggt.
    4. Erkennungsmechanismus weiter verbessert und beschleunigt. Alle tools wurden gestript.


    Viel Spaß beim Testen. Bin an feedback interessiert, sodaß wir das Gelernte in LazyT's binary einbringen können.


    Gruß Mamba


    #CHANGE LOG:
    # What is new in version 0.2?
    # 0) changed name from 'motion' to "dream_motion script" to avoid all possible confusions with other products
    # 1) i have added a ton of comments below.
    # 2) runtime errors get saved in $tmp_dir/dream_motion.err
    # 3) heartbeat function that shows how fast the loops run and whether it runs at all
    # 4) if motions is detected, the triggering image (pre, while and post event) get saved under the name "dream_motion_x_xyyyy_z.jpg"
    # 5) added feature to turn TV SHOW on/off (needed mostly for debugging and other applications)
    # 6) logging function added, puts stdout into $save_dir/dream_motion.log file for latter analysis
    # can be turned on and off
    # 7) cycle counter added to logging function, counts the cycles in which a motion was contiously detected. Is a sign for the lenght of movements
    # 9) speed dramatically increased due to some code optimizations
    # 9) added pre-alarm threshold to define number of continous movement req. before setting off an alarm


    UPDATE: Versionen 0.5 und höher werden in einem anderen Board gepostet, siehe unten.

  • LazyT:
    war heute den ganzen Tag ausser Haus und werde heute Abend mal dein neues binary austesten. Bin gespannt!


    @all:
    Habe die Version 0.3 von Dream Motion veroeffentlicht (baut nun auch MPEG Files aus des Bildern einer Alarmsession). Aufgrund des Upload Limits von knapp 1 MB habe ich mich aber entschlossen, es hier nicht mehr zu posten. Die Rummfummelei mit Multivolume nervt zu sehr. Ihr findet es auf dem bekannten Board, was im Namen einem Zitat von Martin Luther King ähnelt. :winking_face:


    Gruß Mamba

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

    Einmal editiert, zuletzt von mamba0815 ()

  • Hi LazyT,


    habe webcam_03 getestet.


    Soviel vorab: es tut! Download des Bildes, Bilderkennung und Ausgabe.


    Folgende Beobachtung:


    Egal, ob Ruhe oder wildes Gefuchtel vor der IPCAM ist, die erkannten diff-Werte sind nur marginal unterschiedlich. Sie bouncen zw. 60 (Ruhe) und 85 (Gefuchtel) hin und her. Damit gelingt eine Bilderkennung, allerdings ist das "Signal Noise Ratio" (wenn man das so nennen will) sehr klein.


    Hast du an einem Bilderkennungsalgorithmus gedreht?


    Anbei ein screenlog, als Schwellwert wurde hier 80 genommen:


    motion = 0 (72.668)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (71.3055)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (67.8431)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (70.4332)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (70.2166)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (77.6629)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (81.8108)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (77.2024)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (76.2986)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (69.4187)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (72.3712)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (60.4547)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (70.4516)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (85.1435)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (68.6759)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (70.3716)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (71.6347)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (71.0933)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (73.0289)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (75.7939)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (69.2189)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (72.2086)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (82.0483)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (87.5889)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (85.2732)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (69.9287)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (77.1065)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (80.6711)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (77.2979)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (67.3112)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (79.0629)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (83.4197)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (81.5232)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (72.9394)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (88.5183)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (86.7374)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (85.1056)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 1 (82.5033)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (61.1462)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)
    motion = 0 (72.0169)
    receive http://root:admin@192.168.2.102/still.jpg
    decode /tmp/cam.jpg (640x480)

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

    Einmal editiert, zuletzt von mamba0815 ()

  • Zitat

    Egal, ob Ruhe oder wildes Gefuchtel vor der IPCAM ist, die erkannten diff-Werte sind nur marginal unterschiedlich.


    Da bin ich mir noch nicht richtig schlüssig: ich muss ja zum Vergleich ein Bild zwischenspeichern. Momentan ist dies das letzte ausgegebene Bild. Man könnte natürlich auch das letzte decodierte Bild nehmen, keine Ahnung was nun vorteilhafter ist. :confused_face:


    Ich werde einfach auch mal eine Version mit der anderen Variante anhängen damit ihr testen könnt.


    Zitat

    Hast du an einem Bilderkennungsalgorithmus gedreht?


    Eigentlich noch nicht. Werde aber wie überlegt in Abhängigkeit der Bildgröße nur noch jeden 2 bzw. 4 Pixel checken. Mal sehen was dabei rauskommt. :grinning_squinting_face:


    Zitat

    http://root:admin@192.168.2.102/still.jpg


    Aha, kann ich also davon ausgehen das Benutzer+Passwort so schonmal funktionieren.

    Ich bin nicht faul sondern im Energiesparmodus!

  • Hi LazyT,


    danke für die Rückmeldung.


    Bzgl. Bilderkennungsalgorithmus hier meine Erfahrungen beim Rumspielen mit 'Dream Motion':


    0. Es sollten immer aufeinander folgende Bilder verglichen werden.
    Begründung: bei sich langsam verändernden Bildinhalten (Sonnenlauf => Schattenänderung) werden irgendwann Fehlalarme ausgelöst, wenn man ein zu altes Vergleichsbild heranzieht. D.h. quasistatische Änderungen kann man verhindern, indem man zueinander zeitnah aufgenommene Bilder vergleicht.


    1. Auf der Dream muß mindestens 3x Schleifen mit "motion=1" abwarten, bevor man einen "Alarm" = Bildausgabe auslöst. So wird vermieden, daß ein kurzer "Wink" schon als Alarm erkannt wird. Card verglich das mit einem Schmetterling, der vor der Door Cam vorbeifliegt. Die Kombi aus Schwellwert und Alarmverzögerung bringt das gewünschte Ergebnis.


    2. Nach Alarm muß der diff Wert mindestens 2 Schleifen lang < Schwellwert sein, bevor 1.) wieder beginnt, sonst werden Mehrfachalarme ausgelöst, obwohl es sich noch um eine aktuelle "motion" handelt (z.B. jemand läuft vor der Kamera vorbei).


    3. Zur Ausgabe auf dem TV sollte das letzte Bild verwendet werden, das aufgenommen wurde (also das 2. nach dem ersten 'diff > Schwellwert' Zustand). Noch besser wäre ein MPEG (Dauer: -3 sek vor Alarm und + 3 sek nach Alarm). Das Interfacing mit der Enigma dürfe aber nicht so einfach sein...


    4. Die Abtasterate sollte >= 2 Hz sein, d.h. 2 volle Durchläufe inkl. Bildvergleich / Sekunde. Nur so werden dann auch "schnellere" Bewegungen gut und zeitnah erkannt. Habe an meinem Script lange rumgemacht, bis es einigermaßen so schnell war. Schraubt man seine Anforderungen herunter, gehen natuerlich aus weniger als 2 Hz.


    >> Werde aber wie überlegt in Abhängigkeit der Bildgröße nur noch
    >>jeden 2 bzw. 4 Pixel checken. Mal sehen was dabei rauskommt.
    Bin auch sehr gespannt. Sollte normalerweise funktionieren, da es ja einem Verkleinern des Bild um Faktor X gleich kommt, wenn auch evtl. etwas "verzogen".


    Gruß Mamba

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

    9 Mal editiert, zuletzt von mamba0815 ()

  • Habe die Version 0.4 von Dream Motion veroeffentlicht (Bugfix und Anpassung auf weitere Webcam-Varianten: TCP_PORT konfigurierbar gemacht, User-ID/Passwort abschaltbar). Aufgrund des Upload Limits von knapp 1 MB in diesem Board, findet ihr es auf dem Board, was im Namen einem Zitat von Martin Luther King ähnelt.


    Gruß Mamba

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

    Einmal editiert, zuletzt von mamba0815 ()

  • Hi,


    habe mit webcam_2 rumgespielt. Es funktioniert.


    Hier meine spontanten Beobachtungen:


    Der diff Wert liegt nach wie vor bei ca. 60 .. 70 in Ruhe. Und bei knapp über 80 bei normalen Bewegungen. Das ist relativ wenig Distanz.


    Das binary läuft noch nicht schnell genug, d.h. es dauert gut 1 sek um das jpg zu decodieren und anschliessend zu diffen. Ziel sollte sein, das schneller zu machen, da das Abwarten bis count = 3 ist eine "Ewigkeit" dauert und man praktisch vor der IPCAM "herumdancen" muß, bis ein Alram ausgelöst wird.


    Meinung?


    Werde noch weiter testen.


    Gruß Mamba

    __________________________________
    Dreambox 800/7020, 250 GB HDD, 100 Mbit Lan

    Einmal editiert, zuletzt von mamba0815 ()

  • mamba, schließ mich deiner Meinung an, vielleicht kann man das eine oder andere noch beschleunigen...
    (sofern es denne mal auf ne 7000er zum laufen kommt :winking_face: )

    DM7000 - 80GB-HDD - 1GB-USB-Stick - 100Mbit-LAN
    DM600 - 20GB-HDD - 100Mbit-LAN

  • hi mamba, sieht nicht so aus:
    /var/webcam > ./webcam_1 http://192.168.1.251:2000 0 1 60 10 1
    ./webcam_1: error while loading shared libraries: libcurl.so.2: cannot open shar
    ed object file: No such file or directory
    /var/webcam > ls
    libcurl.so.2 libjpeg.so.62.0.0 webcam_1 webcam_2
    /var/webcam >


    ich bin mir aber nicht so sicher mit den Variablen, mit denen ich das script starten muss: Das erste ist die Quelle - ist klar, das zweite steht für Bild in Originalgröße oder nicht - ist auch klar, das dritte ist Farbe oder nicht - auch klar, das vierte (<threshold>) weiß ich nicht recht, ist das der Auslösewert?, das fünfte (<delay>) ist die Darstellungsdauer - denke ich und das sechste ist der Debugmodus - ist auch klar.
    Sag mal was, obs so stimmt - unabhängig davon, daß es erstmal nicht geht...

    DM7000 - 80GB-HDD - 1GB-USB-Stick - 100Mbit-LAN
    DM600 - 20GB-HDD - 100Mbit-LAN

  • Zitat

    Der diff Wert liegt nach wie vor bei ca. 60 .. 70 in Ruhe. Und bei knapp über 80 bei normalen Bewegungen. Das ist relativ wenig Distanz.


    Was sollte sich denn da auch groß geändert haben, webcam_1 wäre ja auch das interessantere gewesen. :winking_face:


    Eigentlich sollte da aber in etwa das rauskommen, was icmp auch erkennt. :confused_face:


    Zitat

    Das binary läuft noch nicht schnell genug


    Ja, gibt's auch noch viel zu optimieren.


    Zitat

    error while loading shared libraries: libcurl.so.2: cannot open shared object file: No such file or directory


    Setz vorher mal "export LD_LIBRARY_PATH=<Pfad wo die 2 .so liegen>" ab.

    Ich bin nicht faul sondern im Energiesparmodus!

  • LazyT


    du ich glaub, ich hab die libcurl.so.2 in meinem neuesten enigma1 für dm7000 nicht, da wird wohl auch eine statische libcurl.so.2 fällig werden..
    Das ist schon ein wenig nervig, zwei Boxen, ein Hersteller, ein Enigma und unterschiedliche "neueste" Softwarestände...

    DM7000 - 80GB-HDD - 1GB-USB-Stick - 100Mbit-LAN
    DM600 - 20GB-HDD - 100Mbit-LAN