前言
之前做深度学习语义分割的时候,处理的数据集的标签label都是图片格式的。这次遇到了json格式的标签,查了一下应该是lebelme制作的,然后找到了解决方案并写下了这篇文字。
安装labelme
需要安装labelme,直接pip安装即可。我的python环境为3.7,安装之后使用labelme报错,直觉告诉我可能是python版本问题,然后创建了python3.6的虚拟环境,果然OK。步骤如下:
# 创建一个python3.6的虚拟环境
conda create --name=labelme python=3.6
# 激活该环境
activate labelme
# 使用pip安装labelme
pip install labelme
单文件json格式标签为png格式
安装好labelme之后,直接在cmd终端输入:
labelme_json_to_dataset 文件名.json
即可得到一个文件夹,有四个文件,img.png,源文件图像
label.png,标签图像
label_names.txt,标签中的各个类别的名称
label_viz.png,源文件与标签融合文件
其中的label.png即是我们要的想要的标签文件。如果本来的源文件图像为jpg格式,我们会发现生成的png格式源文件图像大小会大很多,不必惊慌。JPG转PNG质量不会有变化,但大小通常会增加几倍左右,这是因为JPG是有损压缩,而PNG是无损压缩。img.pnglabel.pnglabel_viz.pnglabel_names.txt
批量json格式标签为png格式
现在生成一个是没问题了,接下来就是批量生成了批量生成,批量生成我们需要在python里调用cmd,os模块调用CMD命令有两种方式:os.popen(),os.system() 都是用当前进程来调用。os.system是无法获取返回值的,当运行结束后接着往下面执行程序。
import os
json_folder = r"D:\RSimage"
# 获取文件夹内的文件名
FileNameList = os.listdir(json_folder)
# 激活labelme环境
os.system("activate labelme")
for i in range(len(FileNameList)):
# 判断当前文件是否为json文件
if(os.path.splitext(FileNameList[i])[1] == ".json"):
json_file = json_folder + "\\" + FileNameList[i]
# 将该json文件转为png
os.system("labelme_json_to_dataset " + json_file)
将文件批量转移成标准格式(这里的标准格式是指所有原图像一个文件夹,所有label一个文件夹)
import os
import shutil
JPG_folder = r"D:\MyFile\6JingJie\05DeepLearning\Demo\data\RSimage\2019"
Paste_JPG_folder = r"D:\MyFile\6JingJie\05DeepLearning\Demo\data\RSimage\image"
Paste_label_folder = r"D:\MyFile\6JingJie\05DeepLearning\Demo\data\RSimage\label"
# 获取文件夹内的文件名
FileNameList = os.listdir(JPG_folder)
NewFileName = 1
for i in range(len(FileNameList)):
# 判断当前文件是否为json文件
if(os.path.splitext(FileNameList[i])[1] == ".JPG"):
# 复制jpg文件
JPG_file = JPG_folder + "\\" + FileNameList[i]
new_JPG_file = Paste_JPG_folder + "\\" + str(NewFileName) + ".JPG"
shutil.copyfile(JPG_file, new_JPG_file)
# 复制label文件
jpg_file_name = FileNameList[i].split(".", 1)[0]
label_file = JPG_folder + "\\" + jpg_file_name + "_json\\label.png"
new_label_file = Paste_label_folder + "\\" + str(NewFileName) + ".png"
shutil.copyfile(label_file, new_label_file)
# 文件序列名+1
NewFileName = NewFileName + 1最终形态
后记
大家有什么问题留言即可,共同讨论,共同进步。
参考:CSDN-专业IT技术社区-登录blog.csdn.nethttps://github.com/wkentaro/labelmegithub.com