COCO Annotator --> YOLO POSE (coco格式转yolo格式)

最近做人体姿态识别,通过COCO Annotator制作好数据集之后,要将器转化为yolo格式.这里附上转换代码.	
import os
import json

# 打开json文件并读取数据
with open('pose-4.json') as f:
    data = json.load(f)

# 输出读取的数据
images=data.get('images')
annotations=data.get("annotations")
print(images)
print(annotations)

#创建输出文件夹
# 文件夹名称
folder_name = 'output'

# 新建文件夹
if not os.path.exists(folder_name): # 判断文件夹是否存在
    os.mkdir(folder_name)           # 如果不存在则创建文件夹
    print(f'成功创建文件夹 {folder_name}!')
else:
    print(f'文件夹 {folder_name} 已存在!')

# 写入文件
imageslist=[]
for i in range(len(images)):
    file_name=images[i].get('file_name')[:-4]
    width=images[i].get('width')
    height=images[i].get('height')
    imageslist.append([file_name+'.txt',width,height])
keyp=[]
for i in range(len(annotations)):
    id=annotations[i].get('image_id')-1
    file_name=imageslist[id][0]
    width=imageslist[id][1]
    height=imageslist[id][2]
    content='0'
    flag1=0
    flag2=0
    bbox=annotations[i].get('bbox')
    x=bbox[0]+bbox[2]/2
    y=bbox[1]+bbox[3]/2
    w=bbox[2]
    h=bbox[3]
    for j in annotations[i].get('bbox'):
        if flag1==0:
            num=x/width
            num=format(num,'.6f')
            content+=" "+str(num)
        if flag1 == 1:
            num = y/ height
            num = format(num, '.6f')
            content += " " + str(num)
        if flag1 == 2:
            num = w/ width
            num = format(num, '.6f')
            content += " " + str(num)
        if flag1 == 3:
            num = h / height
            num = format(num, '.6f')
            content += " " + str(num)
        flag1+=1
    keyp.append([ annotations[i].get('keypoints'), annotations[i].get('image_id')])
    for k in annotations[i].get('keypoints'):

        if flag2 % 3 == 0:
            num = k / width
            num = format(num, '.6f')
            content += " " + str(num)
        elif  flag2 % 3 == 1:
            num = k / height
            num = format(num, '.6f')
            content += " " + str(num)
        elif flag2 % 3 == 2:
            num = k
            num = format(num, '.6f')
            content += " " + str(num)
        flag2+=1
    with open(f'output/{file_name}','a') as f:
        f.write(f'{content}\n')
print(imageslist)
print(keyp)

转换后的效果如图:
在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值