yolo格式数据集的展示
如上图,coco keypoints数据集,yolopose算法使用的是其yolo格式,第一位0代表类别,第二到五位代表box锚框的xywh格式,后面的51位代表kpts姿态信息
思路
- 将box框的xywh格式转化为xyxy格式并乘上相对应的宽高
- 将kpts姿态数据乘对应的宽高
- 姿态数据中,每3位有一个2,这个是官方coco annotator标注软件会自动插入的值,在yolopose算法detect检测中,该值被定义为每一个关键点的置信度conf
import torch
from utils.plots import colors, plot_one_box
import cv2
from utils.general import xywh2xyxy
if __name__ == '__main__':
# 将yolo格式的标注好的图片展示出来
im0 = cv2.imread("data/images/000000000785.jpg")
f = open("data/txt/000000000785.txt", "r")
det_list = []
for line in f.readlines():
# line = line.strip('\n') #去掉列表中每一个元素的换行符
det_list = list(map(float, line.split(' ')))
print(det_list)
f.close()
# 前5个参数为 0类型 xyxy
xywh = det_list[1:5]
# 转化为 xyxy格式
gn = torch.tensor(im0.shape)[[1, 0, 1, 0]]
xyxy = (xywh2xyxy(torch.tensor(xywh).view(1, 4)) * gn).view(-1).tolist()
print(xyxy)
# 后51个参数为 姿态数据 官方的是百分比表示法,需要乘宽高
kpts = det_list[5:]
# 640
weight = im0.shape[1]
# 425
height = im0.shape[0]
for index, i in enumerate(kpts):
if index % 3 == 0:
kpts[index] = kpts[index] * weight
if index % 3 == 1:
kpts[index] = kpts[index] * height
if index % 3 == 2:
kpts[index] = 0.9
# 画框打点
plot_one_box(xyxy, im0, label="person", color=colors(0, True), line_thickness=3,
kpt_label=True, kpts=kpts, steps=3, orig_shape=im0.shape[:2])
cv2.imshow("demo", im0)
cv2.waitKey(0) # 1 millisecond