Spaces:
Runtime error
Runtime error
| import glob | |
| import os | |
| from PIL import Image | |
| import numpy as np | |
| from matplotlib import pyplot as plt | |
| from io import BytesIO | |
| def visualize_hand(all_joints, img, side=["right", "left"], n_avail_joints=21): | |
| # Define the connections between joints for drawing lines and their corresponding colors | |
| connections = [ | |
| ((0, 1), "red"), | |
| ((1, 2), "green"), | |
| ((2, 3), "blue"), | |
| ((3, 4), "purple"), | |
| ((0, 5), "orange"), | |
| ((5, 6), "pink"), | |
| ((6, 7), "brown"), | |
| ((7, 8), "cyan"), | |
| ((0, 9), "yellow"), | |
| ((9, 10), "magenta"), | |
| ((10, 11), "lime"), | |
| ((11, 12), "indigo"), | |
| ((0, 13), "olive"), | |
| ((13, 14), "teal"), | |
| ((14, 15), "navy"), | |
| ((15, 16), "gray"), | |
| ((0, 17), "lavender"), | |
| ((17, 18), "silver"), | |
| ((18, 19), "maroon"), | |
| ((19, 20), "fuchsia"), | |
| ] | |
| H, W, C = img.shape | |
| # Create a figure and axis | |
| plt.figure() | |
| ax = plt.gca() | |
| # Plot joints as points | |
| ax.imshow(img) | |
| start_is = [] | |
| if "right" in side: | |
| start_is.append(0) | |
| if "left" in side: | |
| start_is.append(21) | |
| for start_i in start_is: | |
| joints = all_joints[start_i : start_i + n_avail_joints] | |
| if len(joints) == 1: | |
| ax.scatter(joints[0][0], joints[0][1], color="red", s=10) | |
| else: | |
| for connection, color in connections[: len(joints) - 1]: | |
| joint1 = joints[connection[0]] | |
| joint2 = joints[connection[1]] | |
| ax.plot([joint1[0], joint2[0]], [joint1[1], joint2[1]], color=color, linewidth=4) | |
| ax.set_xlim([0, W]) | |
| ax.set_ylim([0, H]) | |
| ax.grid(False) | |
| ax.set_axis_off() | |
| ax.invert_yaxis() | |
| # plt.subplots_adjust(wspace=0.01) | |
| # plt.show() | |
| buf = BytesIO() | |
| plt.savefig(buf, format="png", bbox_inches="tight", pad_inches=0) | |
| plt.close() | |
| # Convert BytesIO object to numpy array | |
| buf.seek(0) | |
| img_pil = Image.open(buf) | |
| img_pil = img_pil.resize((W, H)) | |
| numpy_img = np.array(img_pil) | |
| return numpy_img | |
| '''put brush example at alpha channel''' | |
| # img_dir = "bad_hands" | |
| # masked_paths = sorted(glob.glob(os.path.join(img_dir, "*_mask.jpg"))) | |
| # for masked_pth in masked_paths: | |
| # img_path = masked_pth.replace("_mask.jpg", ".jpg") | |
| # assert os.path.exists(img_path), f"Image path {img_path} does not exist." | |
| # masked = np.array(Image.open(masked_pth)) | |
| # mask = (np.all(masked > 245, axis=-1)).astype(np.uint8)*128 + 64 | |
| # img = np.array(Image.open(img_path)) | |
| # composite = np.concatenate((img, mask[..., None]), axis=-1) | |
| # composite = Image.fromarray(composite) | |
| # composite.save(masked_pth.replace("_mask.jpg", "_composite.png")) | |
| # print(f"Saved composite image {masked_pth.replace('_mask.jpg', '_composite.png')}") | |
| '''visualize keypoint example''' | |
| # data_dir = "bad_hands" | |
| # kpts_paths = sorted(glob.glob(os.path.join(data_dir, "*.npy"))) | |
| # for kpts_pth in kpts_paths: | |
| # img_pth = kpts_pth.replace(".npy", ".jpg") | |
| # kpts = np.load(kpts_pth) | |
| # img = np.array(Image.open(img_pth)) | |
| # h, w = img.shape[:2] | |
| # kpts = kpts / np.array([256,256]) * np.array([w, h]) | |
| # kpts_vis = visualize_hand(kpts, img) | |
| # save_path = kpts_pth.replace(".npy", "_kpts.png") | |
| # kpts_vis = Image.fromarray(kpts_vis).save(save_path) | |
| # print(f"Saved {save_path}") |