修正进一步分析def pose_tracking(pose_results, max_tracks=2, thre=30):

 引入

首先打印

print(tracking_inputs[0])

[array([[342.40894   , 154.20203   ,   0.97111136],
       [345.17505   , 148.6698    ,   0.9786353 ],
       [336.8767    , 148.6698    ,   0.99641836],
       [342.40894   , 151.43591   ,   0.52131176],
       [317.51385   , 154.20203   ,   0.9787817 ],
       [345.17505   , 184.62933   ,   0.93771386],
       [306.4494    , 192.92767   ,   0.89647466],
       [350.70728   , 226.1211    ,   0.8948419 ],
       [306.4494    , 239.95169   ,   0.919309  ],
       [359.0056    , 253.78226   ,   0.78252614],
       [311.98163   , 281.44345   ,   0.91721576],
       [353.4734    , 270.37897   ,   0.8073273 ],
       [328.57837   , 275.91122   ,   0.8430999 ],
       [361.77173   , 325.70132   ,   0.864455  ],
       [317.51385   , 331.23355   ,   0.84500694],
       [370.07013   , 369.9592    ,   0.9084923 ],
       [314.74774   , 381.02365   ,   0.8946589 ]], dtype=float32), array([[454.69446   , 139.52599   ,   0.95032537],
       [460.21484   , 134.0056    ,   0.96989125],
       [449.17407   , 134.0056    ,   0.96363837],
       [471.2556    , 134.0056    ,   0.9709029 ],
       [443.65363   , 136.7658    ,   0.94065225],
       [482.29645   , 172.64842   ,   0.9206746 ],
       [429.85266   , 169.88823   ,   0.9209612 ],
       [490.57703   , 216.81163   ,   0.8657709 ],
       [418.81183   , 214.05144   ,   0.89462984],
       [485.05664   , 252.69423   ,   0.8833917 ],
       [418.81183   , 252.69423   ,   0.8926666 ],
       [468.49548   , 258.21466   ,   0.83541924],
       [435.37305   , 258.21466   ,   0.8284161 ],
       [462.97504   , 316.17883   ,   0.89494336],
       [432.61285   , 316.17883   ,   0.87429345],
       [462.97504   , 363.1023    ,   0.8947954 ],
       [429.85266   , 365.8625    ,   0.9234746 ]], dtype=float32)]

 

也就是说想要看一下poses是长什么样子,其实就是tracking_inputs[0]、tracking_inputs[1]、tracking_inputs[2]、tracking_inputs[3]、tracking_inputs[4]、tracking_inputs[5]、...、tracking_inputs[71]

而idx是0、1、2、3、4、5、...、71

第一轮外循环

if len(poses) == 0:

其实就是if len(tracking_inputs[0]) == 0:

发现len(tracking_inputs[0])是2,也就是说if条件不成立,所以不执行continue

 继续执行if num_joints is None:

发现if条件成立,因为num_joints初始化为None,于是执行num_joints = poses[0].shape[0]

于是num_joints=17

继续执行track_proposals = [t for t in tracks if t['data'][-1][0] > idx - thre]

由于tracks初始化为空列表

所以track_proposals也是空列表

继续执行n, m = len(track_proposals), len(poses)

n=0,m=2

继续执行scores = np.zeros((0, 2))

发现scores是个空列表

继续执行

 for i in range(0):
            for j in range(2):
                scores[i][j] = dist_ske(track_proposals[i]['data'][-1][1], poses[j])

什么也不做,继续往下执行

 row, col = linear_sum_assignment(scores)

继续执行

  for r, c in zip(row, col):
            track_proposals[r]['data'].append((idx, poses[c]))

什么也不做,继续往下执行

 if 2 > 0:
            for j in range(2):
                if j not in col:

 

if j not in col:条件满足

于是执行

                    num_tracks += 1

于是num_tracks=1
                    new_track = dict(data=[])
                    new_track['track_id'] = num_tracks


                    new_track['data'] = [(idx, poses[j])]
                    tracks.append(new_track)

 

接下来来j = 1

继续执行下面

if j not in col:
                    num_tracks += 1
                    new_track = dict(data=[])
                    new_track['track_id'] = num_tracks
                    new_track['data'] = [(idx, poses[j])]
                    tracks.append(new_track)

发现num_tracks = 2

输出结果如下

