• COCO格式json切分为labelme可识别json


    coco数据格式相关内容参考之前博客

    切分的关键在于将coco_json中的annotation信息转化为labelme中shape的坐标信息

    labelme中shape需要的是多边形的点坐标,存储格式为[[x1,y1], [x2,y2]......]

    1. import os
    2. import json
    3. import pycocotools.mask as mask_utils
    4. from pycocotools.coco import COCO
    5. import cv2
    6. json_path = ''
    7. # 读取json(这里重复读取了,懒得改)
    8. with open(json_path, 'r') as f:
    9. coco_data = json.load(f)
    10. coco = COCO(json_path)
    11. output_json = ''
    12. os.makdirs(output_json, exist_ok=True)
    13. for image_data in coco_data['images']:
    14. image_id = image_data['id']
    15. image_file_name = image_data['file_name']
    16. # 创建labelme的json数据结构,这里也可以读一个labelme的json直接替换
    17. labelme_data = {
    18. 'version': '4.5.7',
    19. 'flags':{},
    20. 'shapes':[],
    21. 'imagePath':image_file_name,
    22. 'imageData':None,
    23. 'imageHeight':image_data['height'],
    24. 'imageWidth':image_data['width']
    25. }
    26. # 查找当前图像的标签数据
    27. for annotation in coco_data['annotations']:
    28. if annotation['image_id'] == image_id:
    29. category_id = annotation['category_id']
    30. # 构建labelme多边形点
    31. rle = coco.annToRLE(annotation)
    32. mask = mask_utils.decode(rle)
    33. mask[mask == 1] = 255
    34. # mask轮廓
    35. contours, _ = cv2.findContours(mask, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)
    36. for contour in contours:
    37. if len(contour) < 3:
    38. continue
    39. seg_xy = [[int(x), int(y)] for x,y in contour.reshape(-1, 2)]
    40. # 创建labelme的shape结构
    41. shape = {
    42. 'label': str(category_id),
    43. 'points': seg_xy,
    44. 'group_id': None,
    45. 'shape_type': 'polygon',
    46. 'flags': {}
    47. }
    48. # 将shape添加到labelme结构中
    49. labelme_data['shapes'].append(shape)
    50. # 将labelme结构写入json文件中
    51. labelme_json_file = os.path.join(output_json, os.path.splitext(image_file_name)[0]+'.json')
    52. with open(labelme_json_file, 'w') as labelme_f:
    53. json.dump(labelme_data, labelme_f, indent=2)

  • 相关阅读:
    游戏服务器价格对比分析,2024高主频高性能服务器租用价格
    ubuntu下python安装wx包出错解决办法
    植物提取树脂HP-286
    人脸关键点COFW-68使用指南
    PEG聚乙二醇功能上转换荧光纳米颗粒
    99%健身人士的疑问:营养补充窗口真的很重要吗?
    直播岗位认知篇
    【Linux】调试工具gdb
    LINUX系统编程:基于环形队列和信号量的生产者消费者模型
    【sql】You can‘t specify target table for update in FROM clause
  • 原文地址:https://blog.csdn.net/hesongzefairy/article/details/103076037