将labelme工具生产的json文件批量转dataset

labelme包是自营神经网络必备的一个工具。由于本人在安装和使用过程中踩了不少坑,因此写下这篇博客记录一下。
labelme的具体安装过程就不多说了,直接附上几段代码:

conda create --name=labelme python=3.6 #创建python版本为3.6的环境
#wait for down
activate labelme #启动labelme环境,deactivate退出环境
conda install pyqt5 #如果非要用python2.7版本,就安装pyqt
pip install labelme #一开始用conda安装下载会找不到可用链接,用pip就可以了,换着试试

如果实在下载不下来,就自己与网上下载labelme的依赖包吧,网址在下面
清华源python依赖包
下载的时候如果找不到的话,使用ctrl+F

好了接下来进入这篇博客的重点了,如何将labelme生成的json文件批量装成dataset
网上找了很多方法,包括自己写脚本、修改Lib文件夹下的代码等等,我果断都没有试过(哈哈哈哈哈),咳咳,原因是这样的,labelme提供的json To dataset是一个exe的可执行文件,那么我们小写几句代码用来循环读取文件夹下的json文件,然后在用os.system()方法调用scripts下的labelme_json_to_dataset.exe工具不就好了。那么问题来了,我们为啥还要自己去写脚本或者去改脚本呢?(改脚本的方法也很简单,改几句代码就好了,但是据那些博主说可能会出现一些奇怪的问题)
好了,废话不多说了,该上代码了。提前说明下哈,下面的代码要想成功运行,有一个前提,就是你单个json转dataset时不会报错。就比如运行下面代码:

(base) C:\Users\lemon>activate labelme
(labelme) C:\Users\lemon>D:
(labelme) D:\>cd D:\Program Files\Anaconda3\envs\labelme\Scripts
(labelme) D:\Program Files\Anaconda3\envs\labelme\Scripts>python labelme_json_to_dataset.exe C:\Users\lemon\Desktop\labelme\20200312104315_1.json

运行成功后会生成一个和目标json文件同名的文件夹,如下所示:将labelme工具生产的json文件批量转dataset_第1张图片
在文件夹里面会生成四个文件,如下:(其中Label就是训练需要的label文件)
将labelme工具生产的json文件批量转dataset_第2张图片
接下来就上批量处理的代码了,这里提供两个版本。
第一个版本是直接设置好参数,然后直接在labelme环境下用python运行就好,代码如下:

# -*- coding: utf-8 -*-
import os
path = r'C:\Users\lemon\Desktop\labelme'   #存放json文件的目标文件夹
json_file = os.listdir(path)
os.chdir(r'D:\Program Files\Anaconda3\envs\labelme\Scripts') #存放转换工具的目标文件夹
for file in json_file:
    print(file+"...")
    os.system("python labelme_json_to_dataset.exe %s"%(path +'\\'+ file))
    print(file+"complete")

运行的bash代码如下所示:

(base) C:\Users\lemon>activate labelme
(labelme) C:\Users\lemon>python C:\Users\lemon\Desktop\json_to_dataset1.py
D:\Program Files\Anaconda3\envs\labelme\Scripts
20200312104315_1.json...
[WARNING] json_to_dataset:main:17 - It won't handle multiple JSON files to generate a real-use dataset.(这里警告出现的原因是所有的josn文件都是一样的,是复制凑数的)
[INFO   ] json_to_dataset:main:73 - Saved to: C:\Users\lemon\Desktop\labelme\20200312104315_4_json

下面是批处理效果:
将labelme工具生产的json文件批量转dataset_第3张图片
将labelme工具生产的json文件批量转dataset_第4张图片
另外一个版本大同小异,就是提供了一个输入参数的功能,代码如下:

import os
import sys
path = sys.argv[1]
chdir = sys.argv[2]
print(sys.argv[0])  #argv[0]参数指向运行的py文件
print(sys.argv[1])
print(sys.argv[2])
json_file = os.listdir(path)
os.chdir(chdir)
print(os.getcwd())
for file in json_file:
    print(file+"...")
    os.system("python labelme_json_to_dataset.exe %s"%(path +'\\'+ file))

调用方式和前面一样,在后面加参数就好了

python xxx.py argv[1] argv[2]

你可能感兴趣的:(python,人工智能)