wizzseen's picture
Upload 948 files
8a6df40 verified
import numpy as np
from posenet.constants import *
def traverse_to_targ_keypoint(
edge_id, source_keypoint, target_keypoint_id, scores, offsets, output_stride, displacements
):
height = scores.shape[1]
width = scores.shape[2]
source_keypoint_indices = np.clip(
np.round(source_keypoint / output_stride), a_min=0, a_max=[height - 1, width - 1]).astype(np.int32)
displaced_point = source_keypoint + displacements[
edge_id, source_keypoint_indices[0], source_keypoint_indices[1]]
displaced_point_indices = np.clip(
np.round(displaced_point / output_stride), a_min=0, a_max=[height - 1, width - 1]).astype(np.int32)
score = scores[target_keypoint_id, displaced_point_indices[0], displaced_point_indices[1]]
image_coord = displaced_point_indices * output_stride + offsets[
target_keypoint_id, displaced_point_indices[0], displaced_point_indices[1]]
return score, image_coord
def decode_pose(
root_score, root_id, root_image_coord,
scores,
offsets,
output_stride,
displacements_fwd,
displacements_bwd
):
num_parts = scores.shape[0]
num_edges = len(PARENT_CHILD_TUPLES)
instance_keypoint_scores = np.zeros(num_parts)
instance_keypoint_coords = np.zeros((num_parts, 2))
instance_keypoint_scores[root_id] = root_score
instance_keypoint_coords[root_id] = root_image_coord
for edge in reversed(range(num_edges)):
target_keypoint_id, source_keypoint_id = PARENT_CHILD_TUPLES[edge]
if (instance_keypoint_scores[source_keypoint_id] > 0.0 and
instance_keypoint_scores[target_keypoint_id] == 0.0):
score, coords = traverse_to_targ_keypoint(
edge,
instance_keypoint_coords[source_keypoint_id],
target_keypoint_id,
scores, offsets, output_stride, displacements_bwd)
instance_keypoint_scores[target_keypoint_id] = score
instance_keypoint_coords[target_keypoint_id] = coords
for edge in range(num_edges):
source_keypoint_id, target_keypoint_id = PARENT_CHILD_TUPLES[edge]
if (instance_keypoint_scores[source_keypoint_id] > 0.0 and
instance_keypoint_scores[target_keypoint_id] == 0.0):
score, coords = traverse_to_targ_keypoint(
edge,
instance_keypoint_coords[source_keypoint_id],
target_keypoint_id,
scores, offsets, output_stride, displacements_fwd)
instance_keypoint_scores[target_keypoint_id] = score
instance_keypoint_coords[target_keypoint_id] = coords
return instance_keypoint_scores, instance_keypoint_coords