Kinectで全身マウス
Kinectで全身を使ってマウスカーソルを動かせるようにしました。
日ごろパソコンばかりやっていて運動不足の人にお勧めかもwww
右手でカーソル移動、左手パンチでクリックです。
右手の移動量が大きいので全身を使わないとカーソル移動ができないという意味で全身ですw
OpenNIのサンプルNiUserTrackerを改変しました。
以下の関数を記述して実行していますっ
void BodyMouse(XnUserID player, XnSkeletonJoint eJoint1, XnSkeletonJoint eJoint2, XnSkeletonJoint eJoint3)
{
if (!g_UserGenerator.GetSkeletonCap().IsTracking(player))
{
printf("not tracked!\n");
return;
}
XnSkeletonJointPosition joint1,joint2,joint3;
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint1, joint1);
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint2, joint2);
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint3, joint3);
/*if (joint1.fConfidence < 0.5 || joint2.fConfidence < 0.5 || joint3.fConfidence < 0.5)
{
return;
}*/
XnPoint3D pt[3];
pt[0] = joint1.position;
pt[1] = joint2.position;
pt[2] = joint3.position;
g_DepthGenerator.ConvertRealWorldToProjective(3, pt, pt);
printf("%.3f\r",pt[1].Z-pt[2].Z);
SetCursorPos((int)pt[0].X*2,(int)pt[0].Y*2);
if(pt[1].Z-pt[2].Z>400){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
}else{
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}
Kinect楽しい^^x
この動画もそのうちうpしようと思っています。
とりあえず首、手首、足首、指以外の全身の間接位置を取得できるようになったので、間接角を算出してロボットのサーボに流しこめば
【V-Sido】Kinect+カメラでロボット用コクピットをつくってみた
http://www.nicovideo.jp/watch/sm13326942
みたいなことも簡単にできると思います。
日ごろパソコンばかりやっていて運動不足の人にお勧めかもwww
右手でカーソル移動、左手パンチでクリックです。
右手の移動量が大きいので全身を使わないとカーソル移動ができないという意味で全身ですw
OpenNIのサンプルNiUserTrackerを改変しました。
以下の関数を記述して実行していますっ
void BodyMouse(XnUserID player, XnSkeletonJoint eJoint1, XnSkeletonJoint eJoint2, XnSkeletonJoint eJoint3)
{
if (!g_UserGenerator.GetSkeletonCap().IsTracking(player))
{
printf("not tracked!\n");
return;
}
XnSkeletonJointPosition joint1,joint2,joint3;
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint1, joint1);
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint2, joint2);
g_UserGenerator.GetSkeletonCap().GetSkeletonJointPosition(player, eJoint3, joint3);
/*if (joint1.fConfidence < 0.5 || joint2.fConfidence < 0.5 || joint3.fConfidence < 0.5)
{
return;
}*/
XnPoint3D pt[3];
pt[0] = joint1.position;
pt[1] = joint2.position;
pt[2] = joint3.position;
g_DepthGenerator.ConvertRealWorldToProjective(3, pt, pt);
printf("%.3f\r",pt[1].Z-pt[2].Z);
SetCursorPos((int)pt[0].X*2,(int)pt[0].Y*2);
if(pt[1].Z-pt[2].Z>400){
mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0);
}else{
mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0);
}
}
Kinect楽しい^^x
この動画もそのうちうpしようと思っています。
とりあえず首、手首、足首、指以外の全身の間接位置を取得できるようになったので、間接角を算出してロボットのサーボに流しこめば
【V-Sido】Kinect+カメラでロボット用コクピットをつくってみた
http://www.nicovideo.jp/watch/sm13326942
みたいなことも簡単にできると思います。