Example #1
0
def singleFile(filePath):
    if os.path.isfile(filePath) and filePath.endswith('.json'):
        data = json.load(open(filePath))
        img = lUtils.img_b64_to_arr(data['imageData'])
        lbl, lbl_names = lUtils.labelme_shapes_to_label(
            img.shape, data['shapes'])
        # lbl[lbl>0] = 255
        # print(lbl)

        captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
        lbl_viz = lUtils.draw_label(lbl, img, captions)
        out_dir = osp.basename(filePath).replace('.', '_')
        out_dir = osp.join(osp.dirname(filePath), out_dir)
        if not osp.exists(out_dir):
            os.mkdir(out_dir)
        PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
        PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
        print(np.max(lbl))
        lbl = np.array(lbl, dtype=np.uint8)
        lbl[lbl > 0] = 255

        PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label_255.png'))
        PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))
        with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
            for lbl_name in lbl_names:
                f.write(lbl_name + '\n')
        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)
Example #2
0
def main():
    '''
    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    args = parser.parse_args()
    '''


    json_file = '/Users/nainggolan/Documents/dataset/te/1.json'

    out_dir = osp.basename(json_file).replace('.', '_')
    out_dir = osp.join(osp.dirname(json_file), out_dir)
    os.mkdir(out_dir)

    data = json.load(open(json_file))

    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

    lbl_viz = utils.draw_label(lbl, img, lbl_names)

    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
    PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
    PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

    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('wrote data to %s' % out_dir)
Example #3
0
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])
        if os.path.isfile(path):
            data = json.load(open(path))
            img = utils.img_b64_to_arr(data['imageData'])
            lbl, lbl_names = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])
            captions = [
                '%d: %s' % (l, name) for l, name in enumerate(lbl_names)
            ]
            lbl_viz = utils.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, 'img.png'))
            utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
            PIL.Image.fromarray(lbl_viz).save(
                osp.join(out_dir, 'label_viz.png'))
            with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
                for lbl_name in lbl_names:
                    f.write(lbl_name + '\n')
            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)
Example #4
0
def main():
    '''

    parser = argparse.ArgumentParser()
    parser.add_argument()
    args = parser.parse_args()
    '''

    json_file = '/Users/nainggolan/Desktop/te/1.json'

    data = json.load(open(json_file))  # 加载json文件

    img = utils.img_b64_to_array(data['imageData'])  # 解析原图片数据
    lbl, lbl_names = utils.labelme_shapes_to_label(
        img.shape, data['shapes']
    )  # 解析'shapes'中的字段信息,解析出每个对象的mask与对应的label   lbl存储 mask,lbl_names 存储对应的label
    # lal 像素取值 0、1、2 其中0对应背景,1对应第一个对象,2对应第二个对象
    # 使用该方法取出每个对象的mask mask=[] mask.append((lbl==1).astype(np.uint8)) # 解析出像素值为1的对象,对应第一个对象 mask 为0、1组成的(0为背景,1为对象)
    # lbl_names  ['background','cat_1','cat_2']

    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    lbl_viz = utils.draw_label(lbl, img, captions)

    plt.subplot(121)
    plt.imshow(img)
    plt.subplot(122)
    plt.imshow(lbl_viz)
    plt.show()
Example #5
0
def changeToDataset(json_dir, out_dir=None):

    # parser = argparse.ArgumentParser()
    # parser.add_argument('json_file')
    # parser.add_argument('-o', '--out', default=None)
    # args = parser.parse_args()

    for fileName in os.listdir(json_dir):
        if re.match(".*[.]json$", fileName):
            json_file = osp.join(json_dir, fileName)
            print json_file

            if out_dir is None:
                out_dir = osp.join(osp.dirname(json_file), "output")
            # else:
            # print 'Existed out_dir = ',out_dir

            if not osp.exists(out_dir):
                os.mkdir(out_dir)

            out_dir_label = os.path.join(out_dir, 'label')
            if not osp.exists(out_dir_label):
                os.mkdir(out_dir_label)

            out_dir_viz = os.path.join(out_dir, 'viz')
            if not osp.exists(out_dir_viz):
                os.mkdir(out_dir_viz)

            print "out_dir_label = ", out_dir_label

            data = json.load(open(json_file))
            img = utils.img_b64_to_array(data['imageData'])
            lbl, lbl_names = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])
            #print 0: background 1: sto
            # for l, name in enumerate(lbl_names):
            #     print '%d: %s' % (l, name)
            captions = [
                '%d: %s' % (l, name) for l, name in enumerate(lbl_names)
            ]
            lbl_viz = utils.draw_label(lbl, img, captions)

            #New Name
            NewName = fileName.split('.')[0]
            print osp.join(out_dir, NewName + '.png')
            # PIL.Image.fromarray(img).save(osp.join(out_dir,NewName+ '_img.png'))
            PIL.Image.fromarray(lbl).save(
                osp.join(out_dir_label, NewName + '.png'))
            PIL.Image.fromarray(lbl_viz).save(
                osp.join(out_dir_viz, NewName + '_label_viz.png'))

            with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
                for lbl_name in lbl_names:
                    f.write(lbl_name + '\n')

            # 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)
