赞
踩
1、创建一个新环境
conda create -n labelme python=3.6
2、进入该环境,安装pyqt5和labelme,labelme要求3.3.1的版本
pip install pyqt5 -i https://pypi.doubanio.com/simple
pip install labelme==3.3.1 -i https://pypi.doubanio.com/simple
3、安装完成后,直接输入labelme,打开labelme软件即可
labelme
至于怎么使用就不说了,应该很简单,保存crtl+s保存的是json文件
下面说说如何将json文件转为png的label
首先要注意的是,有些该导入的包还是要自己先导入的,比说说什么pillow
等。下载的时候,加个镜像源 -i https://pypi.doubanio.com/simple
1)定位到Anaconda的安装目录D:\Software\anaconda\Lib\site-packages
在site_pakeages下找到lableme的文件夹:
进入到cli文件夹,找到json_to_dataset.py
文件,将里面的代码替换成如下:
#!/usr/bin/python # -*- coding: UTF-8 -*- import argparse import json import os import os.path as osp import base64 import warnings import PIL.Image import yaml from labelme import utils import cv2 import numpy as np from skimage import img_as_ubyte # from sys import argv def main(): parser = argparse.ArgumentParser() parser.add_argument('json_file') parser.add_argument('-o', '--out', default=None) args = parser.parse_args() json_file = args.json_file list_path = os.listdir(json_file) for i in range(0, len(list_path)): if list_path[i].endswith('.json'): path = os.path.join(json_file, list_path[i]) if os.path.isfile(path): data = json.load(open(path)) img = utils.img_b64_to_arr(data['imageData']) lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes']) captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)] lbl_viz = utils.draw_label(lbl, img, captions) save_file_name = osp.basename(path).replace('.', '_') out_dir1 = osp.join(osp.dirname(path), 'labelme_results') if not osp.exists(out_dir1): os.mkdir(out_dir1) out_dir1 = osp.join(out_dir1, save_file_name) if not osp.exists(out_dir1): os.mkdir(out_dir1) PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name + '_img.png') PIL.Image.fromarray(lbl).save(out_dir1 + '\\' + save_file_name + '_label.png') PIL.Image.fromarray(lbl_viz).save(out_dir1 + '\\' + save_file_name + '_label_viz.png') images_dir = osp.join(json_file, 'images_dir') if not osp.exists(images_dir): os.mkdir(images_dir) labels_dir = osp.join(json_file, 'labels_dir') if not osp.exists(labels_dir): os.mkdir(labels_dir) PIL.Image.fromarray(img).save(osp.join(images_dir, '{}_img.png'.format(save_file_name))) PIL.Image.fromarray(lbl).save(osp.join(labels_dir, '{}_label.png'.format(save_file_name))) with open(osp.join(out_dir1, 'label_names.txt'), 'w') as f: for lbl_name in lbl_names: f.write(lbl_name + '\n') info = dict(label_names=lbl_names) with open(osp.join(out_dir1, 'info.yaml'), 'w') as f: yaml.safe_dump(info, f, default_flow_style=False) print('Saved to: %s' % out_dir1) if __name__ == '__main__': # base64path = argv[1] main()
点击运行,出现以下错误没事。。属于正常
错误:numpy版本太高(numpy需要版本为1.15.0)
2)将utils中的文件夹中的shape.py
中的文件内容改成以下:
from skimage import img_as_ubyte import numpy as np import PIL.Image import PIL.ImageDraw from labelme import logger def polygons_to_mask(img_shape, polygons): mask = np.zeros(img_shape[:2], dtype=np.uint8) mask = PIL.Image.fromarray(mask) xy = list(map(tuple, polygons)) PIL.ImageDraw.Draw(mask).polygon(xy=xy, outline=1, fill=1) mask = np.array(mask, dtype=bool) return mask def shapes_to_label(img_shape, shapes, label_name_to_value, type='class'): assert type in ['class', 'instance'] cls = np.zeros(img_shape[:2], dtype=np.int32) if type == 'instance': ins = np.zeros(img_shape[:2], dtype=np.int32) instance_names = ['_background_'] for shape in shapes: polygons = shape['points'] label = shape['label'] if type == 'class': cls_name = label elif type == 'instance': cls_name = label.split('-')[0] if label not in instance_names: instance_names.append(label) ins_id = len(instance_names) - 1 cls_id = label_name_to_value[cls_name] mask = polygons_to_mask(img_shape[:2], polygons) cls[mask] = cls_id if type == 'instance': ins[mask] = ins_id if type == 'instance': return cls, ins return cls def labelme_shapes_to_label(img_shape, shapes): logger.warn('labelme_shapes_to_label is deprecated, so please use ' 'shapes_to_label.') label_name_to_value = {'_background_': 0} # 注意:需要改成自己的类别 for shape in shapes: 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 = shapes_to_label(img_shape, shapes, label_name_to_value) lbl = img_as_ubyte(lbl) return lbl, label_name_to_value
运行,没出现错误即可
3)进入D:\Software\anaconda\Scripts\
下找到labelme_json_to_dataset.exe
在相应的环境下输入
labelme_json_to_dataset.exe C:\Users\86152\Desktop\json\
后面的这个路径代表的是 存放json文件的路径
已经转换完成!!!
存放的png文件在C:\Users\86152\Desktop\json\labelme_results\ID_0011_Z_0156_json
下面
在这个label_names.txt
文件中保存的是分的类别,这样就可以了,成功!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。