Преобразование данных скелета Python (PyKinect) в точки (X,Y)

Это довольно простая проблема, но я новичок в Python и не могу этого сделать.

Я хочу преобразовать координаты данных скелета в Python (PyKinect) в точки (X,Y). Я знаю, что аналогичная задача может быть достигнута в C# (используя Microsoft.Kinect библиотеки), как приведенный ниже код:

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? Любые предложения будут по достоинству оценены.

1 ответ

Решение

Ты можешь использовать 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')
Другие вопросы по тегам