def main():

    json_file = 'C:/Users/QJ/Desktop/hh/total'
    list = os.listdir(json_file)
    for i in range(0, len(list)):
        path = os.path.join(json_file, list[i])
        if os.path.isfile(path):
            data = json.load(open(path))
            img = utils.img_b64_to_array(data['imageData'])
            lbl, lbl_names = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])

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

            PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
            # PIL.Image.fromarray(lbl).save()
            labelpath = osp.join(out_dir, 'label.png')
            # PIL.Image.fromarray(lbl).save(labelpath)
            # opencvimg16 = cv2.imread(labelpath)
            # opencvimg.convertTo(opencvimg6,)
            lbl8u = np.zeros((lbl.shape[0], lbl.shape[1]), dtype=np.uint8)
            for i in range(lbl.shape[0]):
                for j in range(lbl.shape[1]):
                    lbl8u[i, j] = lbl[i, j]
            PIL.Image.fromarray(lbl8u).save(labelpath)
            # Alllabelpath="%s"

        PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

        with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
            for lbl_name in lbl_names:
                f.write(lbl_name + '\n')

        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.dump(info, f, default_flow_style=False)

        fov = open(osp.join(out_dir, 'info.yaml'), 'w')
        for key in info:
            fov.writelines(key)
            fov.write(':\n')
        for k, v in lbl_names.items():
            fov.write('  ')
            fov.write(k)
            fov.write(':\n')

        fov.close()
        print('Saved to: %s' % out_dir)
Example #7
0
def changeToDataset(json_dir,out_dir=None):


    # parser = argparse.ArgumentParser()
    # parser.add_argument('json_file')
    # parser.add_argument('-o', '--out', default=None)
    # args = parser.parse_args()


    for fileName in os.listdir(json_dir):
        if re.match(".*[.]json$",fileName):
            json_file = osp.join(json_dir,fileName)
            print json_file

            if out_dir is None:
                out_dir = osp.join(osp.dirname(json_file), "output")
            # else:
                # print 'Existed out_dir = ',out_dir

            if not osp.exists(out_dir):
                os.mkdir(out_dir)

            out_dir_label = os.path.join(out_dir, 'label')
            if not osp.exists(out_dir_label):
                os.mkdir(out_dir_label)

            out_dir_viz = os.path.join(out_dir,'viz')
            if not osp.exists(out_dir_viz):
                os.mkdir(out_dir_viz)

            print "out_dir_label = ",out_dir_label

            data = json.load(open(json_file))
            img = utils.img_b64_to_array(data['imageData'])
            lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])
            #print 0: background 1: sto
            # for l, name in enumerate(lbl_names):
            #     print '%d: %s' % (l, name)
            captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
            lbl_viz = utils.draw_label(lbl, img, captions)

            #New Name
            NewName = fileName.split('.')[0]
            print osp.join(out_dir,NewName+ '.png')
            # PIL.Image.fromarray(img).save(osp.join(out_dir,NewName+ '_img.png'))
            PIL.Image.fromarray(lbl).save(osp.join(out_dir_label, NewName+ '.png'))
            PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir_viz, NewName+ '_label_viz.png'))

            with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
                for lbl_name in lbl_names:
                    f.write(lbl_name + '\n')

            # 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)
Example #8
0
def json_to_dataset(json_file_path):
    out_dir = osp.basename(json_file_path).replace('.', '_')
    out_dir = osp.join(osp.dirname(json_file_path), out_dir)
    if not osp.exists(out_dir): os.mkdir(out_dir)
    data = json.load(open(json_file_path))
    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])
    lbl_viz = utils.draw_label(lbl, img, lbl_names)
    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
    PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
    PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))
    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('wrote data to %s' % out_dir)
