智晨爱代码 2024-03-18 15:50 采纳率: 71.4%
浏览 2
已结题

YOLOv5Pose coco转化txt时出现问题

有一个疑问,我在使用此代码时会正常运行

img


但是在

img


并没有出现我想写进去的代码,求各位解答


def convert(size, box, kp):
    box[0] = round((box[0] + box[2] / 2.0) / (size[0]), 6)
    box[1] = round((box[1] + box[3] / 2.0) / (size[1]), 6)
    box[2] = round((box[2]) / (size[0]), 6)
    box[3] = round((box[3]) / (size[1]), 6)

    kp[0::3] = list(map(lambda x: round(x / (size[0]), 6), kp[0::3]))
    kp[1::3] = list(map(lambda x: round(x / size[1], 6), kp[1::3]))
    lr = ' '.join(str(i) for i in (box + kp))
    return lr


import os
import json
from tqdm import tqdm
import argparse

parser = argparse.ArgumentParser()
# 这里根据自己的json文件位置,换成自己的就行
parser.add_argument('--json_path',
                    default='/home/meng/Desktop/wjl-project/yolov5_pose-main/datasets/airport4_2/coco/coco/annotations/keypoints_val.json', type=str,
                    help="input: coco format(json)")
# 这里设置.txt文件保存位置
parser.add_argument('--save_path', default='/home/meng/Desktop//home/meng/Desktop/wjl-project/yolov5_pose-main/datasets/airport4_2/txt', type=str,
                    help="specify where to save the output dir of labels")
arg = parser.parse_args()

if __name__ == '__main__':

    json_file = arg.json_path  # COCO Object Instance 类型的标注
    ana_txt_save_path = arg.save_path  # 保存的路径

    data = json.load(open(json_file, 'r'))
    if not os.path.exists(ana_txt_save_path):
        os.makedirs(ana_txt_save_path)

    id_map = {}  # coco数据集的id不连续!重新映射一下再输出!
    with open(os.path.join(ana_txt_save_path, 'classes.txt'), 'w') as f:
        # 写入classes.txt
        for i, category in enumerate(data['categories']):
            f.write(f"{category['name']}\n")
            id_map[category['id']] = i
    print(id_map)
    # 这里需要根据自己的需要,更改写入图像相对路径的文件位置。
    list_file = open(os.path.join(ana_txt_save_path, 'val2017.txt'), 'w')
    for img in tqdm(data['images']):
        filename = img["file_name"]
        img_width = img["width"]
        img_height = img["height"]
        img_id = img["id"]
        head, tail = os.path.splitext(filename)
        ana_txt_name = head + ".txt"  # 对应的txt名字,与jpg一致
        f_txt = open(os.path.join(ana_txt_save_path, ana_txt_name), 'w')
        for ann in data['annotations']:
            if ann['image_id'] == img_id:
                l = convert((img_width, img_height), ann["bbox"], ann['keypoints'])

                # f_txt.write("%s %s %s %s %s\n" % (id_map[ann["category_id"]], box[0], box[1], box[2], box[3]))
                f_txt.write("%s %s \n" % (id_map[ann["category_id"]], l))

        f_txt.close()
        # 将图片的相对路径写入train2017或val2017的路径
        list_file.write('./coco/coco/val/%s.jpg\n' % (head))
    list_file.close()
  • 写回答

5条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-18 18:21
    关注

    【相关推荐】



    • 这篇文章讲的很详细,请看:yolo格式的数据转coco格式 (txt转coco)
    • 除此之外, 这篇博客: yolov3之数据集预处理中的 txt标签文件的说明 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

      获取到的数据集是这样的,需要转换为VOC格式,其实就是将txt转换为xml文件:
      在这里插入图片描述
      打开txt文件可以看到以下内容:

      1 0.4635416666666667 0.3016666666666667 0.39375 0.48333333333333334
      

      id为1:目标为 mask,
      该图片大小:w * h = 480 * 600

      0.4635416666666667:【中心点X的比例标注】,480 * 0.4635416666666667 = 222.5 pixel

      0.3016666666666667 :【中心点Y的比例标注】 600*0.3016666666666667 = 181.0 pixel

      0.39375: 【BOX宽比例标注】0.39375 * 480 = 189 pixel

      0.48333333333333334: 【BOX高比例标注】0.48333333333333334 * 600 = 290 pixel

      181 / 2 = 90.5
      290 / 2 =145

      xmin:222.5 - 90.5 = 132
      xmax:222.5 + 90.5 = 313
      ymin:189 - 145 = 44
      ymax:189 + 145 = 334


    如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(4条)

报告相同问题?

问题事件

  • 系统已结题 4月2日
  • 已采纳回答 3月25日
  • 创建了问题 3月18日

悬赏问题

  • ¥15 远程访问linux主机超时
  • ¥15 odoo17存货管理优势于中国国内该行业传统ERP或MES的详细解读和举例
  • ¥15 CPU卡指令整合指令数据都在图片上
  • ¥15 odoo17处理受托加工产品
  • ¥15 如何用MATLAB编码图三的积分
  • ¥15 圆孔衍射光强随孔径变化
  • ¥15 MacBook pro m3max上用vscode运行c语言没有反应
  • ¥15 ESP-PROG配置错误,ALL ONES
  • ¥15 结构功能耦合指标计算
  • ¥50 AI大模型精调(百度千帆、飞浆)