Mask-RCNN所需labelme数据格式转换

目录

踩坑

为啥没有yaml

咋转换好使

16bit转8bit??

子文件拿出合并,如何批量重命名

踩了太多坑,屡败屡战!

巨大成功,搞了2个小时,终于可以实现,将labelme的标注文件json转换为以下格式了!

Mask-RCNN所需labelme数据格式转换_第1张图片

踩坑

百度了一堆,我这都不行,咱就是说,一整个拒绝的大动作!下次不要再试了!

尝试了从本地电脑中找到labelme的env还是cli啥的,修改labelme里面的代码,达咩;

尝试写个sh文件直接操作,结果生成了空文件夹,达咩;

尝试了用anaconda中运行这个labelme2dataset.py啥的,达咩;

尝试labelme里的py文件下terminal中激活运行,报错文件权限不对,于是把文件只读格式兴高采烈地改完了,结果改了个寂寞,一会还是悄悄地自己变回只读,达咩;

尝试把脚本文件和labelme放到一个文件夹下,都达咩...猜不透是哪里出了错。

为啥没有yaml

先检查一下你的版本吧,要不还得回炉再造(狗头)

如果本就是低版本的,不管啥能用的代码运行完即可收获5个文件,包括label_viz.png yaml txt等;

如果是新版本的labelme,会发现只有txt等4个文件,没有yaml格式,那是版本高了而已,官方已经用txt取代yaml。需要把labelme的版本降低,在上面的py文件的terminal中写(pycharm就直接找底下的终端),不费事,一行代码:

pip install labelme==3.16.2

咋转换好使

现在版本好了,来说说怎么转换,5行代码非常easy啦,但需格外无比非常注意文件/文件夹的写法!!我大踩坑www

所有json文件放到一个文件夹,如上,都在bjson文件夹中,里面不需要放对应的images!防止意外,也别整中文路径了。

之后执行代码即可(当然了得先电脑里装着labelme)

import os
path = 'E:/bjson/'  
# path为json文件存放的路径,注意这里一定要写到文件夹就行,不要写进去到xx.json
# 这个bjson文件夹里有很多json,写到这种路径下就好!

json_file = os.listdir(path)
for file in json_file:
    os.system("activate labelme && labelme_json_to_dataset.exe %s"%(os.path.join(path, file)))

安装好后再运行下面代码就可以了!!生成5个文件了。

16bit转8bit??

很多文章里还写需要将label转成8bit的,也就是别人示例文件夹里的一片黑。

but!!现在转换完的已经是8bit的了,是能可视化的,所以不用再转位深了!!

不信的话,你可以试试,确认一下:

Mask-RCNN所需labelme数据格式转换_第2张图片

子文件拿出合并,如何批量重命名

转换后的子文件并不能体现他是谁转的,没有代表性,都是人,不知道你叫啥名,谁家的。

如果后续需要将所yaml单独拿出来放一个文件夹里,但是每个都叫info.yaml那不傻了,忙碌了半天的老师傅啥也没留下?

Mask-RCNN所需labelme数据格式转换_第3张图片

那么如何把里面的都重命名为主文件夹的名字?比如a文件夹下的都叫a.json啥的,b里就是b啥的。这时就需要重命名子文件了:

import os
import shutil
import time
import sys
import importlib
importlib.reload(sys)


def copy_and_rename(fpath_input, fpath_output):
    for file in os.listdir(fpath_input):
        for inner in os.listdir(fpath_input+file+'/'):
            print(inner)
            if os.path.splitext(inner)[0] == "label":
                former = os.path.join(fpath_input, file)
                oldname = os.path.join(former, inner)
                print(oldname)
                newname_1 = os.path.join(fpath_output,
                                         file.split('_')[0] + ".png")
                # os.rename(oldname, newname)
                shutil.copyfile(oldname, newname_1)


if __name__ == '__main__':
    print('start ...')
    t1 = time.time() * 1000
    # 自己的文件路径
    fpath_input = "xxxx/train_data/labelme_json/"
    fpath_output = "xxx/train_data/cv2_mask/"

 
    copy_and_rename(fpath_input, fpath_output)
    t2 = time.time() * 1000
    print('take time:' + str(t2 - t1) + 'ms')
    print('end.')

 一顿操作猛如虎,再也不做二百五!

你可能感兴趣的:(分割,深度学习,人工智能,目标检测,计算机视觉,pytorch)