[R] Un "Kinect" en Autoit O_O
Règles du forum
- Merci de consulter la section "Règles du forum" et plus particulièrement "Règles et Mentions Légales du site autoitscript.fr" avant d'écrire un message.
[R] Un "Kinect" en Autoit O_O
Ma question est simple: Peut on réussir à élaborer, en AutoIt, un programme qui permet de guider sa souris (ou autre) grâce à sa webcam?
Hardu hein!!??
J'ai déjà fais plusieurs tentatives avec des GetPixelColor et un laser rouge devant la webcam mais l’inconvénient c'est qu'il faut impérativement que la fenêtre de la webcam soit ouverte sur le bureau et cela limite donc les action envisageables...
TOUTES LES IDÉES SONT LES BIENVENUES!!!!
Merci d'avance!!
Hardu hein!!??
J'ai déjà fais plusieurs tentatives avec des GetPixelColor et un laser rouge devant la webcam mais l’inconvénient c'est qu'il faut impérativement que la fenêtre de la webcam soit ouverte sur le bureau et cela limite donc les action envisageables...
TOUTES LES IDÉES SONT LES BIENVENUES!!!!
Merci d'avance!!
Modifié en dernier par B0B le dim. 19 févr. 2012 10:53, modifié 1 fois.
- TT22
- Membre émérite
- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Un "Kinect" en Autoit O_O
Un truc comme ça : http://www.accessoweb.com/HeadMouse-2-C ... a4662.html ?
Cordialement,
TT22
TT22
Re: [..] Un "Kinect" en Autoit O_O
Voilà!! (C'est en essayant ce logiciel que j'ai eu l'idée! ^^)
Mais je ne suis pas aussi ambitieux!!
Je pensait plus a un truck ou je pourrais commander à mon pc depuis mon canapé (ouuuuu le gros feignant!!!! => OUI, ET FIER DE L’ETRE!!! ), et c'est pour cette raison que la détection d'un unique pixel comme celui de la lumière produite par un laser serait plus approprié!
Mais je ne suis pas aussi ambitieux!!
Je pensait plus a un truck ou je pourrais commander à mon pc depuis mon canapé (ouuuuu le gros feignant!!!! => OUI, ET FIER DE L’ETRE!!! ), et c'est pour cette raison que la détection d'un unique pixel comme celui de la lumière produite par un laser serait plus approprié!
- TT22
- Membre émérite
- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Un "Kinect" en Autoit O_O
Ok, tout d'abord, laisse moi te dire bonne chance
Sinon, pour récupérer l'image de la webcam, tu pourras peut-être trouver ton bonheur ici : http://autoitscript.fr/forum/viewtopic.php?f=3&t=8488
Et pour ton histoire de pixel, je pense qu'il faudra utiliser GDIPlus...
Sinon, pour récupérer l'image de la webcam, tu pourras peut-être trouver ton bonheur ici : http://autoitscript.fr/forum/viewtopic.php?f=3&t=8488
Et pour ton histoire de pixel, je pense qu'il faudra utiliser GDIPlus...
Cordialement,
TT22
TT22
- Tlem
- Site Admin
- Messages : 11773
- Enregistré le : ven. 20 juil. 2007 21:00
- Localisation : Bordeaux
- Status : Hors ligne
Re: [..] Un "Kinect" en Autoit O_O
Il existe déjà plusieurs solutions pour cela :B0B a écrit :commander à mon pc depuis mon canapé
- Le moins cher sera une rallonge USB pour votre clavier ou alors le clavier sans fil avec pavé tactile par exemple.
- La télécommande infra-rouge ou RF.
- Pour les plus fortuné : la tablette ou le téléphone tactile (avec teamviewer par exemple).
- Le Kinect pour PC.
et les autre solutions plus ou moins onéreuses (que je n'ai pas cité) qui existe ou qui sont sur le point d'émerger.
Thierry
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Rechercher sur le forum ----- Les règles du forum
Le "ça ne marche pas" est une conséquence commune découlant de beaucoup trop de raisons potentielles ...
Une idée ne peut pas appartenir à quelqu'un. (Albert Jacquard) tiré du documentaire "Copié n'est pas volé".
Re: [..] Un "Kinect" en Autoit O_O
C'est clair que même si je pense que c'est techniquement possible, c'est extrêmement compliqué et long, à mon avis. Surtout que je doute que les webcams apprécient les lasers rouges.
Il existe beaucoup de solutions plus adaptées :
- Kinect pour PC
- Smartphone Android/iOS/WinMobile ou WinPhone (Team Viewer, Remote Desktop, Ignition ...)
- Rallonge
- Autre langage
Donc je suis assez d'accord avec Tlem, même si l'idée était sympa, AutoIt n'est pas adapté, je le crains.
Il existe beaucoup de solutions plus adaptées :
- Kinect pour PC
- Smartphone Android/iOS/WinMobile ou WinPhone (Team Viewer, Remote Desktop, Ignition ...)
- Rallonge
- Autre langage
Donc je suis assez d'accord avec Tlem, même si l'idée était sympa, AutoIt n'est pas adapté, je le crains.
Re: [..] Un "Kinect" en Autoit O_O
Snif...
Je clos donc le sujet...
Mais j'y arriverai un jour!!!!
Je clos donc le sujet...
Mais j'y arriverai un jour!!!!
- TT22
- Membre émérite
- Messages : 1566
- Enregistré le : lun. 18 avr. 2011 15:21
- Localisation : La Quatrième Dimension
- Status : Hors ligne
Re: [..] Un "Kinect" en Autoit O_O
Bonne chance, mais si tu arrive à le faire, dis le nousB0B a écrit :Mais j'y arriverai un jour!!!!
Cordialement,
TT22
TT22
Re: [R] Un "Kinect" en Autoit O_O
J'apporte ma touche personnelle ayant plus ou moins les mêmes vices que l'auteur du sujet, j'ai moi-même élaboré un quelque-chose pour effectuer quelques actions sur mon ordi à distance (Depuis mon lit en fait, je suis un littéraire qui aime la musique, mais j'ai cassé mon lecteur portable... Alors je fais avec les moyens du bord, bref !)
J'ai détourné un de mes appareils (Mon casque sans fil) wi-fi, bluetooth ou quoi que ce soit qu'il utilise qui envoie et réceptionne des données et dispose de boutons, puis de faire une sorte de "man in the middle"
En gros, sniffer tout ce que reçoit le casque et effectuer des actions en conséquence.
De mon côté, quand j'appuie sur le bouton pour monter le son et celui pour baisser le son en même temps, mon script éteint l'ordinateur.
Et même soyons fou, si le casque est (par exemple) équipé d'un micro, pourquoi pas une mini reconnaissance vocale ? Criez fort, il montera le son
J'ai utilisé ce code pour trouver les ID des boutons de mon casque :
Et celui-ci pour exécuter les actions
J'espère ne pas avoir été trop long pour un truc aussi simple.
Que vive la fainéantise, salut !
J'ai détourné un de mes appareils (Mon casque sans fil) wi-fi, bluetooth ou quoi que ce soit qu'il utilise qui envoie et réceptionne des données et dispose de boutons, puis de faire une sorte de "man in the middle"
En gros, sniffer tout ce que reçoit le casque et effectuer des actions en conséquence.
De mon côté, quand j'appuie sur le bouton pour monter le son et celui pour baisser le son en même temps, mon script éteint l'ordinateur.
Et même soyons fou, si le casque est (par exemple) équipé d'un micro, pourquoi pas une mini reconnaissance vocale ? Criez fort, il montera le son
J'ai utilisé ce code pour trouver les ID des boutons de mon casque :
Code : Tout sélectionner
#Include <Misc.au3>
$d = 0
$hex = ""
MsgBox(0, "Titre", "Prêt ?")
While 1
$hex = Hex($d)
If _IsPressed($hex) Then
MsgBox(0, "Titre", "L'ID du bouton équivaut à "&$hex&".")
Exit
EndIf
$d = $d+1
WEnd
Code : Tout sélectionner
#Include <Misc.au3>
$hkey = InputBox("Titre", "Bouton à écouter 1")
$hkey2 = InputBox("Titre", "Bouton à écouter 2")
While 1
Sleep(200)
If _IsPressed($hkey) AND _IsPressed($hkey2) Then
Beep(300, 3000) ;Me prévient que la commande a été bien prise en compte
Sleep(7000) ;Me donne le temps d'éteindre mon casque (La batterie, tout ça, vous savez)
Shutdown(64)
EndIf
WEnd
Que vive la fainéantise, salut !
Re: [R] Un "Kinect" en Autoit O_O
Désolé du up !
Mais quelqu'un pourrait expliquer comment Yarillo a réussi à faire ça ?
Je l'ai mp , mais sa dernirèe visite date du Lun 05 Nov 2012 23:04 :/
Si quelqu'un peut m'aiguiller
Cordialement ,
Mais quelqu'un pourrait expliquer comment Yarillo a réussi à faire ça ?
Je l'ai mp , mais sa dernirèe visite date du Lun 05 Nov 2012 23:04 :/
Si quelqu'un peut m'aiguiller
Cordialement ,
« En mathématiques, “évident” est le mot le plus dangereux. »
-
- Niveau 1
- Messages : 9
- Enregistré le : sam. 30 juil. 2016 23:27
- Status : Hors ligne
Re: [R] Un "Kinect" en Autoit O_O
Bonjour !
Le sujet est vieux mais je sais comment récupérer les données de la Kinect (v1). Au cas où cela intéresserait toujours quelqu'un, je donne l'idée de base, ensuite il faut bidouiller avec les données pour manipuler la souris selon la taille de l'écran et de votre bras...
Tout d'abord il faut installer kinect SDK beta 2 (64 bits ou 32 selon l'OS), brancher la kinect avec l'adaptateur pour pc puis utiliser Glovepie 0.45.
Dans l'editeur Glovepie :
Dans le script Autoit :
Le sujet est vieux mais je sais comment récupérer les données de la Kinect (v1). Au cas où cela intéresserait toujours quelqu'un, je donne l'idée de base, ensuite il faut bidouiller avec les données pour manipuler la souris selon la taille de l'écran et de votre bras...
Tout d'abord il faut installer kinect SDK beta 2 (64 bits ou 32 selon l'OS), brancher la kinect avec l'adaptateur pour pc puis utiliser Glovepie 0.45.
Dans l'editeur Glovepie :
Code : Tout sélectionner
//taches a faire au moment du lancement du programme :
if starting then
//fps du script (car glovepie est un programme qui execute les scripts infiniment en boucle)
pie.framerate=60
//variable string pour voir quand les données kinect sont mises a jour
var.t2=""
endif
//variable string qui récupére les données de la kinect que vous voulez :
var.t=""
//on sépare chaque donnée par un espace vide ou autre délimiteur
//exemple les main gauche/droite par rapport aux épaules gauche/droite en x, y (hauteur) et z (profondeur) en mm :
var.t+=removeunits(player.left_arm_x in mm)+" "+removeunits(player.left_arm_y in mm)+" "+removeunits(player.left_arm_forward in mm)+" "
var.t+=removeunits(player.right_arm_x in mm)+" "+removeunits(player.right_arm_y in mm)+" "+removeunits(player.right_arm_forward in mm)+" "
//pour indiquer que toutes les données sont écrites dans le clipboard on ajoute # a la fin de la chaine :
var.t+="#"
//Pour envoyer les données a autoit on passe par le clipboard via la dll d'AutoItX3
//on écrit les données dans le clipboard seulement quand les données sont mises a jour (la kinect étant à 30 fps) et ainsi eviter de saturer le clipboard inutilement entre deux :
if var.t!=var.t2 then AutoItX3.dll.AU3_ClipPut(str(var.t))
var.t2=var.t
// touche V pour activer/désactiver l'affichage du skeleton
if released(v) then
cam.pos = [0,0,-5]
cam.BgColour = 0x0020A0
cam.vFov = 47 degrees
cam.pitch = var.tilt degrees
obj0.size = [0.3,0.07,0.1]
obj0.pos = [0,0,0]
obj0.colour = [0,0,0]
obj1.size = [0.25,0.3,0.3]
obj1.pos = player1.head.pos
obj2.CubeSize = 10cm
obj2.pos = player1.neck.pos
obj3.CubeSize = 10cm
obj3.pos = player1.LeftHand.pos
obj3.colour = [1,0,0]
obj4.CubeSize = 10cm
obj4.pos = player1.RightHand.pos
obj4.colour = [0,1,1]
obj5.CubeSize = 10cm
obj5.pos = player1.LeftShoulder.pos
obj5.colour = [0.5,0,0]
obj6.CubeSize = 10cm
obj6.pos = player1.RightShoulder.pos
obj6.colour = [0,0.5,0.5]
obj7.CubeSize = 10cm
obj7.pos = player1.LeftHip.pos
obj7.colour = [0.5,0,0]
obj8.CubeSize = 10cm
obj8.pos = player1.RightHip.pos
obj8.colour = [0,0.5,0.5]
obj9.CubeSize = 10cm
obj9.pos = player1.LeftKnee.pos
obj9.colour = [0.5,0,0]
obj10.CubeSize = 10cm
obj10.pos = player1.RightKnee.pos
obj10.colour = [0,0.5,0.5]
obj11.CubeSize = 10cm
obj11.pos = player1.LeftFoot.pos
obj11.colour = [0.8,0,0]
obj12.CubeSize = 10cm
obj12.pos = player1.RightFoot.pos
obj12.colour = [0,0.8,0.8]
obj13.CubeSize = 10cm
obj13.pos = player1.LeftElbow.pos
obj13.colour = [0.5,0,0]
obj14.CubeSize = 10cm
obj14.pos = player1.RightElbow.pos
obj14.colour = [0,0.5,0.5]
obj15.CubeSize = 10cm
obj15.pos = player1.torso.pos
obj16.CubeSize = 10cm
obj16.pos = player1.hipcenter.pos
obj17.CubeSize = 10cm
obj17.pos = player1.LeftWrist.pos
obj17.colour = [0.5,0,0]
obj18.CubeSize = 10cm
obj18.pos = player1.RightWrist.pos
obj18.colour = [0,0.5,0.5]
obj19.CubeSize = 10cm
obj19.pos = player1.LeftAnkle.pos
obj19.colour = [0.5,0,0]
obj20.CubeSize = 10cm
obj20.pos = player1.RightAnkle.pos
obj20.colour = [0,0.5,0.5]
obj21.Size = [50cm,1cm,50cm]
obj21.pos = player1.floor.point
obj21.RotMat = player1.floor.rotmat
obj21.colour = [0,0.7,0]
endif
//pour changer l'angle de la kinect (-27 a 27), taper l'angle dans le champ texte qui apparait a coté du bouton Stop lorsque le programme est mis en route puis touche tab pour valider :
var.d=debug
if released(Tab) and abs(round(val(var.d)))<28 then kinect.SmoothPitch=round(val(var.d))
//touche e pour arrêter le script et quitter Glovepie
if e then exitPIE
//touche s pour arrêter le script
if s then exitprogram
//Glovepie ne répondant pas aux keystrokes d'Autoit, il faut passer par le titre de la fenêtre active (une GUI d'autoit par exemple) pour communiquer des données ou commandes, ici pour arreter le script et quitter glovepie :
if window.text="exitpie" then exitPIE
Dans le script Autoit :
;~ on definit l'array qui récupére les données de la kinect
dim $kinect[0]
;~ on peut éventuellement créer une GUI visible ou non pour communiquer des données ou commandes a glovepie :
$gui=guicreate("")
while 1
;~ on lit le clipboard et le stocke dans la variable $cp
$cp=clipget()
;~ on regarde si toutes les données de la kinect sont récupérées grace au délimiteur #
if stringinstr($cp,"#")>0 then
;~ on stocke chaque donnée dans un élément de l'array kinect (ici sans le compteur du nombre de données dans le 1er élément)
$kinect=stringsplit($cp," ",2)
#cs
Nous avons donc d'apres notre exemple de script Glovepie :
$kinect[0]=main gauche x
$kinect[1]=main gauche y
$kinect[2]=main gauche z
$kinect[3]=main droite x
$kinect[4]=main droite y
$kinect[5]=main droite z
#ce
;~ il reste a faire le script qui utilise les données !
#cs
pour bouger la souris quelque chose du genre (en limitant, par exemple, l'étendue du bras en x et y à 60cm et en utilisant @DesktopWidth=largeur de l'écran et @DesktopHeight=hauteur de l'écran) :
if $kinect[3]>-300 and $kinect[3]<300 and $kinect[4]>-300 and $kinect[4]<300 then MouseMove(($kinect[3]+300)*@DesktopWidth/600,(300-$kinect[4])*@DesktopHeight/600,0)
pour gérer les clic on peut utiliser le bras gauche (ici clic gauche si on met le bras gauche devant, clic droit si le bras gauche est sur le côté gauche et double clic s'il est levé).
On doit utiliser des variables pour ne cliquer ou double cliquer qu'une seule fois quand le bras fait les actions :
if $kinect[2]>400 and $leftclic=0 then
mouseclick("left")
$leftclic=1
elseif $leftclic=1 and $kinect[2]<400 then
$leftclic=0
endif
if $kinect[0]<-400 and $rightclic=0 then
mouseclick("right")
$rightclic=1
elseif $rightclic=1 and $kinect[0]>-400 then
$rightclic=0
endif
if $kinect[1]>400 and $dbclic=0 then
mouseclick("left")
sleep(20)
mouseclick("left")
$dbclic=1
elseif $dbclic=1 and $kinect[1]<400 then
$dbclic=0
endif
éventuellement un geste pour sortir de la boucle while, ici les 2 bras en arrière :
if $kinect[2]<-300 and $kinect[5]<-300 then exitloop
#ce
endif
Wend
;~ eventuellement changer le titre de la GUI (qui communique a glovepie des commandes) pour quitter glovepie.
;~ Ensuite, on rend la GUI active
;~ et on attend 2 secondes de plus, avant que le script d'autoit s'arrête, afin d'être sûr que glovepie récupère la commande :
WinSetTitle ($gui,"","exitpie")
winactivate($gui)
sleep(2000)
dim $kinect[0]
;~ on peut éventuellement créer une GUI visible ou non pour communiquer des données ou commandes a glovepie :
$gui=guicreate("")
while 1
;~ on lit le clipboard et le stocke dans la variable $cp
$cp=clipget()
;~ on regarde si toutes les données de la kinect sont récupérées grace au délimiteur #
if stringinstr($cp,"#")>0 then
;~ on stocke chaque donnée dans un élément de l'array kinect (ici sans le compteur du nombre de données dans le 1er élément)
$kinect=stringsplit($cp," ",2)
#cs
Nous avons donc d'apres notre exemple de script Glovepie :
$kinect[0]=main gauche x
$kinect[1]=main gauche y
$kinect[2]=main gauche z
$kinect[3]=main droite x
$kinect[4]=main droite y
$kinect[5]=main droite z
#ce
;~ il reste a faire le script qui utilise les données !
#cs
pour bouger la souris quelque chose du genre (en limitant, par exemple, l'étendue du bras en x et y à 60cm et en utilisant @DesktopWidth=largeur de l'écran et @DesktopHeight=hauteur de l'écran) :
if $kinect[3]>-300 and $kinect[3]<300 and $kinect[4]>-300 and $kinect[4]<300 then MouseMove(($kinect[3]+300)*@DesktopWidth/600,(300-$kinect[4])*@DesktopHeight/600,0)
pour gérer les clic on peut utiliser le bras gauche (ici clic gauche si on met le bras gauche devant, clic droit si le bras gauche est sur le côté gauche et double clic s'il est levé).
On doit utiliser des variables pour ne cliquer ou double cliquer qu'une seule fois quand le bras fait les actions :
if $kinect[2]>400 and $leftclic=0 then
mouseclick("left")
$leftclic=1
elseif $leftclic=1 and $kinect[2]<400 then
$leftclic=0
endif
if $kinect[0]<-400 and $rightclic=0 then
mouseclick("right")
$rightclic=1
elseif $rightclic=1 and $kinect[0]>-400 then
$rightclic=0
endif
if $kinect[1]>400 and $dbclic=0 then
mouseclick("left")
sleep(20)
mouseclick("left")
$dbclic=1
elseif $dbclic=1 and $kinect[1]<400 then
$dbclic=0
endif
éventuellement un geste pour sortir de la boucle while, ici les 2 bras en arrière :
if $kinect[2]<-300 and $kinect[5]<-300 then exitloop
#ce
endif
Wend
;~ eventuellement changer le titre de la GUI (qui communique a glovepie des commandes) pour quitter glovepie.
;~ Ensuite, on rend la GUI active
;~ et on attend 2 secondes de plus, avant que le script d'autoit s'arrête, afin d'être sûr que glovepie récupère la commande :
WinSetTitle ($gui,"","exitpie")
winactivate($gui)
sleep(2000)