不修改.py批量转换labelme标注的json格式标签转mask.png格式

提示:本文章是对前人的总结补充,代码略有修改。原文链接https://zhuanlan.zhihu.com/p/116023772

文章目录

  • 一、安装labelme
  • 二、单文件json格式标签为png格式
  • 三、批量json格式标签为png格式
  • 四、将文件批量转移成标准格式
  • 后记
  • 参考:


一、安装labelme

安装3.16.7版本的labelme
python = 3.7

> # 使用pip安装labelme
> pip install labelme==3.16.7

二、单文件json格式标签为png格式

安装好labelme之后,直接在 文件名.json目录下输入cmd终端输入:
ps:记得先激活python环境 activate xxx

labelme_json_to_dataset 文件名.json

即可得到一个文件夹,有五个文件,

  • img.png,源文件图像
  • label.png,标签图像
  • label_names.txt,标签中的各个类别的名称
  • label_viz.png,源文件与标签融合文件
  • info.yaml ,类别信息

不修改.py批量转换labelme标注的json格式标签转mask.png格式_第1张图片

三、批量json格式标签为png格式

现在生成一个是没问题了,接下来就是批量生成了批量生成,批量生成我们需要在python里调用cmd,os模块调用CMD命令有两种方式:os.popen(),os.system() 都是用当前进程来调用。os.system是无法获取返回值的,当运行结束后接着往下面执行程序。


'''
*********************   用os批量转json为mask.png  ***************************
'''

# 此处只修改文件路径即可

import os

json_folder = r"E:\DATA\json_f1\0"   # json文件所在目录
#  获取文件夹内的文件名
FileNameList = os.listdir(json_folder)
#  激活labelme环境
os.system("activate labelme")
for z in range(len(FileNameList)):
    #  判断当前文件是否为json文件
    if(os.path.splitext(FileNameList[z])[1] == ".json"):
        json_file = json_folder + "\\" + FileNameList[z]
        #  将该json文件转为png
        os.system("labelme_json_to_dataset " + json_file)
        

不修改.py批量转换labelme标注的json格式标签转mask.png格式_第2张图片
PS:此处批量转换后的文件在原json文件目录,需要 剪切粘贴 到咱们自定义的目录

四、将文件批量转移成标准格式

这里的标准格式是指所有原图像一个文件夹,所有label一个文件夹

# coding=gbk

'''
*********************   批量转换出来的mask.png文件分别分类的样本、标签文件夹  ***************************
'''

#目的:将img放一个文件夹、label放一个文件夹、等等

#q是一个字符串,根据JPG_folder对照着修改
#建立每个目标文件路径 JPG_folder(路径格式为:01下一层的 每个目标文件夹(数量取决于你的样本数),每个文件夹内包含img、label、label_viz、info.yaml、label_names.txt五个文件)
#img图像文件夹、label图像文件夹、其他文件夹(自定义)需要自己创建

import os
import shutil

q = "E:\\DATA\\json_f2\\01\\" #字符串,内容根据下面的JPG_folder对应修改
# 需要建立或修改的文件夹路径
JPG_folder = r"E:\DATA\json_f1\1"  #os批量转json为mask.png后的目录
Paste_JPG_folder = r"E:\DATA\json_f1\2\jpg2"   # 后面要导出的img目录
Paste_label_folder = r"E:\DATA\json_f1\2\label2"   # 后面要导出的label目录
Paste_label_viz_folder = r"E:\DATA\json_f1\2\label2_viz"  # 后面要导出的label_viz目录


#  获取文件夹内的文件名
FileNameList = os.listdir(JPG_folder)

# for循环单独打开每个文件夹
for i in range(len(FileNameList)):
    filepath = q + FileNameList[i]
    filepath = JPG_folder +'\\'+ FileNameList[i]
    # print(filepath)
#获取每个文件夹的文件名列表
    filelist = os.listdir(filepath)
    # print(filelist)
#寻找目标文件
    for j in range(len(filelist)):
        # 判断文件名是否是img
        if (os.path.splitext(filelist[j])[0] == "img"):
            #  复制img文件
            JPG_file = filepath + "\\" + filelist[j]
            new_JPG_file = Paste_JPG_folder + "\\" + str(i) + ".JPG"
            # print(JPG_file,new_JPG_file)
            shutil.copyfile(JPG_file, new_JPG_file)
        elif (os.path.splitext(filelist[j])[0] == "label"):
            #复制label文件
            label_file = filepath + "\\" + filelist[j]
            new_label_file = Paste_label_folder + "\\" + str(i) + ".png"
            shutil.copyfile(label_file, new_label_file)

        elif (os.path.splitext(filelist[j])[0] == "label_viz"):
             #复制label文件
            label_viz_file = filepath + "\\" + filelist[j]
            new_label_viz_file = Paste_label_viz_folder + "\\" + str(i) + ".png"
            shutil.copyfile(label_viz_file, new_label_viz_file)


不修改.py批量转换labelme标注的json格式标签转mask.png格式_第3张图片
不修改.py批量转换labelme标注的json格式标签转mask.png格式_第4张图片
不修改.py批量转换labelme标注的json格式标签转mask.png格式_第5张图片

后记

大家有什么问题留言即可,共同讨论,共同进步。

参考:

深度学习数据预处理_python批量转换labelme标注的json格式标签为png格式

你可能感兴趣的:(python,深度学习)