0
点赞
收藏
分享

微信扫一扫

基于Labelme的动物骨架绘制


文章目录

  • ​​1. Labelme安装​​
  • ​​2. 激活labelme​​
  • ​​3. 关键点和骨架设置​​
  • ​​4. 代码可视化​​

1. Labelme安装

pip install labelme

2. 激活labelme

labelme

基于Labelme的动物骨架绘制_json
选择创建关键点
基于Labelme的动物骨架绘制_计算机视觉_02

基于Labelme的动物骨架绘制_计算机视觉_03

3. 关键点和骨架设置

基于Labelme的动物骨架绘制_json_04

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()


举报

相关推荐

0 条评论