1、Labelme
Labelme是深度学习(语义分割、实例分割)需要用到的图像标注软件。在标注好目标后会生成json文件,json文件中包含了标注的坐标点信息,类别信息,原始图像信息。
2、背景
通常在语义分割或者实例分割中GT(真实掩码)是一个多值(多=class_num+1)数组,实际上json文件清晰友好,但很多网络教程中的解析json文件都过于繁琐,个人觉得没有必要。因此在这里写的简单一些,供大家参考。
3、代码
argparse是一个命令行解析模块(如果不喜欢可以不用),这里设了两个位置参数,第一个是json的文件目录路径,第二个是npy文件的保存目录路经。其中label_name_to_value是标签的信息,需要自己设置一下。utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)—>>>能够返回一个真实掩码的数组。
import argparse
import json
from labelme import utils
import numpy as np
import os
def create_npy():
parser = argparse.ArgumentParser()
parser.add_argument("json_file",help="input the json files'dir path")
parser.add_argument("out_npy", help="input the out npy files'dir path")
args = parser.parse_args()
json_path = args.json_file
npy_path = args.out_npy
name_list=os.listdir(json_path)
label_name_to_value = {'_background_': 0, "girl": 1, "cat": 2}
i=0
for name in name_list:
if name.split(".")[-1] == "json":
i += 1
print("第%d个json文件,名字是:"%i,name)
per_json=os.path.join(json_path,name)
data = json.load(open(per_json))
img = utils.img_b64_to_arr(data["imageData"])
lbl = utils.shapes_to_label(img.shape, data['shapes'], label_name_to_value)
base = name.split(".")[0] + ".npy"
save_path = os.path.join(npy_path,base)
np.save(save_path, lbl)
if __name__=="__main__":
create_npy()
4、总结
。。。。。。有错误的地方希望大家批评指正。