Skip to content

Commit b7dae08

Browse files
committed
fix(visualizer): painter algorithm was in reverse
1 parent 8deb645 commit b7dae08

File tree

8 files changed

+26
-25
lines changed

8 files changed

+26
-25
lines changed

src/js/pose_viewer/package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "pose-viewer",
3-
"version": "1.0.0",
3+
"version": "1.0.1",
44
"description": "Stencil Component Starter",
55
"homepage": "https://github.com/sign-language-processing/pose",
66
"main": "dist/index.cjs.js",

src/js/pose_viewer/src/components/pose-viewer/renderers/pose-renderer.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ export abstract class PoseRenderer {
5959

6060
return lines
6161
.filter(Boolean) // Remove invalid lines
62-
.sort((a, b) => a.z - b.z) // Sort lines by depth
62+
.sort((a, b) => b.z - a.z) // Sort lines by depth
6363
.map(({from, to, color}) => this.renderLimb(from, to, color));
6464
}
6565

src/python/pose_format/pose_visualizer.py

+18-17
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ def __init__(self, pose: Pose, thickness=None):
4040
except ImportError:
4141
raise ImportError("Please install OpenCV with: pip install opencv-python")
4242

43-
def _draw_frame(self, frame: ma.MaskedArray, frame_confidence: np.ndarray, img,
43+
def _draw_frame(self, frame: ma.MaskedArray,
44+
frame_confidence: np.ndarray, img,
4445
transparency: bool = False) -> np.ndarray:
4546
"""
4647
Draw frame of pose data of an image.
@@ -74,7 +75,6 @@ def _draw_frame(self, frame: ma.MaskedArray, frame_confidence: np.ndarray, img,
7475

7576
for person, person_confidence in zip(frame, frame_confidence):
7677
c = person_confidence.tolist()
77-
points = [p for p in person.tolist()]
7878
idx = 0
7979
for component in self.pose.header.components:
8080
colors = [np.array(c[::-1]) for c in component.colors]
@@ -91,7 +91,7 @@ def _point_color(p_i: int):
9191
# Collect Points
9292
for i, point_name in enumerate(component.points):
9393
if c[i + idx] > 0:
94-
center = points[i + idx]
94+
center = person[i + idx]
9595
draw_operations.append({
9696
'type': 'circle',
9797
'center': center,
@@ -103,8 +103,8 @@ def _point_color(p_i: int):
103103
})
104104

105105
if self.pose.header.is_bbox:
106-
point1 = points[0 + idx]
107-
point2 = points[1 + idx]
106+
point1 = person[0 + idx]
107+
point2 = person[1 + idx]
108108
color = tuple(np.mean([_point_color(0), _point_color(1)], axis=0))
109109

110110
draw_operations.append({
@@ -119,8 +119,8 @@ def _point_color(p_i: int):
119119
# Collect Limbs
120120
for (p1, p2) in component.limbs:
121121
if c[p1 + idx] > 0 and c[p2 + idx] > 0:
122-
point1 = points[p1 + idx]
123-
point2 = points[p2 + idx]
122+
point1 = person[p1 + idx]
123+
point2 = person[p2 + idx]
124124

125125
color = tuple(np.mean([_point_color(p1), _point_color(p2)], axis=0))
126126

@@ -136,27 +136,30 @@ def _point_color(p_i: int):
136136

137137
idx += len(component.points)
138138

139-
draw_operations = sorted(draw_operations, key=lambda op: op['z'])
139+
draw_operations = sorted(draw_operations, key=lambda op: op['z'], reverse=True)
140+
141+
def point_to_xy(point: ma.MaskedArray):
142+
return tuple([round(p) for p in point[:2]])
140143

141144
# Execute draw operations
142145
for op in draw_operations:
143146
if op['type'] == 'circle':
144147
self.cv2.circle(img=img,
145-
center=tuple(op['center'][:2]),
148+
center=point_to_xy(op['center']),
146149
radius=op['radius'],
147150
color=op['color'],
148151
thickness=op['thickness'],
149152
lineType=op['lineType'])
150153
elif op['type'] == 'rectangle':
151154
self.cv2.rectangle(img=img,
152-
pt1=tuple(op['pt1'][:2]),
153-
pt2=tuple(op['pt2'][:2]),
155+
pt1=point_to_xy(op['pt1']),
156+
pt2=point_to_xy(op['pt2']),
154157
color=op['color'],
155158
thickness=op['thickness'])
156159
elif op['type'] == 'line':
157160
self.cv2.line(img,
158-
pt1=tuple(op['pt1'][:2]),
159-
pt2=tuple(op['pt2'][:2]),
161+
pt1=point_to_xy(op['pt1']),
162+
pt2=point_to_xy(op['pt2']),
160163
color=op['color'],
161164
thickness=op['thickness'],
162165
lineType=op['lineType'])
@@ -184,12 +187,11 @@ def draw(self, background_color: Tuple[int, int, int] = (255, 255, 255), max_fra
184187
# ...
185188
if transparency:
186189
background_color += (0,)
187-
int_frames = np.array(np.around(self.pose.body.data.data), dtype="int32")
188190
background = np.full(
189191
(self.pose.header.dimensions.height, self.pose.header.dimensions.width, len(background_color)),
190192
fill_value=background_color,
191193
dtype="uint8")
192-
for frame, confidence in itertools.islice(zip(int_frames, self.pose.body.confidence), max_frames):
194+
for frame, confidence in itertools.islice(zip(self.pose.body.data, self.pose.body.confidence), max_frames):
193195
yield self._draw_frame(frame, confidence, img=background.copy(), transparency=transparency)
194196

195197
def draw_on_video(self, background_video, max_frames: int = None, blur=False):
@@ -471,9 +473,8 @@ def draw(self, background_color: int = 0, foreground_color: int = 255):
471473
np.ndarray
472474
frames with drawn pose
473475
"""
474-
int_frames = np.array(np.around(self.pose.body.data.data), dtype="int32")
475476
background = np.full((self.pose.header.dimensions.height, self.pose.header.dimensions.width),
476477
fill_value=background_color,
477478
dtype="uint8")
478-
for frame in int_frames:
479+
for frame in self.pose.body.data:
479480
yield self._draw_frame(frame, img=background.copy(), color=foreground_color)

src/python/pose_format/tensorflow/pose_representation_test.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
dimensions = PoseHeaderDimensions(width=0, height=0, depth=0)
1818
components = [OpenPose_Hand_Component("hand_left_keypoints_2d")]
19-
header: PoseHeader = PoseHeader(version=0.1, dimensions=dimensions, components=components)
19+
header: PoseHeader = PoseHeader(version=0.2, dimensions=dimensions, components=components)
2020

2121
representation = TensorflowPoseRepresentation(
2222
header=header,

src/python/pose_format/utils/generic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@ def normalize_hands_3d(pose: Pose, left_hand=True, right_hand=True):
109109

110110
def fake_pose(num_frames: int, fps=25, dims=2, components=OpenPose_Components):
111111
dimensions = PoseHeaderDimensions(width=1, height=1, depth=1)
112-
header = PoseHeader(version=0.1, dimensions=dimensions, components=components)
112+
header = PoseHeader(version=0.2, dimensions=dimensions, components=components)
113113

114114
total_points = header.total_points()
115115
data = np.random.randn(num_frames, 1, total_points, dims)

src/python/pose_format/utils/holistic.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -327,7 +327,7 @@ def load_holistic(frames: list,
327327
refine_face_landmarks = 'refine_face_landmarks' in additional_holistic_config and additional_holistic_config[
328328
'refine_face_landmarks']
329329
additional_face_points = 10 if refine_face_landmarks else 0
330-
header: PoseHeader = PoseHeader(version=0.1,
330+
header: PoseHeader = PoseHeader(version=0.2,
331331
dimensions=dimensions,
332332
components=holistic_components(pf, additional_face_points))
333333
body: NumPyPoseBody = process_holistic(frames, fps, width, height, kinect, progress, additional_face_points,
@@ -355,7 +355,7 @@ def formatted_holistic_pose(width: int, height: int, additional_face_points: int
355355
Formatted pose components
356356
"""
357357
dimensions = PoseHeaderDimensions(width=width, height=height, depth=1000)
358-
header = PoseHeader(version=0.1,
358+
header = PoseHeader(version=0.2,
359359
dimensions=dimensions,
360360
components=holistic_components("XYZC", additional_face_points))
361361
body = NumPyPoseBody(

src/python/pose_format/utils/openpose.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -250,7 +250,7 @@ def load_openpose(frames: OpenPoseFrames,
250250
"""
251251
dimensions = PoseHeaderDimensions(width=width, height=height, depth=depth)
252252

253-
header: PoseHeader = PoseHeader(version=0.1, dimensions=dimensions, components=OpenPose_Components)
253+
header: PoseHeader = PoseHeader(version=0.2, dimensions=dimensions, components=OpenPose_Components)
254254

255255
total_points = header.total_points()
256256

src/python/pose_format/utils/openpose_135.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,7 @@ def load_openpose_135_directory(*args, **kwargs) -> Pose:
128128

129129
if __name__ == "__main__":
130130
dimensions = PoseHeaderDimensions(width=512, height=512, depth=0)
131-
header = PoseHeader(version=0.1, dimensions=dimensions, components=OpenPose_Components)
131+
header = PoseHeader(version=0.2, dimensions=dimensions, components=OpenPose_Components)
132132

133133
with open(
134134
"/home/nlp/amit/sign-language/sign-language-datasets/sign_language_datasets/datasets/autsl/openpose_135.poseheader",

0 commit comments

Comments
 (0)