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、總結
。。。。。。有錯誤的地方希望大家批評指正。