Je voudrais stocker les données de capture de mouvement de Kinect 2 sous forme de fichier BVH. J'ai trouvé le code qui le fait pour Kinect 1 qui peut être trouvé ici . J'ai parcouru le code et trouvé plusieurs choses que je ne pouvais pas comprendre. Par exemple, dans le code mentionné, j'ai essayé de comprendre ce qu'est exactement l' skel
objet Skeleton , trouvé à plusieurs endroits dans le code. Si ce n'est pas le cas, existe-t-il une application connue disponible pour atteindre l'objectif recherché?
EDIT: J'ai essayé de changer Skeleton skel en Body skel qui je pense est l'objet correspondant pour kinect SDK 2.0. Cependant, j'ai une erreur lorsque j'essaie d'obtenir la position du corps:
tempMotionVektor[0] = -Math.Round( skel.Position.X * 100,2);
tempMotionVektor[1] = Math.Round( skel.Position.Y * 100,2) + 120;
tempMotionVektor[2] = 300 - Math.Round( skel.Position.Z * 100,2);
J'ai eu des erreurs lors de l'appel de la fonction Position pour le skel Body. Comment puis-je récupérer les X, Y, Z du squelette dans sdk 2.0 ?? J'ai essayé de changer les trois lignes ci-dessus en:
tempMotionVektor[0] = -Math.Round(skel.Joints[0].Position.X * 100, 2);
tempMotionVektor[1] = Math.Round(skel.Joints[0].Position.Y * 100, 2) + 120;
tempMotionVektor[2] = 300 - Math.Round(skel.Joints[0].Position.Z * 100, 2);
EDIT: Fondamentalement, j'ai réussi à stocker le fichier bvh après avoir combiné bodyBasicsWPF et kinect2bvh. Cependant, il semble que le squelette que je stocke n'est pas efficace. Il y a d'étranges mouvements dans les coudes. J'essaie de comprendre si je dois changer quelque chose dans le fichier kinectSkeletonBVH.cp . Plus précisément, quels sont les changements d'orientation de l'axe des articulations pour la version kinect 2. Comment puis-je changer la ligne suivante: skel.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
J'ai essayé de changer cette ligne avec skel.JointOrientations[JointType.ShoulderCenter].Orientation
. Ai-je raison? J'utilise le code suivant pour ajouter le joint aux objets BVHBone:
BVHBone hipCenter = new BVHBone(null, JointType.SpineBase.ToString(), 6, TransAxis.None, true);
BVHBone hipCenter2 = new BVHBone(hipCenter, "HipCenter2", 3, TransAxis.Y, false);
BVHBone spine = new BVHBone(hipCenter2, JointType.SpineMid.ToString(), 3, TransAxis.Y, true);
BVHBone shoulderCenter = new BVHBone(spine, JointType.SpineShoulder.ToString(), 3, TransAxis.Y, true);
BVHBone collarLeft = new BVHBone(shoulderCenter, "CollarLeft", 3, TransAxis.X, false);
BVHBone shoulderLeft = new BVHBone(collarLeft, JointType.ShoulderLeft.ToString(), 3, TransAxis.X, true);
BVHBone elbowLeft = new BVHBone(shoulderLeft, JointType.ElbowLeft.ToString(), 3, TransAxis.X, true);
BVHBone wristLeft = new BVHBone(elbowLeft, JointType.WristLeft.ToString(), 3, TransAxis.X, true);
BVHBone handLeft = new BVHBone(wristLeft, JointType.HandLeft.ToString(), 0, TransAxis.X, true);
BVHBone neck = new BVHBone(shoulderCenter, "Neck", 3, TransAxis.Y, false);
BVHBone head = new BVHBone(neck, JointType.Head.ToString(), 3, TransAxis.Y, true);
BVHBone headtop = new BVHBone(head, "Headtop", 0, TransAxis.None, false);
Je ne comprends pas où le code the axis for every Joint
est calculé.