Bewegungserkennung mit Webcam

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

Donnerstag 29. Oktober 2009, 17:31

Hi @ all,

ich würde gerne mit Python (vorzugsweise 3.x aber auch 2.6) eine Bewegungserkennung basierend auf einem Webcamstream / auf Webcam-Bildern realisieren.
D.h. im Programm muss folgendes implementiert werden:
- Abgreifen des Webcamstreams
- Analyse dieses Streams um motion detection durchzuführen (z.B. Temporal Differencing, Backgroundsubstraction)
- Bewegungserkennung ausgeben (in einfacher GUI)

Hat jemand schon so etwas gemacht?
Es würde sich auf jeden Fall empfehlen OpenCV und PIL zu benutzen. Aber wie greife ich damit den Stream meiner Webcam ab und untersuche in Pixel für Pixel?
Würde mich über Hilfe echt freuen!
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

Donnerstag 29. Oktober 2009, 18:08

zwar noch nichts gemacht, aber rein logisch brauchst du nur 2 Bilder und machst daraus ein Diff und dann siehst du was sich verändert, sprich, sich bewegt hat

gruß, SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 29. Oktober 2009, 19:02

SigMA hat geschrieben:zwar noch nichts gemacht, aber rein logisch brauchst du nur 2 Bilder und machst daraus ein Diff und dann siehst du was sich verändert, sprich, sich bewegt hat
Das setzt vorraus, dass die Bilder nicht "rauschen", was ich für ziemlich unwarscheinlich halte.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

Donnerstag 29. Oktober 2009, 19:10

ja genau das ist das Temporal-Differencing Verfahren.
Ich hab fast genau dasselbe schonmal mit Java programmiert. Man nimmt beim TD-Verfahren die RGB-Werte der Einzelnen Pixel und vergleicht/bildet Differenz. Und dann hat man (wegen des Rauschens) eine Threshold um da eine "richtige" Bewegung rauszufiltern.

Nur ich hab eig. Probleme mit der praktischen Umsetzung. Ich weiß nicht wie eine Cam ansprechen kann und das bild zum Beispiel als Array von Pixeln analysieren kann um die Differenz rauszurechnen.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7477
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 29. Oktober 2009, 19:37

Bonzo1993 hat geschrieben: Ich weiß nicht wie eine Cam ansprechen kann...
Hm... naja, da mußte wohl oder übel gucken, welche Libs es da gibt! Letztlich mußt Du ja höchstwahrscheinlich eine Abstraktionsschicht benutzen.

Das folgende Projekt nutzt da wohl vlc als backend (auch wenn ich keinen Plan habe, wie das gehen soll):
http://kde-apps.org/content/show.php/Ka ... ent=111750
und das bild zum Beispiel als Array von Pixeln analysieren kann um die Differenz rauszurechnen.
Vielleicht hilft Dir da PIL? Also zumindest, um ein Bild in eine Python-Datenstruktur zu bekommen. Das Analysieren musste da sicherlich selber machen.
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

Freitag 30. Oktober 2009, 09:50

Es ist schon unglaublich wie schnell man bei google sowas findet ;)

Suchwort: "python webcam"

http://webcamspy.sourceforge.net/
http://technobabbler.com/?p=22
http://videocapture.sourceforge.net/
http://code.google.com/p/ctypes-opencv/

gruß, SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
Bonzo1993
User
Beiträge: 28
Registriert: Freitag 28. August 2009, 22:03

Donnerstag 19. November 2009, 14:37

thx (ich benutze kein google nur Yahoo! :D)
also ich hab jetzt bereits das meiste realisiert und die bewegungserkennung funktioniert auch super! (Sogar mit einer schlechten Webcam überhaupt kein Problem)

Ich bin jetzt grade an der GUI dran und hab da ein kleines Problem:
Wie bekomme ich es mit Tkinter hin, dass in der Endlosschleife zur Bewegungserkennenung jedes Frame das abgegriffen wird auch gleichzeit in der GUI ausgegeben wird? Oder kann ich direkt das Video der Webcam abgreifen? Oder mache ich das am besten mit einer Canvas in die ich schnell Bilder zeichne?

Danke schonmal für eure Antworten!
EnTeQuAk
User
Beiträge: 986
Registriert: Freitag 21. Juli 2006, 15:03
Wohnort: Berlin
Kontaktdaten:

Dienstag 24. November 2009, 12:12

Hey!

Du kannst dir auch pymt anschauen, das hat auch ein paar Funktionen zur Erkennung von Bewegungen und Gesten eingebaut.

Gruß, Christopher
Antworten