批量转换json文件并提取label图像


医学图像大部分是用3D Slicer来标注肺结节。但是由于有一批dcm转换出来的jpg格式图像,为了操作方便采用了labelme对图像进行标注。记录一下labelme批量转换json文件的方法。

一、批量转换json文件

首先我们可以知道,labelme转换json图像的方法为:
1、激活labelme环境
2、labelme_json_to_dataset.exe 转换单个json文件
因此在系统命令中,只要可以使用这两个命令,遍历所有的json文件,等于可以将所有的json文件转换为png格式的图像。

则有:

1、激活labelme环境:

os.system("activate labelme")

2、系统中调用转换命令:

os.system("labelme_json_to_dataset.exe %s" % (file))

3、遍历所的json文件,整个转换代码如下:

import os
import glob

json_file1 = 'C:/Users/User/Desktop/new_result/src'   # 获取json文件一级地址
json_file2_list = os.listdir(json_file1)              # 获取json文件二级地址列表
os.system("activate labelme")                         # 在os中激活labelme环境

for i in range(len(json_file2_list)):                 # 开始遍历所有的二级地址下的json文件
    json_file1 = json_file2_list[i]
    json_file_dir = json_file1 + '/' + json_file1     # 获取二级地址的json文件夹名
    json_file = glob.glob(os.path.join(json_file_dir, "*.json"))    # 获取所有的json文件
    for file in json_file:                                          # 遍历json文件
        print(file)
        os.system("labelme_json_to_dataset.exe %s" % (file))        # 转换json文件

说明:使用labelme是需要在conda下创建labelme环境的,因此将labelme环境下的python.exe编辑器导入pycharm,等于在labelme环境下进行编辑。使用labelme环境下的python编辑器运行上图的转换代码就可以了。对应的变量按照自己的需要进行更改。
批量转换json文件并提取label图像_第1张图片

二、批量提取出label文件

生成的json文件夹和json文件在同一个文件夹下,因此需要提取json文件夹下的label。
遍历所有的json文件夹 ,获取json文件夹下的label文件。代码如下:

import os
import cv2

def read_file(file_dir, save_file_dir):
    '''
    读取文件夹下的json文件夹,bmp文件,并进行分类
    :param file_dir: json文件的一级文件夹
    :param save_file_dir: 保存的文件夹地址
    :return:
    '''
    file2_list = os.listdir(file_dir)           # 获取二级文件夹名称列表
    for i in range(len(file2_list)):
        file2_dir = file_dir + '/' + file2_list[i]
        save_file2_dir = save_file_dir + '/' + file2_list[i]    # 创建保存label文件的二级地址
        if not os.path.exists(save_file2_dir):
            os.mkdir(save_file2_dir)
        file3_list = os.listdir(file2_dir)
        for j in range(len(file3_list)):
            file3_name = file2_dir + '/' + file3_list[j]
            if os.path.isdir(file3_name):       # 因为json文件和生成的json文件夹在同一个文件夹下判断3级文件名为文件夹还是文件
                # print('it is a dir')
                name = file3_list[j].split('_')  # 对json文件名进行分隔操作,获取文件名的序列号
                num = name[0]
                label_name = file3_name + '/label.png'
                label = cv2.imread(label_name)
                new_label_name = save_file2_dir + '/' + str(num) + '.bmp'
                print(new_label_name)
                cv2.imwrite(new_label_name, label)

def main():
    file_dir = 'C:/Users/User/Desktop/new_result/src'             # json文件夹的一级地址
    save_file_dir = 'C:/Users/User/Desktop/new_result/label'      # 保存label文件的一级地址
    read_file(file_dir, save_file_dir)

if __name__ == '__main__':
    main()



你可能感兴趣的:(json,python,开发语言,深度学习)