人工標註並製作分割圖

塔塔的守護者發表於2020-12-14

前提:已安裝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()

 

 

 

相關文章