文章目录
- 1. Labelme安装
- 2. 激活labelme
- 3. 关键点和骨架设置
- 4. 代码可视化
1. Labelme安装
pip install labelme
2. 激活labelme
labelme
选择创建关键点
3. 关键点和骨架设置
4. 代码可视化
import json
import matplotlib.pyplot as plt
import numpy as np
import cv2
from tqdm import tqdm
from pycocotools import coco
paf = {"nose": 1,
"rightEar": 2,
"leftEar": 3,
"back": 4,
"ass": 5,
"rightLeg": 6,
"leftLeg": 7}
def show_skelenton(img, kpts, color=(255, 128, 128), thr=0.01):
kpts = np.array(kpts).reshape(-1, 3)
# skelenton = [[16, 14], [14, 12], [17, 15], [15, 13], [12, 13], [6, 12], [7, 13], [6, 7], [6, 8], [7, 9], [8, 10],
# [9, 11], [2, 3], [1, 2], [1, 3], [2, 4], [3, 5], [4, 6], [5, 7]]
skelenton = [[1, 2], [1, 3], [2, 3], [4, 2], [4, 3], [4, 5], [4, 6], [4, 7]]
for sk in skelenton:
pos1 = (int(kpts[sk[0] - 1, 0]), int(kpts[sk[0] - 1, 1]))
pos2 = (int(kpts[sk[1] - 1, 0]), int(kpts[sk[1] - 1, 1]))
if pos1[0]>0 and pos1[1] > 0 and pos2[0] > 0 and pos2[1] > 0 and kpts[sk[0] - 1, 2] > thr and kpts[sk[1] - 1, 0] > thr:
cv2.line(img, pos1, pos2, color, 2, 8)
return img
if __name__ == '__main__':
jsonPath = r"D:\2022\4\mouse_pose_v2\data\img00179.json"
imgPath = r"D:\2022\4\mouse_pose_v2\data\img00179.png"
img = cv2.imread(imgPath)
with open(jsonPath) as f:
data = json.load(f)
shapes = data["shapes"]
temp_keypoints = {"nose": [0, 0, 0],
"rightEar": [0, 0, 0],
"leftEar": [0, 0, 0],
"back": [0, 0, 0],
"ass": [0, 0, 0],
"rightLeg": [0, 0, 0],
"leftLeg": [0, 0, 0]}
for shape in shapes:
labelName = shape["label"]
sub_keypoint = shape["points"][0]
x = int(sub_keypoint[0])
y = int(sub_keypoint[1])
temp_keypoints[labelName] = [x, y, 2]
keypoints = []
for k, vs in temp_keypoints.items():
for v in vs:
keypoints.append(v)
img = show_skelenton(img, keypoints, color=(255, 0, 255))
plt.imshow(img)
plt.show()