분할 데이터 세트 만 들 기

5987 단어 딥 러 닝
의미 분할 데이터 세트 를 만 드 는 데 대체로 필요 합 니 다.
(1) labelme 를 사용 하여 데 이 터 를 표시 하고 해당 그림 의 json 형식 을 생 성 합 니 다.
(2) json 파일 을 단일 채널 로 대량으로 전환 하 는 png 파일 은 생 성 된 폴 더 에 따라 의미 그림 을 생 성 합 니 다.
(3) 의미 그림 을 그 레이스 케 일 로 전환한다.
1. labelme 로 표 시 된 샘플 을 사용 하여 그림 과 json 형식의 샘플 이름 을 대량으로 바 꿉 니 다.
import os
path = "D:\\tu"
filelist = os.listdir(path) #          (     )
i=1
for file in filelist: #      
  if file.endswith('.jpg'):
    Olddir=os.path.join(path,file) #       
    if os.path.isdir(Olddir): #         
      continue
    filename=os.path.splitext(file)[0] #   
    filetype=os.path.splitext(file)[1] #     
    Newdir=os.path.join(path,str(i).zfill(6)+filetype) #      zfill  0      
    os.rename(Olddir,Newdir)#   
  if file.endswith('.json'):
    Olddir=os.path.join(path,file) #       
    if os.path.isdir(Olddir): #         
      continue
    filename=os.path.splitext(file)[0] #   
    filetype=os.path.splitext(file)[1] #     
    Newdir=os.path.join(path,str(i).zfill(6)+filetype) #      zfill  0      
    os.rename(Olddir,Newdir)#   
  i = i + 1
: , copy d:\tupian\*.json d:\yangben
2. json 파일 을 단일 채널 로 일괄 변환 하 는 png 파일
2.1 제 이 슨 파일 의 대량 전환
C: \ \ Users \ ss \ Anaconda 3 \ \ envs \ labelme \ Lib \ \ site - packages \ labelme \ \ cli 아래 jsonto_dataset. py 파일 의 코드 교 체 는 다음 과 같 습 니 다.
import json
import os
import os.path as osp
import warnings
import copy
import numpy as np
import PIL.Image
import yaml

from labelme import utils

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 = os.listdir(json_file)
    for i in range(0, len(list)):
        path = os.path.join(json_file, list[i])
        filename = list[i][:-5]       # .json
        if os.path.isfile(path):
            data = json.load(open(path))
            img = utils.image.img_b64_to_arr(data['imageData'])
            lbl, lbl_names = utils.shape.labelme_shapes_to_label(img.shape, data['shapes'])  # labelme_shapes_to_label

            captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
            lbl_viz = utils.draw.draw_label(lbl, img, captions)
            out_dir = osp.basename(list[i]).replace('.', '_')
            out_dir = osp.join(osp.dirname(list[i]), out_dir)
            if not osp.exists(out_dir):
                os.mkdir(out_dir)

            PIL.Image.fromarray(img).save(osp.join(out_dir, '{}.png'.format(filename)))
            PIL.Image.fromarray(lbl).save(osp.join(out_dir, '{}_gt.png'.format(filename)))
            PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, '{}_viz.png'.format(filename)))

            with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
                for lbl_name in lbl_names:
                    f.write(lbl_name + '
')             warnings.warn('info.yaml is being replaced by label_names.txt')             info = dict(label_names=lbl_names)             with open(osp.join(out_dir, 'info.yaml'), 'w') as f:                 yaml.safe_dump(info, f, default_flow_style=False)             print('Saved to: %s' % out_dir) if __name__ == '__main__':     main()

cmd 환경 을 열 고 activate labelme 활성화 labelme 를 입력 하 십시오.
labelme 입력json_to_dataset D:/yangben  json 파일 을 대량으로 변환 합 니 다. 그 중에서 D: / yangben 은 json 이 있 는 폴 더 이 고 전 환 된 파일 은 c / usrs / ss 에 저 장 됩 니 다.
2.2 폴 더 에서 label. png 파일 대량 가 져 오기
        실행 후 결 과 는 그림 에 해당 하 는 폴 더 를 생 성 합 니 다. 그 안에 네 개의 파일 이 포함 되 어 있 습 니 다: img, info, label, labelviz。labelme_json_dataset 에서 생 성 된 레이 블 이미지 파일 은 json 마다 하나의 폴 더 에 대응 하 는 것 으로 다음 코드 를 써 서 label. png 파일 을 대량으로 가 져 옵 니 다.
GTfrom_PATH 를 json 로 설정 하면 된다.   
import os
import random
import shutil
import re


GT_from_PATH = "D:/jsons"
GT_to_PATH = "./gts"


def copy_file(from_dir, to_dir, Name_list):
    if not os.path.isdir(to_dir):
        os.mkdir(to_dir)
    for name in Name_list:
        try:
            # print(name)
            if not os.path.isfile(os.path.join(from_dir, name)):
                print("{} is not existed".format(os.path.join(from_dir, name)))
            shutil.copy(os.path.join(from_dir, name), os.path.join(to_dir, name))
            # print("{} has copied to {}".format(os.path.join(from_dir, name), os.path.join(to_dir, name)))
        except:
            # print("failed to move {}".format(from_dir + name))
            pass
        # shutil.copyfile(fileDir+name, tarDir+name)
    print("{} has copied to {}".format(from_dir, to_dir))


if __name__ == '__main__':
    filepath_list = os.listdir(GT_from_PATH)
    # print(name_list)
    for i, file_path in enumerate(filepath_list):
        gt_path = "{}/{}_gt.png".format(os.path.join(GT_from_PATH, filepath_list[i]), file_path[:-5])
        print("copy {} to ...".format(gt_path))
        gt_name = ["{}_gt.png".format(file_path[:-5])]
        gt_file_path = os.path.join(GT_from_PATH, file_path)
        copy_file(gt_file_path, GT_to_PATH, gt_name)

  2.3 24 비트 의미 그림 생 성
import os
import PIL.Image
import numpy as np
from skimage import io, color

path = "D:\\gts"
filelist = os.listdir(path)
i = 1
for file in filelist:
    filename = os.path.join(path, 'label'+str(i)+'.png') 
    img = PIL.Image.open(filename)#    
    img = np.array(img)
    img24 = color.label2rgb(img, bg_label=0, bg_color=(0, 0, 0)) 
    #img8 = PIL.Image.fromarray(np.uint8(img24))
    dstName = os.path.join("D:\\transform", 'label' + str(i) + '.png')
    io.imsave(dstName, img8)
    i = i+1

좋은 웹페이지 즐겨찾기