1

これは非常に単純な問題ですが、私はPythonを初めて使用するため、それを達成できないようです。

Python(PyKinect)のスケルトンデータ座標をポイント(X、Y)に変換したいと思います。Microsoft.Kinect次のコードのように、C#(ライブラリを使用)でも同様のタスクを実行できることを知っています。

var p = new Point[6];
Point shoulderRight = new Point(), shoulderLeft = new Point();

foreach (Joint j in data.Joints)
{
    switch (j.ID)
    {
        case JointID.HandLeft:
            p[0] = new Point(j.Position.X, j.Position.Y);

            // ...

ただし、Python(PyKinectを使用)では、データオブジェクトを取得できます。

for index, data in enumerate(skeletons):
p2 = data.SkeletonPositions[JointId.wrist_left] #test left wrist joint data object
print ('p2', p2)

出力は次のとおりです。

('p2', <x=-0.5478253364562988, y=-0.5376561880111694, z=1.7154035568237305, w=1.0>)

Point(X,Y)しかし、私はそれをフォーマットに変換することができないようです。これにはNumPyまたは他の外部Pythonライブラリを使用する必要がありますか?どんな提案でも本当にありがたいです。

4

1 に答える 1

0

値を抽出するために使用できますregex。これが探しているものかどうかはわかりませんが、これを試してください。

import re

p2 = "<x=-0.5478253364562988, y=-0.5376561880111694, z=1.7154035568237305, w=1.0>"
p2 = re.findall("-?\d+.\d+",p2)
p2_xy = p2[0],p2[1]
print ("p2",p2_xy)

出力:

('ps', ('-0.5478253364562988', '-0.5376561880111694'))

または、よりクリーンなバージョンが必要な場合:

import re

p2 = "<x=-0.5478253364562988, y=-0.5376561880111694, z=1.7154035568237305, w=1.0>"
p2 = re.findall("-?\d+.\d+",p2)
print ("p2",p2[0],p2[1])

出力:

('p2', '-0.5478253364562988', '-0.5376561880111694')
于 2013-01-04T18:55:26.367 に答える