def get_label(img, data_line, data_plane):
    """Gets parallel lines and vertical planes from label json."""

    ## get parallel lines

    # print(data_line['shapes'])
    line2points = defaultdict(list)  # store 2 points on each parallel line
    line_names = [
        "XZ_line",
        "YZ_line",
        "XY_line",
        "XZ_line'",
        "YZ_line'",
        "XY_line'",
    ]
    intersect = []  # common point of plane intersection line
    for each_shape in data_line['shapes']:
        for each_line in line_names:
            if each_shape['label'] == each_line:
                # print(each_shape['points'])
                # print([list(reversed(each_shape['points'][0])), list(reversed(each_shape['points'][1]))])
                line2points[each_line].append([
                    list(reversed(each_shape['points'][0])),
                    list(reversed(each_shape['points'][1]))
                ])
            elif each_shape[
                    'label'] == "intersection":  # common point of plane intersection line
                intersect = list(reversed(each_shape['points'][0])) + [1]
    # print(line2points)

    ## get vertical planes

    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape,
                                                   data_plane['shapes'])

    # lbl:binary array  in: 1  out: 0
    # lbl_names :dict   _background_:0   other labels: positive
    # print(lbl_names)
    mask = []  #  for 3 verticle planes
    for i in range(1, len(lbl_names)):  # ignore background
        mask.append((lbl == i).astype(np.uint8))

    # captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    # lbl_viz = utils.draw_label(lbl, img, captions)
    # plt.imshow(lbl_viz)
    # plt.show()

    return line2points, intersect, mask
Example #10
0
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    args = parser.parse_args()

    json_file = args.json_file

    data = json.load(open(json_file))

    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    lbl_viz = utils.draw_label(lbl, img, captions)

    # lbl_names[0] 默认为背景,对应的像素值为0
    # 解析图片中的对象 像素值不为0(0 对应背景)
    mask = []
    class_id = []
    for i in range(1, len(lbl_names)):  # 跳过第一个class(默认为背景)
        mask.append((lbl == i).astype(
            np.uint8))  # 解析出像素值为1的对应,对应第一个对象 mask 为0、1组成的(0为背景,1为对象)
        class_id.append(i)  # mask与clas 一一对应

    mask = np.transpose(np.asarray(mask, np.uint8),
                        [1, 2, 0])  # 转成[h,w,instance count]
    class_id = np.asarray(class_id, np.uint8)  # [instance count,]
    class_name = lbl_names[1:]  # 不需要包含背景 lbl_names[0] 默认为背景

    plt.subplot(221)
    plt.imshow(img)
    plt.axis('off')

    plt.subplot(222)
    plt.imshow(lbl_viz)
    plt.axis('off')

    plt.subplot(223)
    plt.imshow(mask[:, :, 0], 'gray')
    plt.title(class_name[0] + '\n id ' + str(class_id[0]))
    plt.axis('off')

    plt.subplot(224)
    plt.imshow(mask[:, :, 1], 'gray')
    plt.title(class_name[1] + '\n id ' + str(class_id[1]))
    plt.axis('off')

    plt.show()
def main():
    # parser = argparse.ArgumentParser()
    # parser.add_argument('json_file')
    # args = parser.parse_args()
    #
    # json_file = args.json_file
    # json_file=r"C:\Users\Administrator\Desktop\windows_v1.5.1\data\WIN_20180504_10_05_03_Pro.json"
    json_file = r"C:\Users\Administrator\Desktop\windows_v1.5.1\data\img00000001.json"

    data = json.load(open(json_file))

    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

    lbl_viz = utils.draw_label(lbl, img, lbl_names)

    plt.imshow(lbl_viz)
    plt.show()
def process(json_file, out_dir):
    """
    将label_me的数据转换为mask灰度图
    :param json_file: label_me生成的json文件目录
    :param out_dir:转换后png文件的目录
    :return:暂无
    """
    # 获取json文件列表(用glob直接会拿到绝对路径,不好取文件名字)
    json_file_list = os.listdir(json_file)
    for i in range(0, len(json_file_list)):
        # 获取每个json文件的绝对路径
        path = os.path.join(json_file, json_file_list[i])
        # 提取出.json前的字符作为文件名,以便后续保存Label图片的时候使用
        filename = json_file_list[i][:-5]
        # 拿到后缀
        extension = json_file_list[i][-4:]
        # 只要json文件
        if extension == 'json':
            if os.path.isfile(path):
                data = json.load(open(path))
                # 根据'imageData'字段的字符可以得到原图像
                img = image.img_b64_to_arr(data['imageData'])
                # data['shapes']是json文件中记录着标注的位置及label等信息的字段
                lbl, lbl_names = labelme_shapes_to_label(
                    img.shape, data['shapes'])

                mask = []
                class_id = []
                # 跳过第一个class(因为0默认为背景,跳过不取!)
                for cls in range(1, len(lbl_names)):
                    # mask与class_id 对应记录保存
                    # 举例:当解析出像素值为1,此时对应第一个mask 为0、1组成的(0为背景,1为对象)
                    mask.append((lbl == cls).astype(np.uint8))
                    class_id.append(cls)

                mask = np.transpose(np.asarray(mask, np.uint8), [1, 2, 0])

                if not osp.exists(out_dir):
                    os.mkdir(out_dir)

                cv2.imwrite(osp.join(out_dir, '{}.png'.format(filename)),
                            mask[:, :, 0])
