Détection de mouvements a la webcam
J'ai essayé plusieurs méthodes plus ou moins concluantes pour la détection de mouvement à la webcam. Les deux principaux problèmes que j'ai rencontré sont la dépendance du résultat par rapport à la qualité de la webcam (rafraîchissement, définition, bruit/nuisances) et de la zone d'action (peu performant au centre de l'écran du aux moments du corps qui font parasite).
Une des méthodes qui fonctionne le mieux est de comparer deux images capturées successives, et de faire la différences. Avec quelques traitement supplémentaires sur l'image on arrive avec un plutôt bon résultat, mais toujours avec les défauts/problèmes cités ci-dessus.
Si l'on ne recherche pas un effet de tracking, j'utilise une autre méthode qui consiste à comparer les couleurs d'une zone. Je m'explique : imaginons que l'on veuille faire une action de clic sur un bouton (ou une zone) avec la main par webcam, on calcule la couleur moyenne de cette zone avec un refresh fréquent (enterFrame ou Timer). Au survol de cette zone avec la main, la couleur moyenne va donc être différente, et on peux donc actionner le click.
Sur cette démo il y a plusieurs zones clickables assez grandes. Il faut donc trouver un bon compromis dans la tolérance des différence de couleurs pour ne pas avoir une zone trop sensible aux mouvements parasites mais assez pour percevoir les mouvements volontaires :
Ici le résultat est plutôt bon car les zones sont en dehors des zones de mouvements (genre au milieu c'est plus compliqué car il y a plus de mouvements parasitaires du corps, visage, etc..).
A terme, cette méthode doit me permettre d'avoir une navigation kinect-like, comme le menu de la console avec les vignettes. Suite au prochain épisode…
Si vous utilisez une méthode encore différente, n'hésitez pas à m'en faire part!




