Bewegungsmelder

  • Hallo zusammen

    Ich habe eine Webcam welche ich von aussen zugreifen kann. Schön und gut.
    Jetzt wäre mein Vorhaben folgendes:

    Sobald sich etwas bewegt, bekomme ich eine sms.

    Problem:
    Leider weis ich nicht ganz wie ich vorgehen soll betr. dem "Bewegungssensor"...
    - Printscreen und Bilder vergleichen?
    - Einige Pixel "überwachen"?

    Das grösste Problem ist wahrscheinlich dass es manchmal heller ist oder eben dunkler (lästiges Wetter :whistling: ^^ )

    Mir fehlt die Idee, wie ich dies am besten umsetzen kann. D. h hoffe ich, Ihr alle seit kreativer weder ich :rolleyes:

    Besten Dank für alle Ideen :thumbup:

    • Offizieller Beitrag

    Schau dir einfach mal die Software an, die bei der Webcam dabei ist. Bis jetzt hatte ich mit jeder Webcam auch Software, die Raumüberwachung beinhaltet.
    Du stellst einen Bewegungstrigger ein, wird dieser aktiviert, startet die Aufzeichnung. Diesen startenden Prozess zu überwachen sollte kein Problem sein. Aber dir eine SMS zusenden? Alle mir bekannten Web-SMS Anbieter untersagen ausdrücklich einen automatisierten Zugriff auf diese Anwendung. - Schick dir also lieber eine eMail, das geht problemlos (und kann ja auch auf jedem gut konfigurierten Smartphone empfangen werden).

  • Hallo BugFix

    Besten Dank für deine Antwort.
    Es ist ein gebastel von mir und keine käufliche Webcam... ;)

    Dies mit dem SMS ist kein Probelm. Dies wurde bereits programmiert. Wie bereits erwähnt stelle ich die Methode in Frage welche mir im Kopf herumbraust:
    -> Pixel auf Farbe prüfen:

    [autoit]

    $x = 129
    $y = 348
    While True
    If Hex(PixelGetColor($x, $y),6)="FCFCFC" Then
    ;nichts
    Else
    ;--> SMS wird versendet
    EndIf
    WEnd

    [/autoit]


    Was aber, wenn es dunkel wird?
    Alle Farben "aufnehmen"...?

  • Am besten nimmst du immer alle Pixel auf.
    Wenn eine rasante Farbänderung in einem einzelnen "Gebiet" erscheint,
    dann kannst du die SMS senden.

    Wenn es dunkler wird, verändern sich ja ALLE Pixel zwangsweise...
    Deswegen nur, wenn sich ein bestimmtes Gebiet rasant ändert!

    Zudem solltest du Pixelfarbaweichungen von 15-25 zulassen.
    Ansonsten kann es schnell passieren, dass du haufenweise SMS für nichts erhälst.
    Am besten da selber mal ein wenig testen.

    LG. Make

    Einmal editiert, zuletzt von Yjuq (18. Juli 2013 um 12:17)

  • Warum nicht PixelChecksum?

    Werde ich mir gerne anschauen. Danke =)

    Klingt perfekt. Das Problem wäre dann nur noch ich resp. mein Wissen. Mit meinem Wissen lässt sich dies nicht schreiben...
    Aber werde es gerne versuchen.

    Falls jemand noch ein ähnlicher Script hat, bitte Posten =)

    Werde ein wenig testen und lesen =)

    • Offizieller Beitrag

    Ich würde die Kamera im SW-Modus nutzen.
    - Such einen Bereich der gleichmäßig gefärbt ist und an dem ein "Eindringling" sichtbar vorbei muß, z.B. Türrahmen
    - Referenziere eine feste Anzahl von Pixeln, die real auf dem Hintergrund etwa 10 cm Abstand voneinander haben (bei 2 m Türhöhe ca. 20 Punkte)
    - Ob es sehr hell ist oder Dämmerung herrscht spielt dabei keine Rolle (vorausgesetzt, einzelne Bereiche dieses Hintergrundes werden nicht durch Sonneneinstrahlung od. Laternenlicht unterschiedlich ausgeleuchtet):
    - - Der oberste Pixel (der nicht verdeckt werden kann) ist Referenzwert für den Check der anderen
    - - Gegen disen Wert prüfst du die anderen Pixel, gib einfach eine Varianz mit an, leichte Abweichungen wirst du immer haben
    - - Weist einer der Pixel einen deutlich anderen Wert auf, tritt der Alarmfall ein
    - Durch die relativ geringe Anzahl der Prüfpunkte, kannst du in hohen Intervallen prüfen. An einer Tür vorbeizugehen braucht sicher nicht mehr als 0,1 s -- also wäre wohl ein Prüfintervall von 50 ms sinnvoll.

  • Prinzipiell muss man erstmal fragen was man detektieren möchte: Bewegung im gesamten Bild, den Bereich im Bild einer Bewegung oder auch die Bewegungsrichtung.
    Gehen wir mal von der reinen globalen Bewegungserkennung aus dann wäre folgendes ein einfacher aber ausreichender Algorithmus:

    • Es werden immer zwei aufeinander folgende Videoframes (frame1, frame2) betrachtet
    • Zur Rauschverminderung wird z.B. ein Gaußfilter auf beide Bilder angewendet
    • Bildung eines Differenzbildes (Der Grauwert eines Pixels im Differenzbild ist einfach Pix_frame2 - Pix_frame1)
    • Das Differenzbild wird binarisiert: alles was über einem Schwellwert liegt wird 1 - alles was darunter liegt ist 0
    • Zur weiteren Reduzierung des Rauschens wird ein Erosionsfilter drüber laufen gelassen.
    • Alle Pixel welche nun den Wert 1 haben werden gezählt (die Pixel mit potentieller Bewegung)
    • Ist die Anzahl der Pixel über einem festzulegendem Schwellwert wird SMS gesendet.

    AutoIt ist für die Aufgabe allerdings ziemlich ungünstig.
    Ich würde dir für die Aufgabe Python in Verbindung mit der OpenCV-Bibliothek empfehlen.

  • Wie aber schon BugFix angedeutet hat, finde ich die Idee mit der Email besser als die mit der SMS.
    So könnte man noch ein Screenshot mitschicken und du würdest dann beurteilen können ob es keine Falschmeldung gab.
    Heutzutage hat ja fast jeder "mobiles" Internet so kann man dann auch unterwegs schnell nachgucken was Sache ist.

    :thumbup:

  • Hallo PHIPU,

    ich hatte das vor langer Zeit auch mal für einen Nistkasten realisiert.

    Im Live-Bild mit der Maus 2 voneinander entfernte Pixel mit ähnlichen Helligkeitswerten auswählen.
    Mauskoordinaten und Werte natürlich laufend anzeigen lassen. Ist was Brauchbares gefunden, dann die
    Koordinaten abspeichern und mit einem Programm die 2 Pixel auf eine Differenz in der Helligkeit
    prüfen. Es gibt auch noch andere Wege: z.B. kleine weiße Farbmarkierungen anbringen (starker Kontrast).


    Die 3 Farben in einen Grauwert umrechnen:
    (Rot-Anteil + Grün-Anteil + Blau-Anteil) / 3 = Luminanz (Grauwert)


    Exakter (gilt nur für das menschliche Auge) ist die Methode mit der Gewichtung der Farbanteile:
    ((Rot-Anteil x 0.299) + (Grün-Anteil x 0.587) + (Blau-Anteil x 0.114)) / 3 = Luminanz


    Weiß = 255, Schwarz = 0


    Dieser Wert ändert sich durch die Umweltbedingungen langsam, aber ständig. 


    Hervorragend zum Ausprobieren sind Livecams im Internet geeignet.
    Z.B. http://www.dykkarklubben.no/index.php?option=com_wrapper&Itemid=38


    Unter Wasser. Die ist auch nachts in Betrieb. Gut geeignet um schlechte Bedingungen zu testen.

    Oder zum Testen optimaler Sequenzen > New York, Times Square HD-LIVECAM
    Z.B. http://www.earthcam.com/usa/newyork/ti…?cam=tsstreetcc

    Du kannst ja mal von Deinen Erfahrungen und Fortschritten berichten.

    Beste Grüße aus dem sonnigen Alzey


    P.S. Dieser Editor spinnt aber gewaltig.

  • Hi,

    alles gut und schön, und mit "richtigen" Kameras (bzw. Sensoren) auch irgendwie machbar. (habe Lösungen für Kameras der >>1000€-Klasse umgesetzt)

    Aber mit einer "Webcam"?
    Selbst im Schwarzweiß-Modus ist das Rauschen so stark, dass man unmöglich einzelne Pixel sinnvoll auswerten kann. Daher BugFix´ens Tip, die kameraeigene Software zu nehmen, die bügelt nämlich etliche Filter über die verkorksten Bilder, damit die wenigstens halbwegs ordentlich aussehen...

    Im "Normalfall" (schlechte Beleuchtung/Lichtverhältnisse) sind Streuungen von 50% im Bereich der "Farben" bzw Grautöne keine Seltenheit!
    Daher ist die Methode von Aspirin-Junkie ist zwar relativ aufwendig, garantiert aber, dass Ergebisse in bestimmter Qualität zu erwarten sind.
    Ansonsten muss mit den Filtern weiter experimentiert werden!

    Pixelchecksum() und anderes "Bot"-Gedöns kann man sich getrost abschminken, das funktioniert nicht mal bei Fernsehkameras der 500k-€-Klasse^^ (raw-Format)
    Es ist wie immer im Leben, um aus Sch*** Gold zu machen, muss man tieeef in die Trickkiste greifen ;)
    Je höher die Auflösung der Cam, desto empfindlicher ist der Sensor gegen (das physikalisch bedingte) Rauschen. Ich habe anfangs ziemlich gute Ergebnisse mit einer alten IXUS X2 als Webcam-ersatz erzielt.
    Ein "riesen" Sensor mit geringer Auflösung :D => wenig Rauschen , einfache = schnelle Filter und Echtzeitanalyse ist auch mit AutoIt machbar:D

  • Aber mit einer "Webcam"?
    Selbst im Schwarzweiß-Modus ist das Rauschen so stark, dass man unmöglich einzelne Pixel sinnvoll auswerten kann. Daher BugFix´ens Tip, die kameraeigene Software zu nehmen, die bügelt nämlich etliche Filter über die verkorksten Bilder, damit die wenigstens halbwegs ordentlich aussehen...

    Dieser Gedanke schoss mir beim Lesen auch gleich durch den Kopf. Abgesehen vom Rauschen verändert sich bei meiner Webcam je nach Lichteinfall und Weißabgleichseinstellungen gerne auch mal von einer Sekunde auf die andere die komplette Bildhelligkeit.

  • Kleiner Spaß gefällig? :D
    Wenn ich Zwiebelkuchen esse, kommt der Bewegungsmelder nach einem halben Tag von selber.
    Hierbei handelt es sich dann um eine aktustische und olfaktorische Wahrnehmung mit nicht
    direkt sichtbar wahrzunmehmenden Bewegungen.

    Aber die Alarmierung ist vorauszusehen. :D

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl


  • Aber mit einer "Webcam"?


    An der Stelle muss ich an mein "Maus mit Webcam steuern" Projekt verweisen, bei dem ich das Bild meiner miserablen Webcam der schlechtesten Qualität noch so gebügelt hab, dass man damit recht präzise steuern kann. Ich hab dabei schon einen einzelnen Pixel als Bewegung gekennzeichnet (nach meiner bearbeitung).
    Eine gute Bewegungserkennung ist demnach selbst mit einer Webcam locker zu schaffen. Allerdings kriegt man kein gutes Bild vom Eindringling ^^

    https://autoit.de/index.php?page…bcam#post265281