Example #13
0
def main():
    warnings.warn("This script is aimed to demonstrate how to convert the\n"
                  "JSON file to a single image dataset, and not to handle\n"
                  "multiple JSON files to generate a real-use dataset.")

    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    parser.add_argument('-o', '--out', default=None)
    args = parser.parse_args()

    json_file = args.json_file

    if args.out is None:
        out_dir = osp.basename(json_file).replace('.', '_')
        out_dir = osp.join(osp.dirname(json_file), out_dir)
    else:
        out_dir = args.out
    if not osp.exists(out_dir):
        os.mkdir(out_dir)

    data = json.load(open(json_file))

    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    lbl_viz = utils.draw_label(lbl, img, captions)

    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
    PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
    PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

    with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
        for lbl_name in lbl_names:
            f.write(lbl_name + '\n')

    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)
Example #14
0
def read_mask(file_name, save_fold):
    json_file = file_name

    data = json.load(open(json_file))

    img = utils.img_b64_to_arr(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(
        img.shape, data['shapes'])  # lbl:array 0、1 (区域内的为1,之外为0)
    #  lbl_names :dict   _background_ :0   label_wyk:1
    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    #lbl_viz = utils.draw_label(lbl, img, captions)

    mask = []
    class_id = []
    for i in range(1, len(lbl_names)):  #若有多个class(物体) 跳过第一个class(默认为背景)
        mask.append((lbl == i).astype(
            np.uint8))  # 解析出像素值为1的对应,对应第一个对象 mask 为0、1组成的(0为背景,1为对象)
        class_id.append(i)  # mask与clas 一一对应

    mask = np.transpose(np.asarray(mask, np.uint8),
                        [1, 2, 0])  # 转成[h,w,instance count]
    class_id = np.asarray(class_id, np.uint8)  # [instance count,]

    # plt.subplot(221)
    # plt.imshow(img)
    # plt.title("original image")
    # plt.axis('off')
    # plt.subplot(222)
    # plt.imshow(lbl_viz)
    # plt.axis('off')
    # plt.subplot(222)
    # plt.imshow(mask[:,:,0],'gray')

    mask2 = np.ones_like(img)
    for i in range(mask2.shape[2]):
        mask2[:, :, i] = mask.squeeze()
    # plt.subplot(224)
    plt.imshow(mask2 * img)
    plt.axis('off')
    plt.savefig(os.path.join(save_fold, file_name.replace('json', 'jpg')),
                bbox_inches='tight',
                pad_inches=0.0)
Example #15
0
def main():
    warnings.warn("This script is aimed to demonstrate how to convert the\n"
                "JSON file to a single image dataset, and not to handle\n"
                "multiple JSON files to generate a real-use dataset.")

    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    parser.add_argument('-o', '--out', default=None)
    args = parser.parse_args()

    json_file = args.json_file

    if args.out is None:
        out_dir = osp.basename(json_file).replace('.', '_')
        out_dir = osp.join(osp.dirname(json_file), out_dir)
    else:
        out_dir = args.out
    if not osp.exists(out_dir):
        os.mkdir(out_dir)

    data = json.load(open(json_file))

    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    lbl_viz = utils.draw_label(lbl, img, captions)

    PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
    PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
    PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

    with open(osp.join(out_dir, 'label_names.txt'), 'w') as f:
        for lbl_name in lbl_names:
            f.write(lbl_name + '\n')

    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)
def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    args = parser.parse_args()

    json_file = args.json_file

    data = json.load(open(json_file))

    img = utils.img_b64_to_array(data['imageData'])
    lbl, lbl_names = utils.labelme_shapes_to_label(img.shape, data['shapes'])

    captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
    lbl_viz = utils.draw_label(lbl, img, captions)

    plt.subplot(121)
    plt.imshow(img)
    plt.subplot(122)
    plt.imshow(lbl_viz)
    plt.show()
