将coco格式转换为labelme格式

#[labelme的mask路径] [coco的json路径] [影像路径]
python zhuanhuan.py C:/Users/Desktop/testdata/fengetest/mask/ C:/Users/Desktop/testdata/fengetest/ C:/Users/Desktop/testdata/fengetest/image

# -*- coding: utf-8 -*-
import glob
import os
import cv2
import json
import io
import sys
args = sys.argv

print(" [Info]_coco to labelme",flush=True) 

labelme_path = args[1]
coco_json_path = args[2]
jpg_path = args[3]
i_path = 4
class_list = []
for i in range(len(args)) :
    if i_path < len(args): 
        class_list.append(args[i_path])
        i_path = i_path + 1     
coco = str(class_list)
'''
labelme_path='C:/Users/qiaomengyu/Desktop/testdata/fengetest/mask/'
coco_json_path = 'C:/Users/qiaomengyu/Desktop/testdata/fengetest/'
jpg_path='C:/Users/qiaomengyu/Desktop/testdata/fengetest/image'

coco=["ship", "sar_ship", "plane"]'''
label=dict()
for idx,item in enumerate(coco):
    label.update({idx:item})

coco_json=glob.glob(os.path.join(coco_json_path,"*.json"))[0]
file_json = io.open(coco_json,'r',encoding='utf-8')
m_json_data = file_json.read()
m_data = json.loads(m_json_data)
#m_type=m_data['type']
jishu = 0
jindu_int = 0
jindu_flag = 0

 
for item in m_data['images']:
    jindu_int = int((jishu/int(len(m_data['images'])))*100)
    if jindu_int > jindu_flag:
        print('[Percent]_'+str(jindu_int)+'%',flush=True)
        jindu_flag = jindu_int
    jishu = jishu +1
    flag=False
    m_images_file_name = item['file_name']
    (filename_path, m_filename) = os.path.split(m_images_file_name)
    (m_name, extension) = os.path.splitext(m_filename)
    m_image=cv2.imread(os.path.join(jpg_path,m_name+".jpg"))
    m_images_height = item['height']
    m_images_width = item['width']
    m_images_id = item['id']
    data = {}
    data['imagePath'] = m_filename
    data['flags'] = {}
    data['imageWidth'] = m_images_width
    data['imageHeight'] = m_images_height
    data['imageData'] = None
    data['version'] = "5.0.1"
    data["shapes"] = []
    for annit in m_data['annotations']:
        m_image_id=annit['image_id']
        m_category_id=annit['category_id']
        if m_image_id==m_images_id:
            flag = True
            for segitem in annit['segmentation']:
                points = []
                for idx in range(0,len(segitem),2):
                    x,y=segitem[idx],segitem[idx+1]
                    if str(x).isalpha() or str(y).isalpha():
                        flag = False
                        break
                    points.append([x,y])
                itemData = {'points': []}
                if len(points)==0:
                    flag = False
                    break
                itemData['points'].extend(points)
                itemData["flag"] = {}
                itemData["group_id"] = None
                itemData["shape_type"] = "polygon"
                itemData["label"] =label[m_category_id-1]
                data["shapes"].append(itemData)
    
    if flag:
        jsonName = ".".join([m_name, "json"])
        jpgName = ".".join([m_name, "jpg"])
        #print(labelme_path, jsonName)
        jsonPath = os.path.join(labelme_path, jsonName)
        jpgPath = os.path.join(labelme_path, jpgName)
        with open(jsonPath, "w") as f:
            json.dump(data, f)
        cv2.imwrite(jpgPath,m_image)
        #print("加载入文件完成...")
print('[Percent]_100%',flush=True)
  • 9
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
COCO数据集是一个广泛使用的计算机视觉数据集,其中包含了各种各样的物体类别和场景,是用于目标检测、图像分割和关键点检测等任务的重要资源。而LabelMe是一种常用的图像标注工具,可以用来为图像数据集生成语义标签。 要制作COCO数据集的labelme标注,首先我们需要将COCO数据集的图像导入到LabelMe中。在LabelMe中,我们可以手动创建标注框或者分割区域,并为其添加相应的类别标签。对于目标检测任务,我们需要使用矩形标注工具绘制物体的边界框,并为每个边界框添加相应的物体类别。而对于图像分割任务,我们则需要使用分割标注工具手动绘制每个物体的轮廓,并为其添加相应的语义标签。 完成标注后,LabelMe会自动将标注信息保存为JSON格式的文件,并与原始图像进行关联。这些JSON文件包含了图像的路径、尺寸信息以及每个标注框或分割区域的位置、宽度、高度等信息。此外,JSON文件还包含了标签类别和颜色编码等额外信息。 使用LabelMe标注COCO数据集的好处之一是它的图像可视化界面友好,并且可以灵活地绘制不同形状的标注区域。此外,LabelMe还支持多用户标注、标注数据的半自动导出等功能,方便我们进行标签标注和数据管理。 当我们完成使用LabelMe标注COCO数据集后,我们可以将生成的JSON文件换为COCO数据集所需的标注格式。通过分析和处理JSON文件中的标注信息,我们可以生成对应的物体边界框、分割区域等标签信息,并与图像数据一起构建COCO数据集,用于训练和评估各种计算机视觉任务的模型。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值