fc2ブログ
        

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
みたいなことも簡単にできると思います。



にほんブログ村 その他趣味ブログ 趣味の工作へ にほんブログ村 その他趣味ブログ ビデオ撮影・編集へ

コメントの投稿

非公開コメント

プロフィール

回路師

Author:回路師
趣味がロボットと動画製作です。
便利な機械やあほなマシンの動画を投稿しています.

最新記事
最新コメント
カテゴリ
電子工作キット








月別アーカイブ
書籍






Twitter
リンク
RSSリンクの表示
ソーシャル

検索フォーム