labelme标签批量转换数据集json_to_dataset
文章目录
- labelme标签批量转换数据集json_to_dataset
- 转换原理
- 单张图片转换
- 多张图片批量转换
- bat脚本循环法
- 标注图片提取
- 标注图片转单通道
labelme标签批量转换数据集json_to_dataset
转自labelme批量制作数据集教程。
转换原理
在安装了labelme的虚拟环境中有一个labelme_json_to_dataset.exe
文件可以将json文件转成png文件【分割掩码(mask)】,但这个过程一次只能转换一个文件,因此这里提出批量转换的方法。(labelme_json_to_dataset.exe
文件的所在目录是conda\envs\labelme\Scripts\labelme_json_to_dataset.exe
)。
单张图片转换
json文件需要转换成png文件【分割掩码(mask)】,基本转换方法是在安装了labelme的环境下,输入下面的代码:
labelme_json_to_dataset E:\test\image\001.json
在001.json所在文件夹内,会生成一个001_json的文件夹,里面有5个文件,其中的label.png为所要的分割掩膜,label_viz.png是通道融合图,新版本的labelme没有.yaml文件(因此新版本的labelme中仅会生成4个文件)。
分割掩膜示意图:
多张图片批量转换
但是当数据文件很多时,需要批量处理的方法。这种方法需要原始图片与对应的json文件在同一个文件夹下。
bat脚本循环法
@echo off
for %%i in (*.json) do labelme_json_to_dataset %%i
pause
新建一个txt文件,把这个复制进去,然后改名为test.bat,和要转换的文件放在一起。然后在激活相应环境下,进入所在文件目录,命令行输入test.bat就可以了。
标注图片提取
生成的label图片均在文件中,且图片名均是label.png,所以需要批量提取label.png,其他4个文件没有用,代码如下
# 将标签图从json文件中批量取出
import os
import shutil
path = r'D:\postgraduate\test' # 生成的*_json文件夹路径
dirpath = r'D:\postgraduate\test\output' # 分割掩码放置的目标文件夹路径
# 确保目标目录存在
os.makedirs(dirpath, exist_ok=True)
for eachfile in os.listdir(path):
if os.path.isdir(os.path.join(path, eachfile)):
source_file = os.path.join(path, eachfile, 'label.png')
destination_file = os.path.join(dirpath, eachfile.split('_')[0] + '.png')
if os.path.exists(source_file):
try:
shutil.copy(source_file, destination_file)
print(eachfile + ' successfully moved')
except Exception as e:
print(f'Error moving {eachfile}: {e}')
使用时,只需将path和dirpath修改为你自己的路径即可。
标注图片转单通道
关于图片的概念见单通道、三通道、灰度图、黑白图、三通道转灰度图(单通道)。
图片的转换随便搜索就有。