Example #17
0
def get_all_class_mask(json_file_path):
    '''
    returns:  
    img: 原图  
    mask: 所有类别的mask,二值图,0和255  
    img_with_label: 带掩模的图  
    lbl_value_to_names: mask的index可以从lbl_value_to_names得到class名称  
    '''
    if os.path.exists(json_file_path):
        with open(json_file_path) as json_f:
            data = json.load(json_f)
            img = utils.img_b64_to_arr(data['imageData'])
            #lbl是一个mask,每个obj的像素赋值为该obj对应的value
            lbl, lbl_names_to_value = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])  #包含背景0
            captions = [
                '%d: %s' % (l, name)
                for l, name in enumerate(lbl_names_to_value)
            ]
            img_with_label = utils.draw_label(lbl, img, captions)

            tmp = [(l - 1, name) for l, name in enumerate(lbl_names_to_value)
                   if l != 0]
            lbl_value_to_names = {}
            for l, name in tmp:
                lbl_value_to_names[l] = name  #不包含背景

            mask = []
            # instance_id=[]
            for i in range(1, len(lbl_names_to_value)):  # 跳过第一个class(默认为背景)
                mask.append(
                    (lbl == i).astype(np.uint8) * 255
                )  # mask[i]对应第i个对象的mask, 为0、255组成的(0为背景,255为对象),所有对象的mask叠起来组成三维
                # instance_id.append(i) # mask与clas 一一对应
            # all_mask=np.transpose(np.asarray(mask,np.uint8),[1,2,0]) # 转成[h,w,instance count]
            # instance_id=np.asarray(instance_id,np.uint8) # [instance count,]
    else:
        raise Exception("no such a json file!!")

    return img, mask, img_with_label, lbl_value_to_names
Example #18
0
def main():
    warnings.warn("This script is aimed to demonstrate how to convert the\n"
                  "JSON file to a single image dataset, and not to handle\n"
                  "multiple JSON files to generate a real-use dataset.")

    parser = argparse.ArgumentParser()
    parser.add_argument('json_file')
    parser.add_argument('-o', '--out', default=None)
    args = parser.parse_args()

    json_file = args.json_file

    #freedom
    list_path = os.listdir(json_file)
    print('freedom =', json_file)
    for i in range(0, len(list_path)):
        path = os.path.join(json_file, list_path[i])
        if os.path.isfile(path):

            data = json.load(open(path))
            img = utils.img_b64_to_arr(data['imageData'])
            lbl, lbl_names = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])

            captions = [
                '%d: %s' % (l, name) for l, name in enumerate(lbl_names)
            ]

            lbl_viz = utils.draw_label(lbl, img, captions)
            out_dir = osp.basename(path).replace('.', '_')
            save_file_name = out_dir
            out_dir = osp.join(osp.dirname(path), out_dir)

            if not osp.exists(json_file + '\\' + 'labelme_json'):
                os.mkdir(json_file + '\\' + 'labelme_json')
            labelme_json = json_file + '\\' + 'labelme_json'

            out_dir1 = labelme_json + '\\' + save_file_name
            if not osp.exists(out_dir1):
                os.mkdir(out_dir1)

            PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name +
                                          '_img.png')
            PIL.Image.fromarray(lbl).save(out_dir1 + '\\' + save_file_name +
                                          '_label.png')

            PIL.Image.fromarray(lbl_viz).save(out_dir1 + '\\' +
                                              save_file_name +
                                              '_label_viz.png')

            if not osp.exists(json_file + '\\' + 'mask_png'):
                os.mkdir(json_file + '\\' + 'mask_png')
            mask_save2png_path = json_file + '\\' + 'mask_png'
            ################################
            #mask_pic = cv2.imread(out_dir1+'\\'+save_file_name+'_label.png',)
            #print('pic1_deep:',mask_pic.dtype)

            mask_dst = img_as_ubyte(lbl)  #mask_pic
            print('pic2_deep:', mask_dst.dtype)
            cv2.imwrite(
                mask_save2png_path + '\\' + save_file_name + '_label.png',
                mask_dst)
            ##################################

            with open(osp.join(out_dir1, 'label_names.txt'), 'w') as f:
                for lbl_name in lbl_names:
                    f.write(lbl_name + '\n')

            warnings.warn('info.yaml is being replaced by label_names.txt')
            info = dict(label_names=lbl_names)
            with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
                yaml.safe_dump(info, f, default_flow_style=False)

            print('Saved to: %s' % out_dir1)
