前提:已安装labelme在Anaconda3文件下。
1.在“ 开始”菜单中点击“Anaconda3(64bit) ”,选择“ Anaconda Prompt(Anaconda3)”,进入终端,界面如下:
找到labelme.exe所在文件夹D:\ProgramData\Anaconda3\envs\tf_keras\Scripts,然后在终端输入命令:
人工标注用软件为:
点击“Open”打开一张图片或者点击“OpenDir”打开一个图片文件夹,用" CreatePolygons"手动分割区域,如下图为分割出"sky",其余部分默认为“ Background”,也可以认为该背景为云层,为二分类。
点击“Save"保存文件,文件的格式为“.json",通过以下程序将该“.json"文件转为包含3个文件的文件夹:
import json
import os
import os.path as osp
import numpy as np
import PIL.Image
from labelme import utils
#json文件是以字典dict格式存储的
def main():
#输入的.json文件所在路径
json_file = 'F:/cai/learn/json/'
#输出的文件的存储路径
new_path = 'F:/cai/learn/mask_json/'
#以列表形式存储文件夹中所有文件的文件名
list1 = os.listdir(json_file)
#遍历该文件夹下文件
for i in range(0, len(list1)):
#文件的绝对路径
path = os.path.join(json_file, list1[i])
if os.path.isfile(path):
data = json.load(open(path))
#将data['imageData']的格式转为"numpy.ndarray",数据类型转为"uint8"
img = utils.img_b64_to_arr(data['imageData'])
#lbl为标签图像,lbl_names为标签名称
lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])
#将key:value位置颠倒,并存储为字符串格式
captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
#将字符串中"."替换为"_"
out_dir = osp.basename(list1[i]).replace('.', '_')
#输出文件的绝对路径
out_dir = osp.join(new_path, out_dir)
#不存在路径就创建一个
if not osp.exists(out_dir):
os.mkdir(out_dir)
#保存变量为图片格式,其中标签图像需改为0-255范围才能显示
PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
PIL.Image.fromarray(np.uint8(lbl)*255).save(osp.join(out_dir, 'label.png'))
#往记事本中写入标签名称
with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
for lbl_name in lbl_names:
f.write(lbl_name + '\n')
print('Saved to: %s' % out_dir)
if __name__ == '__main__':
main()