Saya ingin menyimpan data motion capture dari Kinect 2 sebagai file BVH. Saya menemukan kode yang melakukannya untuk Kinect 1 yang dapat ditemukan di sini . Saya membaca kode dan menemukan beberapa hal yang tidak dapat saya mengerti. Misalnya, dalam kode yang disebutkan saya sudah mencoba memahami apa sebenarnya skel
objek Kerangka , yang ditemukan di beberapa tempat dalam kode, sebenarnya. Jika tidak, apakah ada aplikasi yang dikenal tersedia untuk mencapai yang dimaksud?
EDIT: Saya mencoba mengubah Skeleton skel menjadi Body skel yang menurut saya adalah objek koresponden untuk kinect SDK 2.0. Namun saya mendapat kesalahan saat mencoba mendapatkan posisi tubuh:
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);
Saya mendapatkan kesalahan saat memanggil fungsi Position for the Body skel. Bagaimana saya bisa mengambil X, Y, Z dari kerangka di SDK 2.0 ?? Saya mencoba mengubah tiga baris di atas menjadi:
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: Pada dasarnya saya berhasil menyimpan file bvh setelah menggabungkan bodyBasicsWPF dan kinect2bvh. Namun, tampaknya kerangka yang saya simpan tidak efisien. Ada gerakan aneh di siku. Saya mencoba memahami jika saya harus mengubah sesuatu di file kinectSkeletonBVH.cp . Lebih khusus, apa saja perubahan dalam orientasi sumbu sendi untuk versi kinect 2. Bagaimana saya bisa mengubah baris berikut: skel.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
Saya mencoba mengubah baris itu dengan skel.JointOrientations[JointType.ShoulderCenter].Orientation
. Apakah saya benar? Saya menggunakan kode berikut untuk menambahkan sambungan ke objek 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);
Saya tidak bisa mengerti di mana di dalam kode the axis for every Joint
dihitung.
sumber
Jawaban:
Kode yang Anda gunakan untuk Kinect 1.0 untuk mendapatkan file BVH menggunakan informasi sambungan untuk membuat vektor tulang dengan membaca Skeleton .
Sumber: Nguyên Lê Đặng - Kinect2BVH.V2
Kecuali di Kinect 2.0 , kelas Skeleton telah digantikan oleh kelas Body , jadi Anda perlu mengubahnya untuk berurusan dengan Body , dan dapatkan sambungan dengan mengikuti langkah-langkah yang dikutip di bawah ini.
Sumber: Vangos Pterneas Blog - KINECT FOR WINDOWS VERSION 2: PELACAKAN TUBUH
sumber