openpose输出格式(ouput)解释

最近笔者在使用openpose做姿态识别相关的项目
使用了python API,然后对于输出格式作一个分析

对于python api的识别中,openpose提供的例程输出有两种

    print("Body keypoints: \n" + str(datum.poseKeypoints))

    cv2.imshow("OpenPose 1.5.0 - Tutorial Python API", datum.cvOutputData)

其中datum.cvOutputData 是识别的姿态图片结果
而datum.poseKeypoints是Pose Output Format (BODY_25)
具体可以见 OpenPose Demo - Output
openpose输出格式(ouput)解释_第1张图片
datum.poseKeypoints 是一个 n x 25 x 3的矩阵,其中n为图片中识别到人的个数。25 x 3 是代表图上0~24 每个点在图像中 x,y轴的位置 以及置信分值(confidence score)

举例

对于如下图片cvOutputData
openpose输出格式(ouput)解释_第2张图片
得到的姿态数据是一个1x25x3的矩阵
对于矩阵进行绘图

import  numpy as np
import  cv2
import matplotlib.pyplot as plt
kp = np.load("./35.npy")
print(kp.shape)
print(kp)
#图片大小为480x466
tink = np.ones((480,466),dtype='float64')
tink = tink
print(tink.shape)
for i in range(kp.shape[0]):
    for j in range(kp.shape[1]):
        x = kp[i][j][0]
        y = kp[i][j][1]
        score =  kp[i][j][2]
        #color =  score
        color = 1
        tink[int(y)][int(x)] = 240 * color / 25
        tink[int(y)+1][int(x)] = 240 * color / 25
        tink[int(y)][int(x)+1] = 240 * color / 25
        tink[int(y)-1][int(x)] = 240 * color / 25
        tink[int(y)][int(x)-1] = 240 * color / 25
        tink[int(y) + 1][int(x)+1] = 240 * color / 25
        tink[int(y)-1][int(x) + 1] = 240 * color / 25
        tink[int(y) - 1][int(x)-1] = 240 * color / 25
        tink[int(y) + 1][int(x) - 1] = 240 * color / 25

plt.imshow(tink,cmap="gray")
plt.axis('off')
plt.show()

结果为
openpose输出格式(ouput)解释_第3张图片

:数据和代码已经上传到了我的github

参考:
OpenPose Demo - Output
Github 项目 - OpenPose 关键点输出格式

你可能感兴趣的:(DeepLearning)