Pixel Expander Background

Plus d’info sur la détection de mouvement

Il y a peu, on vous parlait de la détection de mouvement via webcam, dans notre application.
Webcam motion detection“, en anglais, pour faire bien.

Simple rappel des faits :
La détection de mouvement via la webcam permettra d’interagir sur ses pixels avec ses mouvements. Les gestes que l’on fera à la caméra prendront donc la fonction d’accéléromètre de la souris, et du coup faire par exemple vaciller une partie de sa création.

Anas et moi-même nous sommes penchés sur la question ce week-end : comment détecter un mouvement via la webcam, pour le retranscrire sous forme d’accéléromètre, dans notre application?

Grâce à pas mal de sources sur Internet, un solution (peut-être définitive) s’est présentée à nous.
En gros, il faut comparer deux flux vidéos, qui seront dupliqués à partir du flux principal de la webcam.
Il y aura donc un flux A et un flux B. Lors de l’analyse, le flux A partira avec quelques centièmes de secondes d’avance et sera donc superposé au flux B.
A partir de ce moment, l’application devra donc, en quelque sorte, soustraire le flux A au flux B pour n’avoir uniquement que ce qui a bougé, et ainsi détecter le mouvement.

Imaginons : je lève mon bras en l’air. Aux premières secondes, il sera détecté sur le flux A qu’il y a du mouvement (car l’image change, donc le bitmapdata aussi). Le flux B, quant-à-lui, sera quelques secondes en retard et on pourra ainsi calculer la différence entre les deux.

Cette différence sera stockée dans une variable qui pourra, après diverses interprétations, nous informer sur la vitesse et l’intensité du mouvement, mais aussi sur la direction.

Pour bien comprendre, j’ai repris un exemple que j’ai un peu arrangé pour qu’on comprenne bien ce qu’il se passe (webcam requise) :

Les zones “rouges” sont donc ses zones captées par le comparateur, ce sont les zones de “différences” entre le flux A et le flux B.

Si vous n’avez pas de webcam, voici le résultat :
motion detection
Grâce à cela, on fait déjà un bon pas en avant et il nous suffira d’interpréter au mieux ses données pour les intégrer dans l’application avec les effets voulus.

Quelques soucis, cependant, sont à prévoir :

  • Dans le cas d’un webcam de mauvais qualité, où il y a beaucoup de “bruits”, le comparateur pensera qu’il y a tout le temps du mouvement, et s’emballera.
  • Dans le cas où l’utilisateur est dans un univers en mouvement ; comment différencier un mouvement de bras d’un autre mouvement (un rideau par le vent, un chat qui passe, un hochement de tête) ?

Comme toutes les techniques, chacune à ses limites, essayons cependant de les limiter un maximum !

Autre source

Classé dans : Programmation — Tags: , — Gauth @ 17/05/2010

1 Comment »

RSS feed for comments on this post. TrackBack URL

Leave a comment

Spam Protection by WP-SpamFree