[{'data': [(0, array([[342.40894   , 154.20203   ,   0.97111136],
       [345.17505   , 148.6698    ,   0.9786353 ],
       [336.8767    , 148.6698    ,   0.99641836],
       [342.40894   , 151.43591   ,   0.52131176],
       [317.51385   , 154.20203   ,   0.9787817 ],
       [345.17505   , 184.62933   ,   0.93771386],
       [306.4494    , 192.92767   ,   0.89647466],
       [350.70728   , 226.1211    ,   0.8948419 ],
       [306.4494    , 239.95169   ,   0.919309  ],
       [359.0056    , 253.78226   ,   0.78252614],
       [311.98163   , 281.44345   ,   0.91721576],
       [353.4734    , 270.37897   ,   0.8073273 ],
       [328.57837   , 275.91122   ,   0.8430999 ],
       [361.77173   , 325.70132   ,   0.864455  ],
       [317.51385   , 331.23355   ,   0.84500694],
       [370.07013   , 369.9592    ,   0.9084923 ],
       [314.74774   , 381.02365   ,   0.8946589 ]], dtype=float32))], 'track_id': 1}, {'data': [(0, array([[454.69446   , 139.52599   ,   0.95032537],
       [460.21484   , 134.0056    ,   0.96989125],
       [449.17407   , 134.0056    ,   0.96363837],
       [471.2556    , 134.0056    ,   0.9709029 ],
       [443.65363   , 136.7658    ,   0.94065225],
       [482.29645   , 172.64842   ,   0.9206746 ],
       [429.85266   , 169.88823   ,   0.9209612 ],
       [490.57703   , 216.81163   ,   0.8657709 ],
       [418.81183   , 214.05144   ,   0.89462984],
       [485.05664   , 252.69423   ,   0.8833917 ],
       [418.81183   , 252.69423   ,   0.8926666 ],
       [468.49548   , 258.21466   ,   0.83541924],
       [435.37305   , 258.21466   ,   0.8284161 ],
       [462.97504   , 316.17883   ,   0.89494336],
       [432.61285   , 316.17883   ,   0.87429345],
       [462.97504   , 363.1023    ,   0.8947954 ],
       [429.85266   , 365.8625    ,   0.9234746 ]], dtype=float32))], 'track_id': 2}]

接下来就可以第二轮外循环

 第二轮外循环

 for idx, poses in enumerate(pose_results):
        if len(poses) == 0:
            continue
        if num_joints is None:
            num_joints = poses[0].shape[0]

这个时候idx是1

而poses = tracking_inputs[1]

于是

if len(poses) == 0:

其实就是if len(tracking_inputs[1]) == 0:

发现len(tracking_inputs[0])是2,也就是说if条件不成立,所以不执行continue

 

 继续执行if num_joints is None:

发现if条件不成立,因为num_joints第一轮外循环为17,于是不执行num_joints = poses[0].shape[0]

接下来继续执行

track_proposals = [t for t in tracks if t['data'][-1][0] > idx - thre]

[{'data': [(0, array([[342.40894   , 154.20203   ,   0.97111136],
       [345.17505   , 148.6698    ,   0.9786353 ],
       [336.8767    , 148.6698    ,   0.99641836],
       [342.40894   , 151.43591   ,   0.52131176],
       [317.51385   , 154.20203   ,   0.9787817 ],
       [345.17505   , 184.62933   ,   0.93771386],
       [306.4494    , 192.92767   ,   0.89647466],
       [350.70728   , 226.1211    ,   0.8948419 ],
       [306.4494    , 239.95169   ,   0.919309  ],
       [359.0056    , 253.78226   ,   0.78252614],
       [311.98163   , 281.44345   ,   0.91721576],
       [353.4734    , 270.37897   ,   0.8073273 ],
       [328.57837   , 275.91122   ,   0.8430999 ],
       [361.77173   , 325.70132   ,   0.864455  ],
       [317.51385   , 331.23355   ,   0.84500694],
       [370.07013   , 369.9592    ,   0.9084923 ],
       [314.74774   , 381.02365   ,   0.8946589 ]], dtype=float32))], 'track_id': 1}, {'data': [(0, array([[454.69446   , 139.52599   ,   0.95032537],
       [460.21484   , 134.0056    ,   0.96989125],
       [449.17407   , 134.0056    ,   0.96363837],
       [471.2556    , 134.0056    ,   0.9709029 ],
       [443.65363   , 136.7658    ,   0.94065225],
       [482.29645   , 172.64842   ,   0.9206746 ],
       [429.85266   , 169.88823   ,   0.9209612 ],
       [490.57703   , 216.81163   ,   0.8657709 ],
       [418.81183   , 214.05144   ,   0.89462984],
       [485.05664   , 252.69423   ,   0.8833917 ],
       [418.81183   , 252.69423   ,   0.8926666 ],
       [468.49548   , 258.21466   ,   0.83541924],
       [435.37305   , 258.21466   ,   0.8284161 ],
       [462.97504   , 316.17883   ,   0.89494336],
       [432.61285   , 316.17883   ,   0.87429345],
       [462.97504   , 363.1023    ,   0.8947954 ],
       [429.85266   , 365.8625    ,   0.9234746 ]], dtype=float32))], 'track_id': 2}]

接下来继续执行

 n, m = len(track_proposals), len(poses)

于是n=2,m=2


       

scores = np.zeros((2, 2))

 接下来继续执行

for i in range(2):
            for j in range(2):
                scores[i][j] = dist_ske(track_proposals[i]['data'][-1][1], poses[j])

首先i=0

j=0

scores[0][0] = dist_ske(track_proposals[0]['data'][-1][1], poses[0])