Example #19
0
def main():
    json_file = 'E:\项目\学习1\Mask_RCNN\image\oc\\11'
    list = os.listdir(json_file)
    if not os.path.exists(json_file + '/' + 'pic'):
        os.makedirs(json_file + '/' + 'pic')
    if not os.path.exists(json_file + '/' + 'cv_mask'):
        os.makedirs(json_file + '/' + 'cv_mask')
    if not os.path.exists(json_file + '/' + 'labelme_json'):
        os.makedirs(json_file + '/' + 'labelme_json')
    if not os.path.exists(json_file + '/' + 'json'):
        os.makedirs(json_file + '/' + 'json')

    for i in range(0, len(list)):
        # python open()函数用于打开一个文件,有的时候list[i]不是文件
        path = os.path.join(json_file, list[i])
        if os.path.isfile(path):
            # 拷贝文件函数,属于shutil库
            copyfile(path, json_file + '/json/' + list[i])
            data = json.load(open(path))
            img = utils.img_b64_to_arr(data['imageData'])
            lbl, lbl_names = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])

            captions = [
                '%d: %s' % (l, name) for l, name in enumerate(lbl_names)
            ]
            lbl_viz = utils.draw_label(lbl, img, captions)
            out_dir = osp.basename(list[i]).replace('.', '_')
            out_dir = osp.join(osp.dirname(list[i]), out_dir)
            # 只取filename的前几个字符就行
            filename = out_dir[:-5]
            # 文件路径
            out_dir = json_file + "/" + 'labelme_json' + "/" + out_dir
            out_dir1 = json_file + "/" + 'pic'
            out_dir2 = json_file + "/" + 'cv_mask'

            if not osp.exists(out_dir):
                os.mkdir(out_dir)
            # 写入原图
            PIL.Image.fromarray(img).save(osp.join(out_dir, 'img' + '.png'))
            PIL.Image.fromarray(img).save(
                osp.join(out_dir1,
                         str(filename) + '.png'))
            # 写入mask图
            utils.lblsave(osp.join(out_dir, 'label.png'), lbl)
            utils.lblsave(osp.join(out_dir2, str(filename) + '.png'), lbl)

        PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))

        with open(osp.join(out_dir, 'label_names' + '.txt'), 'w') as f:
            for lbl_name in lbl_names:
                f.write(lbl_name + '\n')

        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.dump(info, f, default_flow_style=False)

        fov = open(osp.join(out_dir, 'info' + '.yaml'), 'w')
        for key in info:
            fov.writelines(key)
            fov.write(':\n')
        for k, v in lbl_names.items():
            # 这里需要注意,按照标准的labelme生成的yaml文件的格式,建议转化前看看标准的什么样
            fov.write('-')
            fov.write(' ')
            fov.write(k)
            fov.write('\n')

        fov.close()
        print('Saved to: %s' % out_dir)
Example #20
0
def main():
    warnings.warn("This script is aimed to demonstrate how to convert the\n"
                  "JSON file to a single image dataset, and not to handle\n"
                  "multiple JSON files to generate a real-use dataset.")
    parser = argparse.ArgumentParser()
    parser.add_argument('--json_file',
                        default='jsonFile/',
                        help='path to load json_file. . ')
    parser.add_argument('-o',
                        '--out',
                        default='labeltrain_test',
                        help='path to output mask. . ')
    # parser.add_argument('json_file')
    # parser.add_argument('-o', '--out', default=None)
    args = parser.parse_args()

    json_file = args.json_file
    if args.out is None:
        out_dir = osp.basename(json_file).replace('.', '_')
        out_dir = osp.join(osp.dirname(json_file), out_dir)
    else:
        out_dir = args.out
    if not osp.exists(out_dir):
        os.mkdir(out_dir)
    # print("jsonfile:",json_file)
    # print(out_dir)

    count = os.listdir(json_file)
    # print(count[0:10])
    #
    for i in range(0, len(count)):
        path = os.path.join(json_file, count[i])
        if os.path.isfile(path):
            data = json.load(open(path))

            if data['imageData']:
                imageData = data['imageData']
            else:
                imagePath = os.path.join(os.path.dirname(path),
                                         data['imagePath'])
                with open(imagePath, 'rb') as f:
                    imageData = f.read()
                    imageData = base64.b64encode(imageData).decode('utf-8')
            img = utils.img_b64_to_arr(imageData)

            lbl, lbl_names = utils.labelme_shapes_to_label(
                img.shape, data['shapes'])
            captions = [
                '%d: %s' % (l, name) for l, name in enumerate(lbl_names)
            ]

            lbl_viz = utils.draw_label(lbl, img, captions)
            ####====================================================================
            ####=======creat dir save label ========================================
            json_out_dir = osp.basename(path).replace('.', '_')
            save_file_name = osp.join(osp.dirname(__file__), out_dir,
                                      json_out_dir)
            # print(save_file_name)
            # print(abc)
            #creat dir save label
            if not osp.exists(save_file_name):
                os.mkdir(save_file_name)
            # PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name + '_img.png')
            PIL.Image.fromarray(lbl).save(save_file_name + '/' + 'label.png')
            PIL.Image.fromarray(lbl_viz).save(save_file_name + '/' +
                                              'label_viz.png')
            ####=====================================================================

            #========================================================================
            #==============transform label.png to uint8 for train====================
            mask_path = out_dir
            mask_name = osp.basename(path).split(".")[0]
            mask_dst = img_as_ubyte(lbl)  # mask_pic
            print('pic2_deep:', mask_dst.dtype)
            cv2.imwrite(mask_path + '/' + mask_name + '.png', mask_dst)
            ####======================================================================

            with open(osp.join(save_file_name, 'label_names.txt'), 'w') as f:
                for lbl_name in lbl_names:
                    f.write(lbl_name + '\n')

            warnings.warn('info.yaml is being replaced by label_names.txt')
            info = dict(label_names=lbl_names)
            with open(osp.join(save_file_name, 'info.yaml'), 'w') as f:
                yaml.safe_dump(info, f, default_flow_style=False)

            print('Saved to: %s' % save_file_name)
