labelme遥感数据集标定和批量转换

 labelme的安装:

conda create --name=labelme python=3.5 #考虑兼容性,这里我们选择Python3
activate labelme
conda install pyqt
pip install labelme

labelme的打开:终端直接输入labelme,就可以打开软件了,进行标定了

OpenDir 和 Change Output Dir,可以自动保存

对所有图像标定后,输出放在json_data文件夹下

批量转换 json–png:

打开labelme的

D:\Anaconda3\envs\labelme\Lib\site-packages\labelme\cli

labelme遥感数据集标定和批量转换_第1张图片

实现批量转换,需修改这处代码。 

count = os.listdir(json_file) 
    for i in range(0, len(count)):
        path = os.path.join(json_file, count[i])
        if args.out is None:
            out_dir = osp.basename(json_file+'/'+count[i]).replace('.', '_')
            out_dir = osp.join(osp.dirname(json_file+'/'+count[i]), out_dir)
        else:
            out_dir = args.out
        if not osp.exists(out_dir):
            os.mkdir(out_dir)
        if os.path.isfile(path):
            data = json.load(open(path))

批量转换时,注意不需要全部替换下面代码,此处只是根据labelme批量转换的一个例子。一般labelme会有版本限制,全部替换会出错。

import argparse
import base64
import json
import os
import os.path as osp

import imgviz
import PIL.Image

from labelme.logger import logger
from labelme import utils


def main():
    logger.warning('This script is aimed to demonstrate how to convert the'
                   'JSON file to a single image dataset, and not to handle'
                   'multiple JSON files to generate a real-use dataset.')

    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    parser.add_argument('-o', '--out', default=None)
    args = parser.parse_args()

    json_file = args.json_file
    count = os.listdir(json_file)
    for i in range(0, len(count)):
        path = os.path.join(json_file, count[i])
        filename = os.path.splitext(count[i])[0]
        if args.out is None:
            out_dir = osp.basename(json_file+'/').replace('.', '_')
            out_dir = osp.join(osp.dirname(json_file+'/'), out_dir)
        else:
            out_dir = args.out
        if not osp.exists(out_dir):
            os.mkdir(out_dir)
        if os.path.isfile(path):
            data = json.load(open(path))
            imageData = data.get('imageData')
            if not imageData:
                imagePath = os.path.join(os.path.dirname(json_file), data['imagePath'])
                with open(imagePath, 'rb') as f:
                    imageData = f.read()
                    imageData = base64.b64encode(imageData).decode('utf-8')
            img = utils.img_b64_to_arr(imageData)
            label_name_to_value = {'_background_': 0}
            for shape in sorted(data['shapes'], key=lambda x: x['label']):
                label_name = shape['label']
                if label_name in label_name_to_value:
                    label_value = label_name_to_value[label_name]
                else:
                    label_value = len(label_name_to_value)
                    label_name_to_value[label_name] = label_value
            lbl, _ = utils.shapes_to_label(
                img.shape, data['shapes'], label_name_to_value
            )

            label_names = [None] * (max(label_name_to_value.values()) + 1)
            for name, value in label_name_to_value.items():
                label_names[value] = name

            lbl_viz = imgviz.label2rgb(
                label=lbl, img=imgviz.asgray(img), label_names=label_names, loc='rb'
            )
            if not osp.exists(out_dir+'img'):
                os.mkdir(out_dir+'img')
            if not osp.exists(out_dir + 'label'):
                os.mkdir(out_dir + 'label')
            if not osp.exists(out_dir + 'label_viz'):
                os.mkdir(out_dir + 'label_viz')
            if not osp.exists(out_dir + 'label_names'):
                os.mkdir(out_dir + 'label_names')

            PIL.Image.fromarray(img).save(osp.join(out_dir+'img', filename+'.png'))
            utils.lblsave(osp.join(out_dir+'label', filename+'.png'), lbl)
            PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir+'label_viz', filename+'.png'))

            with open(osp.join(out_dir+'label_names', filename+'.txt'), 'w') as f:
                for lbl_name in label_names:
                    f.write(lbl_name + '\n')

            logger.info('Saved to: {}'.format(out_dir))

if __name__ == '__main__':
    main()

找到labelme_json_to_dataset.exe可执行文件位置

D:\Anaconda3\envs\labelme\Scripts

labelme遥感数据集标定和批量转换_第2张图片

以管理员身份,进入DOS环境,命令行进入改文件夹下

执行命令:labelme_json_to_dataset.exe D:\Pycharm\deeplab\data\json_data

后面是json文件保存的路径

labelme遥感数据集标定和批量转换_第3张图片

你可能感兴趣的:(Python,Tensorflow)