Ich möchte die Bewegungserfassungsdaten von Kinect 2 als BVH-Datei speichern. Ich habe Code für Kinect 1 gefunden, der hier zu finden ist . Ich ging den Code durch und fand einige Dinge, die ich nicht verstehen konnte. Zum Beispiel habe ich im erwähnten Code versucht zu verstehen, was genau das Skeleton- skel
Objekt ist, das sich an mehreren Stellen im Code befindet. Wenn nicht, gibt es eine bekannte Anwendung, um das beabsichtigte Ziel zu erreichen?
BEARBEITEN: Ich habe versucht, das Skeleton-Skel in Body-Skel zu ändern, was meiner Meinung nach das entsprechende Objekt für Kinect SDK 2.0 ist. Ich habe jedoch einen Fehler, wenn ich versuche, die Position des Körpers zu ermitteln:
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);
Beim Aufrufen der Funktion Position für das Körperskelett sind Fehler aufgetreten. Wie kann ich das X, Y, Z des Skeletts in SDK 2.0 abrufen? Ich habe versucht, die obigen drei Zeilen zu ändern:
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: Grundsätzlich habe ich es geschafft, die a bvh-Datei nach dem Kombinieren von bodyBasicsWPF und kinect2bvh zu speichern. Es scheint jedoch, dass das Skelett, das ich speichere, nicht effizient ist. Es gibt seltsame Bewegungen in den Ellbogen. Ich versuche zu verstehen, ob ich etwas in der Datei kinectSkeletonBVH.cp ändern muss . Genauer gesagt, was sind die Änderungen in der Ausrichtung der Gelenkachse für die Kinect 2-Version? Wie kann ich die folgende Zeile ändern: skel.BoneOrientations[JointType.ShoulderCenter].AbsoluteRotation.Quaternion;
Ich habe versucht, diese Zeile mit zu ändern skel.JointOrientations[JointType.ShoulderCenter].Orientation
. Habe ich recht? Ich verwende den folgenden Code, um die Verbindung zu BVHBone-Objekten hinzuzufügen:
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);
Ich kann nicht verstehen, wo im Code the axis for every Joint
berechnet wird.
quelle
Antworten:
Der Code, den Sie für Kinect 1.0 verwendet haben , um eine BVH- Datei zu erhalten, verwendet die Gelenkinformationen, um Knochenvektoren durch Lesen des Skeletts zu erstellen .
Quelle: Nguyên Lê Đặng - Kinect2BVH.V2
Mit Ausnahme von Kinect 2.0 wurde die Skeleton- Klasse durch die Body- Klasse ersetzt. Sie müssen sie daher ändern, um stattdessen mit einem Body umzugehen , und die Gelenke erhalten, indem Sie die unten angegebenen Schritte ausführen.
Quelle: Vangos Pterneas Blog - KINECT FOR WINDOWS VERSION 2: KÖRPERVERFOLGUNG
quelle