Example #21
0
def processor(json_file, encoding="utf-8", flag=False):
    """
    input a json folder,or single file path
    """
    if not os.path.exists(json_file):
        raise FileExistsError('Not Found')
    else:
        if os.path.isfile(json_file):
            if not json_file.endswith('.json'):
                raise TypeError('Must be a *.json file')
            else:
                parent_path = os.path.dirname(json_file) + os.sep
                try:
                    data = json.load(open(json_file, encoding=encoding))
                    img = lUtils.img_b64_to_arr(data['imageData'])

                    lbl, lbl_names = lUtils.labelme_shapes_to_label(
                        img.shape, data['shapes'])

                    captions = [
                        '%d: %s' % (l, name)
                        for l, name in enumerate(lbl_names)
                    ]

                    lbl_viz = lUtils.draw_label(lbl, img, captions)

                    ##
                    if np.max(lbl) == 255 or np.max(lbl) == 1:
                        lbl[lbl > 0] = 255
                    ##

                    lbl = np.array(lbl, dtype=np.uint8)

                    if not flag:

                        out_dir = osp.basename(json_file).split('.json')[0]
                        save_file_name = out_dir

                        if not osp.exists(parent_path + 'mask'):
                            os.mkdir(parent_path + 'mask')
                        maskdir = parent_path + 'mask'

                        if not osp.exists(parent_path + 'mask_viz'):
                            os.mkdir(parent_path + 'mask_viz')
                        maskvizdir = parent_path + 'mask_viz'

                        out_dir1 = maskdir
                        PIL.Image.fromarray(lbl).save(out_dir1 + '/' +
                                                      save_file_name + '.png')
                        PIL.Image.fromarray(lbl_viz).save(maskvizdir + '/' +
                                                          save_file_name +
                                                          '_label_viz.png')
                        with open(osp.join(out_dir1, 'label_names.txt'),
                                  'w') as f:
                            for lbl_name in lbl_names:
                                f.write(lbl_name + '\n')

                        info = dict(label_names=lbl_names)
                        with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
                            yaml.safe_dump(info, f, default_flow_style=False)

                        print('Saved to: %s' % out_dir1)

                    else:
                        return lbl
                except Exception as e:
                    # print(e)
                    logger.error(e)

        else:
            list_path = os.listdir(json_file)
            # print('freedom =', json_file)
            for i in tqdm(range(0, len(list_path))):
                path = os.path.join(json_file, list_path[i])
                if os.path.isfile(path) and path.endswith('.json'):
                    try:
                        data = json.load(open(path, encoding=encoding))
                        img = lUtils.img_b64_to_arr(data['imageData'])
                        lbl, lbl_names = lUtils.labelme_shapes_to_label(
                            img.shape, data['shapes'])

                        captions = [
                            '%d: %s' % (l, name)
                            for l, name in enumerate(lbl_names)
                        ]

                        lbl_viz = lUtils.draw_label(lbl, img, captions)

                        # lbl[lbl>0] = 255
                        if np.max(lbl) == 255 or np.max(lbl) == 1:
                            lbl[lbl > 0] = 255
                        lbl = np.array(lbl, dtype=np.uint8)

                        # out_dir = osp.basename(path).replace('.', '_')
                        out_dir = osp.basename(path).split('.json')[0]
                        save_file_name = out_dir
                        # out_dir = osp.join(osp.dirname(path), out_dir)

                        if not osp.exists(json_file + 'mask'):
                            os.mkdir(json_file + 'mask')
                        maskdir = json_file + 'mask'

                        if not osp.exists(json_file + 'mask_viz'):
                            os.mkdir(json_file + 'mask_viz')
                        maskvizdir = json_file + 'mask_viz'

                        out_dir1 = maskdir
                        # if not osp.exists(out_dir1):
                        #     os.mkdir(out_dir1)

                        # PIL.Image.fromarray(img).save(out_dir1 + '\\' + save_file_name + '_img.png')
                        PIL.Image.fromarray(lbl).save(out_dir1 + '/' +
                                                      save_file_name + '.png')

                        PIL.Image.fromarray(lbl_viz).save(maskvizdir + '/' +
                                                          save_file_name +
                                                          '_label_viz.png')

                        with open(osp.join(out_dir1, 'label_names.txt'),
                                  'w') as f:
                            for lbl_name in lbl_names:
                                f.write(lbl_name + '\n')

                        # warnings.warn('info.yaml is being replaced by label_names.txt')
                        info = dict(label_names=lbl_names)
                        with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
                            yaml.safe_dump(info, f, default_flow_style=False)

                        print('Saved to: %s' % out_dir1)
                    except Exception as e:
                        # print(e)
                        logger.error(e)
