将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
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值