标注精灵标注的多边形json格式转化为labelme的多边形json格式

       由于标注精灵不需安装,而labelme安装有些麻烦,刚开始标注多边形的数据时使用标注精灵,但是这破软件使用不友好,标注后修改极为麻烦,实在难以忍受他了,改用labelme了,但是前面标注了一些数据json格式和labelme完全不一样,怎么才能转化到labelme,对一个稍微熟悉json格式的人来说,这其实so easy,下面记录一下。

     1、标注精灵的多边形json格式如下:

2、labelme的多边形json格式如下,左边是其整体结构,右边是其中一个多边形的具体展开结构,其标注图片和上面一样:

                              

3、标注的多边形json格式转化为labelme的多边形json格式的python程序

    有了上面两种json的具体结构形式,就可以动手写转化程序了,前面的结构分析是最主要的,下面直接上转化代码:

#utf-8
import os
import json

def BiaoZhuJinLinData2LabelMeData(AnnotFilePath,SaveDataDir):
    LabelMeJsonData={}
    LabelMeJsonData['version']="5.2.9"
    LabelMeJsonData['flags']={}
    LabelMeJsonData['shapes']=[]
    LabelMeJsonData["imagePath"]='1'
    LabelMeJsonData["imageData"]=None
    LabelMeJsonData["imageHeight"]=1
    LabelMeJsonData["imageWidth"]=1

    shapes=[]

    with open(AnnotFilePath,'r') as FId:
        AnnotStr=json.load(FId)

    object=AnnotStr['outputs']['object']
    if object:
        for objectText in object:
            name=objectText['name']
            polygon=objectText['polygon']
            xs,ys=[],[]
            for LocName in polygon.keys():
                LocVal=polygon[LocName]
                if LocName[0]=='x':
                    xs.append(float(LocVal))
                elif LocName[0]=='y':
                    ys.append(float(LocVal))
            assert len(xs)==len(ys),'xs is inequal ys'
            xys = []
            for i in range(len(xs)):
                xys.append([xs[i],ys[i]])
            #print(xys)
            shape = {}
            shape["label"]=name
            shape["points"]=xys
            shape["group_id"]=None
            shape["shape_type"]="polygon"
            shape["flags"]={}
            shapes.append(shape)

        LabelMeJsonData['shapes']=shapes
        _,imagePath=os.path.split(AnnotStr['path'])
        LabelMeJsonData["imagePath"]=imagePath
        width=AnnotStr['size']['width']
        height=AnnotStr['size']['height']
        depth=AnnotStr['size']['depth']
        LabelMeJsonData["imageHeight"]=height
        LabelMeJsonData["imageWidth"]=width

    print(LabelMeJsonData)
    _,AnnotFileName=os.path.split(AnnotFilePath)
    LabelMeJsonPath=os.path.join(SaveDataDir,AnnotFileName)
    with open(LabelMeJsonPath,'w' ) as f:
        json.dump(LabelMeJsonData,f,indent=4)


if __name__=='__main__':
    AnnotFilePath= '201906022236072977594.json'
    SaveDataDir='NewLabelMeData'
    os.makedirs(SaveDataDir,0o777, True)
    BiaoZhuJinLinData2LabelMeData(AnnotFilePath, SaveDataDir)#使用for循环批量转化

好了看看是不是很简单吧

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值