所以只需关注点放在dist_ske函数如何实现的,以及参数是什么

print(ske1)

[[342.40894    154.20203      0.97111136]
 [345.17505    148.6698       0.9786353 ]
 [336.8767     148.6698       0.99641836]
 [342.40894    151.43591      0.52131176]
 [317.51385    154.20203      0.9787817 ]
 [345.17505    184.62933      0.93771386]
 [306.4494     192.92767      0.89647466]
 [350.70728    226.1211       0.8948419 ]
 [306.4494     239.95169      0.919309  ]
 [359.0056     253.78226      0.78252614]
 [311.98163    281.44345      0.91721576]
 [353.4734     270.37897      0.8073273 ]
 [328.57837    275.91122      0.8430999 ]
 [361.77173    325.70132      0.864455  ]
 [317.51385    331.23355      0.84500694]
 [370.07013    369.9592       0.9084923 ]
 [314.74774    381.02365      0.8946589 ]]

print(ske2)

[[342.64056    155.07503      0.9443979 ]
 [345.39398    149.56816      0.96674407]
 [337.13367    149.56816      0.98169655]
 [342.64056    149.56816      0.5606005 ]
 [317.8595     155.07503      0.9198357 ]
 [345.39398    185.36296      0.9472581 ]
 [306.84576    193.6233       0.9009862 ]
 [350.90088    226.66469      0.90572715]
 [304.0923     240.4319       0.9163513 ]
 [359.16125    256.95258      0.7961553 ]
 [312.3526     281.73364      0.9330902 ]
 [353.65436    267.96637      0.80932206]
 [328.8733     273.47327      0.8447343 ]
 [361.91467    325.78876      0.8606094 ]
 [317.8595     331.29565      0.8590398 ]
 [370.17505    369.84393      0.90640527]
 [315.10608    380.85773      0.890874  ]]

def dist_ske(ske1, ske2):
    dist = np.linalg.norm(ske1[:, :2] - ske2[:, :2], axis=1) * 2
    diff = np.abs(ske1[:, 2] - ske2[:, 2])
    return np.sum(np.maximum(dist, diff))

print(a)

[[342.40894 154.20203]
 [345.17505 148.6698 ]
 [336.8767  148.6698 ]
 [342.40894 151.43591]
 [317.51385 154.20203]
 [345.17505 184.62933]
 [306.4494  192.92767]
 [350.70728 226.1211 ]
 [306.4494  239.95169]
 [359.0056  253.78226]
 [311.98163 281.44345]
 [353.4734  270.37897]
 [328.57837 275.91122]
 [361.77173 325.70132]
 [317.51385 331.23355]
 [370.07013 369.9592 ]
 [314.74774 381.02365]]

print(b)

[[342.64056 155.07503]
 [345.39398 149.56816]
 [337.13367 149.56816]
 [342.64056 149.56816]
 [317.8595  155.07503]
 [345.39398 185.36296]
 [306.84576 193.6233 ]
 [350.90088 226.66469]
 [304.0923  240.4319 ]
 [359.16125 256.95258]
 [312.3526  281.73364]
 [353.65436 267.96637]
 [328.8733  273.47327]
 [361.91467 325.78876]
 [317.8595  331.29565]
 [370.17505 369.84393]
 [315.10608 380.85773]]

print(a - b)

[[-0.23162842 -0.8730011 ]
 [-0.2189331  -0.8983612 ]
 [-0.256958   -0.8983612 ]
 [-0.23162842  1.8677521 ]
 [-0.3456421  -0.8730011 ]
 [-0.2189331  -0.7336273 ]
 [-0.3963623  -0.69563293]
 [-0.19360352 -0.54359436]
 [ 2.3571167  -0.48020935]
 [-0.15563965 -3.1703186 ]
 [-0.37097168 -0.29019165]
 [-0.18096924  2.4125977 ]
 [-0.29492188  2.4379578 ]
 [-0.14294434 -0.08743286]
 [-0.3456421  -0.06210327]
 [-0.10491943  0.11526489]
 [-0.3583374   0.16592407]]

[1.8064138  1.8493075  1.8687752  3.7641199  1.8778704  1.5311966
 1.6012598  1.1540835  4.8110704  6.3482733  0.9419791  4.838751
 4.911463   0.33512735 0.70235395 0.3117312  0.78977585]

[1.8064138  1.8493075  1.8687752  3.7641199  1.8778704  1.5311966
 1.6012598  1.1540835  4.8110704  6.3482733  0.9419791  4.838751
 4.911463   0.33512735 0.70235395 0.3117312  0.78977585]
[0.02671343 0.01189125 0.01472181 0.03928876 0.05894601 0.00954425
 0.00451154 0.01088524 0.0029577  0.01362914 0.01587445 0.00199479
 0.00163442 0.00384557 0.01403284 0.00208706 0.00378489]

pyskl/demo/demo_skeleton.py at main · kennymckormick/pyskl · GitHub

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值