2016-07-05 12 views
2

私はkinectデバイスを使って手ジェスチャーアプリケーションを開発しています。ここでは、X、Y、Zの座標でジェスチャーをチェックしています。キネクトのスケルトンのXYZ座標の性質は何ですか

特定のジェスチャーのスケルトンの性質を知りたい。私はジェスチャーが手押しであるかどうかをチェックしています。

private handpush() 
{ 

bool MovedFront = false; 
float refDistance = 0.2F; 


SkeletonPoint refPos = SkeletonHistory[0].Joints[JointType.ShoulderCenter].Position; 
SkeletonPoint startPos = SkeletonHistory[0].Joints[JointType.HandRight].Position; 

//printing all intial cordinates 

Console.WriteLine(" ShoulderCenter[0].Z = " + refPos.Z); 

Console.WriteLine(" HandRight[0].X = " + startPos.X); 
Console.WriteLine(" HandRight[0].Y = " + startPos.Y); 
Console.WriteLine(" HandRight[0].Z = " + startPos.Z); 


    for (int i = 20; i < SkeletonHistory.Count; i++) 
    { 
      Console.WriteLine(" ShoulderCenter[i].Z = " + SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z); 
      Console.WriteLine(" HandRight[i].X = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.X); 
      Console.WriteLine(" HandRight[i].Y = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Y); 
      Console.WriteLine(" HandRight[i].Z = " + SkeletonHistory[i].Joints[JointType.HandRight].Position.Z); 


      if (!(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y < SkeletonHistory[i].Joints[JointType.Head].Position.Y && 
        Math.Abs(SkeletonHistory[i].Joints[JointType.ShoulderCenter].Position.Z - refPos.Z) < 0.05F && 
        Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.Y - startPos.Y) < 0.1F && 
        Math.Abs(SkeletonHistory[i].Joints[JointType.HandRight].Position.X - startPos.X) < 0.1F)) 
      { 
       Console.WriteLine("CheckHandPush breaking !!"); 
       break; 
      } 

      if (SkeletonHistory[i].Joints[JointType.HandRight].Position.Z <= (startPos.Z - refDistance)) 
      { 
       Console.WriteLine("CheckHandPush sucess"); 
       bMovedFront = true; 
       temp_SkeletonHistory.Clear(); 
      } 
    } 

    return MovedFront; 
} 

しかし、私は次のようにintial値を取得しています:

出力:Z軸が値を値を増減する必要がありますので

ShoulderCenter[0].Z = 1.246491 
HandRight[0].X = 0.1519185 
HandRight[0].Y = -0.2328865 
HandRight[0].Z = 1.014945 

ShoulderCenter[i].Z = 1.248788 
HandRight[i].X = 0.1397971 
HandRight[i].Y = -0.2452036 
HandRight[i].Z = 1.054223 

----- 
ShoulderCenter[0].Z = 1.26865 
HandRight[0].X = 0.1545139 
HandRight[0].Y = -0.3375102 
HandRight[0].Z = 1.057466 

ShoulderCenter[i].Z = 1.25049 
HandRight[i].X = 0.09602752 
HandRight[i].Y = -0.283217 
HandRight[i].Z = 1.150237 


--- 

ShoulderCenter[0].Z = 1.243356 
HandRight[0].X = 0.1406149 
HandRight[0].Y = -0.2458241 
HandRight[0].Z = 1.065399 

ShoulderCenter[i].Z = 1.250542 
HandRight[i].X = 0.1392216 
HandRight[i].Y = -0.2418006 
HandRight[i].Z = 1.046706 

は、私は、私の手をプッシュするのですか? Z座標の長さがキネクトデバイスまたは人体から始まっていることを意味しますか?

この条件は手押しの場合は問題ありませんか?助言がありますか ?サンプルコードを入手できますか?

x、y、z座標のチェックには便利なリンクがあります。

私は座標チェックと混同しています。

答えて

3

これらの値は、(リンク先のページの素敵な写真があります)のKinect v2の「Camera Space」でメートルにあります。

カメラ空間はKinectので使用される3D座標系を参照します。次のように座標系が定義される:

  • 原点(X = 0、Y = 0、Z = 0)のKinect
  • にIRセンサーの中心に位置するXセンサの左
  • に成長します
  • Yが育つ
  • Zセンサーが
  • 1単位= 1メートル
に直面している方向に出て成長する(この方向は、センサの傾きに基づいていることに注意)

したがって、カメラの前に立って手を押してZ値を下げる必要があります。
ユーザーの位置&の方向に基づいて座標を取得するには、座標を自転して翻訳する必要があります。

+0

Henningに感謝します。私は調整システムについて知っています。今私はハンドプッシュのためのアルゴリズムを書くことができます – user2986042

関連する問題