Example #22
0
def main():
    warnings.warn("This script is aimed to demonstrate how to convert the\n"
                  "JSON file to a single image dataset, and not to handle\n"
                  "multiple JSON files to generate a real-use dataset.")

    json_file = "results/annotations/"
    images_path = "results/images/"
    save_dir = "results"

    # freedom
    #list_path = os.listdir(json_file)
    print('freedom =', json_file)
    #for i in range(0, len(list_path)):
    for root_dir, _, files in os.walk(json_file):
        #path = os.path.join(json_file, list_path[i])
        for file in files:
            path = os.path.join(root_dir, file)
            sub_dir = path.split('/')[-2]
            if os.path.isfile(path):
                print('---', path)
                try:
                    data = json.load(open(path), encoding='utf-8')
                    if data['imageData']:
                        imageData = data['imageData']
                    else:
                        #imagePath = os.path.join(os.path.dirname(json_file), data['imagePath'])
                        imagePath = os.path.join(images_path, sub_dir,
                                                 data['imagePath'])
                        with open(imagePath, 'rb') as f:
                            imageData = f.read()
                            imageData = base64.b64encode(imageData).decode(
                                'utf-8')

                    img = utils.img_b64_to_arr(imageData)

                    lbl, lbl_names = utils.labelme_shapes_to_label(
                        img.shape, data['shapes'])

                    captions = [
                        '%d: %s' % (l, name)
                        for l, name in enumerate(lbl_names)
                    ]

                    # lbl_viz = utils.draw_label(lbl, img, captions)
                    lbl_viz = labelmeutils.draw_label(lbl, img, captions)
                    out_dir = osp.basename(path).split('.json')[0]
                    save_file_name = out_dir

                    if not osp.exists(osp.join(save_dir, 'mask')):
                        os.mkdir(osp.join(save_dir, 'mask'))
                    maskdir = osp.join(save_dir, 'mask')

                    if not osp.exists(osp.join(save_dir, 'mask_viz')):
                        os.mkdir(osp.join(save_dir, 'mask_viz'))
                    maskvizdir = osp.join(save_dir, 'mask_viz')

                    out_dir1 = maskdir

                    PIL.Image.fromarray(lbl).save(
                        osp.join(out_dir1, save_file_name + '.png'))

                    PIL.Image.fromarray(lbl_viz).save(
                        osp.join(maskvizdir,
                                 save_file_name + '_label_viz.png'))

                    with open(osp.join(out_dir1, 'label_names.txt'), 'w') as f:
                        for lbl_name in lbl_names:
                            f.write(lbl_name + '\n')

                    warnings.warn(
                        'info.yaml is being replaced by label_names.txt')
                    info = dict(label_names=lbl_names)
                    with open(osp.join(out_dir1, 'info.yaml'), 'w') as f:
                        yaml.safe_dump(info, f, default_flow_style=False)

                    print('Saved to: %s' % out_dir1)
                except Exception as exc:
                    print('generated an exception: %s' % (exc))
                    continue
import PIL.Image
import yaml

from labelme import utils

json_file = 'F:/Graduate/'

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.img_b64_to_arr(data['imageData'])
        lbl, lbl_names = utils.labelme_shapes_to_label(img.shape,
                                                       data['shapes'])

        captions = ['%d: %s' % (l, name) for l, name in enumerate(lbl_names)]
        lbl_viz = utils.draw_label(lbl, img, captions)
        # 返回最后文件名bo_json
        out_dir = osp.basename(list[i]).replace('.', '_')
        #out_dir = osp.join(osp.dirname(list[i]), out_dir)#文件夹路径和文件名合并
        out_dir = osp.join('F:/Graduate', out_dir)
        #out_dir='G:/bo/'

        if not osp.exists(out_dir):
            os.mkdir(out_dir)  #自动创建目录
        '''
        PIL.Image.fromarray(img).save(osp.join(out_dir, 'img.png'))
        PIL.Image.fromarray(lbl).save(osp.join(out_dir, 'label.png'))
        PIL.Image.fromarray(lbl_viz).save(osp.join(out_dir, 'label_viz.png'))