|
||||||||
|
||||||||
| This page is also available in English | ||||||||
| C'est quoi? | [cacher] |
Laserspotcam est un petit programme que j'ai écris pour pouvoir
contrôler xmms en pointant des
endroits prédéfinis sur le mur avec un petit pointeur laser.À l'aide d'une webcam, le logiciel surveille le mur continuellement pour la présence du point rouge. Lorsque le point rouge apparait à un des endroits prédéfinis, la commande appropriée est exécutée. |
| Images | [cacher] |
| Images par moi: Images par Brian Dahlem:
Si vous voulez me montrer votre installation, contactez moi. Si c'est vraiment "cool", je vais poster les images dans cette section, avec votre permission bien sur ;) |
| Code source | [cacher] |
Laserspotcam est conçu pour fonctionner sous Linux. l'API video4linux
et sdl sont utilisés. La license GPL s'applique à tout le
code source.
|
| Caméras supportés | [cacher] |
Voici une liste des caméras et/ou périphériques
de capture vidéo ayant étés testés
avec laserspotcam:
|
| Installation et configuration | [cacher] |
| 1: Compilation Il vous faut la librairie sdl. Pour compiler laserspotcam, tapez 'make'. 2: Démarrer laserspotcam Dans le répertoire où vous avez compilé laserspotcam, tapez: # ./laserspotcamPar défaut, /dev/video0 est utilisé. Si vous voulez utiliser une autre source vidéo, servez vous de l'option -d. Exemple: # ./laserspotcam -d /dev/video1Laserspotcam devrait ouvrir une fenêtre affichant les images provenant de la caméra. 3: Déterminer les coordonnés des zones Vous avez peut-être dessiné des boutons sur le mur, ou collé des feuilles de papier colorés, ou encore... Bon. Commencez par aligner votre caméra pour qu'elle voit tout les zones que vous voulez utiliser. Maintenant, notez les coordonnés de toutes les zones rectangulaires que vous avez en cliquant sur le coin supérieur gauche dabord, et ensuite sur le coin inférieur droit de la même zone. Comme vous remarquerez, à chaque clique dans la fenêtre, les coordonnés du clique sont donnés dans la console. 4: Création du fichier de configuration Le format du fichier de configuration est simple. Chaque définission de zone occupe une ligne, dans laquelle les valeurs sont séparés par des virgules. La premiè re valeur détermine le type de zone. Les types valides sont les suivants: 0: Zone normale. La commande est exécutée quand la zone se fait activer. 1: Zone de gauche à droite. La position du pointeur à l'intérieur de la zone se fait traduire de 0 à 100. Quand il est à gauche, c'est 0. À droite, c'est 100. Très utilse pour une barre de volume. 2: Zone de bas en haut. La position du pointeur à l'intérieur de la zone se fait traduire de 0 à 100. Quand il est en bas, c'est 0. En haut, c'est 100. Très utile pour une barre de volume. La deuxième valeur est une booléenne. Si elles est à 0, la zone ne pourra pas être réactivé sans éteindre le pointeur (C'était toujours ainsi avant la version 0.3). Si sa valeur est 1, la zone sera réactivée aussi environ à chaque seconde aussi longtemps que le pointeur restera à l'intérieur de celle-ci. Les deux valeurs suivantes correspondent au X et Y du coin supérieur gauche, les deux suivantes au X et Y du coin inférieur droit, et le reste de la ligne contient la commande shell à exécuter quand le pointeur laser entre dans cette zone. Voici un extrait de ma configuration: 0,0,174,111,242,164,xmms --play-pause 1,0,29,169,318,196,setmixer vol 0,1,0,0,50,50,echo -en "\\007"Dans le premier des deux exemples, la position du coin supérieur gauche est 174,111, la position du coin inférieur droit est 242,164 et la commande qui est exécutée est "xmms --play-pause". Le deuxième exemple implémente une barre de volume. La commande setmixer se fera rajouter une valeur de 0 à 100 comme argument. ex: "setmixer vol 55" Le troisième exemple démontre la fonction répétission. Avec cet exemple, si laserspotcam ne tourne pas en arrière plan, vous devriez entendre des bip à chaque fois que la zone se fait activer.
5: EssaisMaintenant que vous avez un fichier de configuration, essayez le en le spécifiant via la ligne de commande. exemple: # ./laserspotcam -vVr xmms.hsVous remplacerez bien sur xmms.hs par le nom de votre fichier de configuration. Rajoutez l'option -t si vous ne voulez pas que les commandes se fassent executer. Remarquez comment vos zones apparaissent par dessus l'image de la webcam maintenant. Lorsqu'un zone se fait activer, elle s'affiche en vert plutot qu'en rouge. 6: Démarrez laserspotcam en arrière plan et profitez-en! # ./laserspotcam xmms.hs -bL'option -b est responsable pour faire tourner l'application en arrière plan. Essayez -h pour plus d'options. |
| Algorithmes utilisés | [cacher] |
| Le logiciel reçoit continuellement des images de la caméra.
Tout d'abord, l'image est convertie en niveaux de gris. (en utilisant la luminance).
Ensuite, la moyenne des 8 dernières images est soustraite de l'image courante,
pour obtenir une nouvelle image contenant seulement les différences. Dans cette nouvelle image, chaque pixel représente la valeur d'augmentation de luminosité par rapport à la moyenne. Plus l'augmentation est grande, plus la couleur du pixel se rapproche du blanc (255). Il y a en général des petits changements répartis sur la surface complète de l'image à cause du bruit. Pour détecter la position du pointeur laser, il faut tenir compte des changements suffisamment grands. La valeur de chaque pixel est vérifiée. Si elle dépasse un certain niveau, le pixel se fait assigner la valeur 255. Si elle est inférieure au même niveau, le pixel se fait assigner la valeur 0. Après cette opération, l'image est en noir et blanc, et ne contient plus de bruit. Maintenant qu'on a une image facile à interprèter, il faut calculer le rectangle contenant tout les changements. Puisque le laser produit un petit cercle de changement, la taille du rectangle est vérifiée:
Anti-répétitions Pour éviter qu'une même commande soit executé plus qu'une fois à cause qu'on a laissé le pointeur trop longtemps dans la même zone, les stratégies suivantes sont utilisés:
Pourquoi la moyenne de 8 images? Cela permet de comparer les images qui arrive à une base plus stable, car cela éllimine les changements de courte durée (il faut 8 images pour qu'un nouvel objet apparaisse parfaitement). Cela permettra aussi dans le futur d'avoir des zones qui s'activent seulement après que le pointeur soit resté pendant un nombre minimum d'images. Sans la moyenne de 8 images, le pointeur ne serait pas détecté à la deuxième image car il n'y aurait plus de différences. |
Codé manuellement avec
|