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)
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)
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)
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()
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)
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 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
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])
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 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)
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()
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
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)
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)
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)
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)
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'))