Copied initial tools.
This commit is contained in:
46
scripts/draw_utils.py
Normal file
46
scripts/draw_utils.py
Normal file
@ -0,0 +1,46 @@
|
||||
import matplotlib.pyplot as plt
|
||||
import numpy as np
|
||||
|
||||
from skelda import utils_view
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
def show_poses2d(bodies, images, joint_names, title=""):
|
||||
num_imgs = len(images)
|
||||
rowbreak = int(num_imgs / 2.0 + 0.5)
|
||||
fig, axs = plt.subplots(2, rowbreak, figsize=(30, 20))
|
||||
fig.suptitle(title, fontsize=20)
|
||||
|
||||
if isinstance(bodies, np.ndarray):
|
||||
bodies = bodies.tolist()
|
||||
|
||||
# Draw skeletons into images
|
||||
for i, image in enumerate(images):
|
||||
colors = plt.cm.hsv(np.linspace(0, 1, len(bodies[i]), endpoint=False)).tolist()
|
||||
colors = [[int(c[0] * 255), int(c[1] * 255), int(c[2] * 255)] for c in colors]
|
||||
|
||||
for j, body in enumerate(bodies[i]):
|
||||
image = utils_view.draw_body_in_image(image, body, joint_names, colors[j])
|
||||
|
||||
# Rescale image range for plotting
|
||||
images = [img / 255.0 for img in images]
|
||||
|
||||
if rowbreak == 1:
|
||||
axs[0].imshow(images[0])
|
||||
if len(images) == 2:
|
||||
axs[1].imshow(images[1])
|
||||
else:
|
||||
# Optionally delete last empty plot
|
||||
fig.delaxes(axs[1])
|
||||
|
||||
else:
|
||||
for i in range(rowbreak):
|
||||
axs[0][i].imshow(images[i])
|
||||
if i + rowbreak < num_imgs:
|
||||
axs[1][i].imshow(images[i + rowbreak])
|
||||
else:
|
||||
# Optionally delete last empty plot
|
||||
fig.delaxes(axs[1][i])
|
||||
|
||||
return fig
|
||||
71
scripts/utils_2d_pose.py
Normal file
71
scripts/utils_2d_pose.py
Normal file
@ -0,0 +1,71 @@
|
||||
import os
|
||||
|
||||
import numpy as np
|
||||
from mmpose.apis import MMPoseInferencer
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
filepath = os.path.dirname(os.path.realpath(__file__)) + "/"
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
def load_model():
|
||||
print("Loading mmpose model ...")
|
||||
|
||||
model = MMPoseInferencer(
|
||||
pose2d="/mmpose/projects/rtmpose/rtmpose/body_2d_keypoint/rtmpose-l_8xb256-420e_coco-384x288.py",
|
||||
pose2d_weights="https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-body7_pt-body7_420e-384x288-3f5a1437_20230504.pth",
|
||||
det_model="/mmpose/projects/rtmpose/rtmdet/person/rtmdet_nano_320-8xb32_coco-person.py",
|
||||
det_weights="https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmdet_nano_8xb32-100e_coco-obj365-person-05d8511e.pth",
|
||||
det_cat_ids=[0],
|
||||
)
|
||||
|
||||
print("Loaded mmpose model")
|
||||
return model
|
||||
|
||||
|
||||
def load_wb_model():
|
||||
print("Loading mmpose whole body model ...")
|
||||
|
||||
model = MMPoseInferencer(
|
||||
pose2d="/mmpose/projects/rtmpose/rtmpose/wholebody_2d_keypoint/rtmpose-l_8xb32-270e_coco-wholebody-384x288.py",
|
||||
pose2d_weights="https://download.openmmlab.com/mmpose/v1/projects/rtmposev1/rtmpose-l_simcc-coco-wholebody_pt-aic-coco_270e-384x288-eaeb96c8_20230125.pth",
|
||||
det_model="/mmpose/projects/rtmpose/rtmdet/person/rtmdet_nano_320-8xb32_coco-person.py",
|
||||
det_weights="https://download.openmmlab.com/mmpose/v1/projects/rtmpose/rtmdet_nano_8xb32-100e_coco-obj365-person-05d8511e.pth",
|
||||
det_cat_ids=[0],
|
||||
)
|
||||
|
||||
print("Loaded mmpose model")
|
||||
return model
|
||||
|
||||
|
||||
# ==================================================================================================
|
||||
|
||||
|
||||
def get_2d_pose(model, imgs, num_joints=17):
|
||||
"""See: https://mmpose.readthedocs.io/en/latest/user_guides/inference.html#basic-usage"""
|
||||
|
||||
result_generator = model(imgs, show=False)
|
||||
new_poses = []
|
||||
for _ in range(len(imgs)):
|
||||
result = next(result_generator)
|
||||
|
||||
poses = []
|
||||
for i in range(len(result["predictions"][0])):
|
||||
kpts = result["predictions"][0][i]["keypoints"]
|
||||
scores = result["predictions"][0][i]["keypoint_scores"]
|
||||
|
||||
kpts = np.array(kpts)
|
||||
scores = np.array(scores).reshape(-1, 1)
|
||||
scores = np.clip(scores, 0, 1)
|
||||
pose = np.concatenate((kpts, scores), axis=-1)
|
||||
poses.append(pose)
|
||||
|
||||
if len(poses) == 0:
|
||||
poses.append(np.zeros([num_joints, 3]))
|
||||
|
||||
poses = np.array(poses)
|
||||
new_poses.append(poses)
|
||||
|
||||
return new_poses
|
||||
Reference in New Issue
Block a user