def cvt_det(gt_path, save_path, img_folder): """ 将icdar2015格式的gt转换为json格式 :param gt_path: :param save_path: :return: """ gt_dict = {'data_root': img_folder} data_list = [] origin_gt = load(gt_path) for img_name, gt in tqdm(origin_gt.items()): cur_gt = {'img_name': img_name + '.jpg', 'annotations': []} for line in gt: cur_line_gt = {'polygon': [], 'text': '', 'illegibility': False, 'language': 'Latin'} chars_gt = [{'polygon': [], 'char': '', 'illegibility': False, 'language': 'Latin'}] cur_line_gt['chars'] = chars_gt # 字符串级别的信息 cur_line_gt['polygon'] = line['points'] cur_line_gt['text'] = line['transcription'] cur_line_gt['illegibility'] = line['illegibility'] cur_line_gt['language'] = line['language'] cur_gt['annotations'].append(cur_line_gt) data_list.append(cur_gt) gt_dict['data_list'] = data_list save(gt_dict, save_path)
def cvt(gt_path, save_path, img_folder): """ 将icdar2015格式的gt转换为json格式 :param gt_path: :param save_path: :return: """ gt_dict = {'data_root': img_folder} data_list = [] for file_path in tqdm(get_file_list(gt_path, p_postfix=['.txt'])): content = load(file_path) file_path = pathlib.Path(file_path) img_name = file_path.name.replace('.txt', '.jpg') cur_gt = {'img_name': img_name, 'annotations': []} for line in content: cur_line_gt = {'polygon': [], 'text': '', 'illegibility': False, 'language': 'Latin'} chars_gt = [{'polygon': [], 'char': '', 'illegibility': False, 'language': 'Latin'}] cur_line_gt['chars'] = chars_gt line = line.split(',') # 字符串级别的信息 x1, y1, x2, y2, x3, y3, x4, y4 = list(map(float, line[:8])) cur_line_gt['polygon'] = [[x1, y1], [x2, y2], [x3, y3], [x4, y4]] cur_line_gt['text'] = line[-1] cur_line_gt['illegibility'] = True if cur_line_gt['text'] == '*' or cur_line_gt['text'] == '###' else False cur_gt['annotations'].append(cur_line_gt) data_list.append(cur_gt) gt_dict['data_list'] = data_list save(gt_dict, save_path)
def cvt(gt_path, save_path, imgs_folder): gt_dict = {'data_root': imgs_folder} data_list = [] ct = load(gt_path) for img_id, anns in tqdm(ct.items()): img_name = img_id.replace('gt', 'img') + '.jpg' cur_gt = {'img_name': img_name, 'annotations': []} for ann in anns: cur_line_gt = { 'polygon': [], 'text': '', 'illegibility': False, 'language': 'Latin' } chars_gt = [{ 'polygon': [], 'char': '', 'illegibility': False, 'language': 'Latin' }] cur_line_gt['chars'] = chars_gt cur_line_gt['polygon'] = ann['points'] cur_line_gt['illegibility'] = ann['illegibility'] cur_gt['annotations'].append(cur_line_gt) if len(cur_gt['annotations']) > 0: data_list.append(cur_gt) gt_dict['data_list'] = data_list save(gt_dict, save_path) print(len(gt_dict), len(data_list))
def load_data(self, json_path): """ 从json文件中读取出 文本行的坐标和gt,字符的坐标和gt :param json_path: :return: """ content = load(json_path) d = [] for gt in content['data_list']: img_path = os.path.join(content['data_root'], gt['img_name']) polygons = [] texts = [] illegibility_list = [] language_list = [] for annotation in gt['annotations']: if len(annotation['polygon']) == 0: continue polygons.append(annotation['polygon']) texts.append(annotation['text']) illegibility_list.append(annotation['illegibility']) language_list.append(annotation['language']) for char_annotation in annotation['chars']: if len(char_annotation['polygon']) == 0 or len(char_annotation['char']) == 0: continue polygons.append(char_annotation['polygon']) texts.append(char_annotation['char']) illegibility_list.append(char_annotation['illegibility']) language_list.append(char_annotation['language']) d.append({'img_path': img_path, 'polygons': np.array(polygons), 'texts': texts, 'illegibility': illegibility_list, 'language': language_list}) return d
def cvt_rec(gt_path, save_path, img_folder): origin_gt = load(gt_path) file_list = [] for img_name, gt in tqdm(origin_gt.items()): assert len(gt) == 1 gt = gt[0] img_path = os.path.join(img_folder, img_name + '.jpg') file_list.append(img_path + '\t' + gt['transcription'] + '\t' + gt['language']) save(file_list, save_path)
def cvt(gt_path, save_path, img_folder): content = load(gt_path) file_list = [] for line in tqdm(content): line = line.split('\t') img_path = os.path.join(img_folder, line[-2]) if not os.path.exists(img_path): print(img_path) file_list.append(img_path + '\t' + line[-1] + '\t' + 'Chinese') # img = Image.open(img_path) # plt.title(line[-1]) # plt.imshow(img) # plt.show() save(file_list, save_path)
def cvt(gt_path, save_path, img_folder): content = load(gt_path) file_list = [] for i, line in tqdm(enumerate(content)): try: line = line.split('.jpg ') img_path = os.path.join(img_folder, line[-2]) file_list.append(img_path + '.jpg' + '\t' + line[-1] + '\t' + 'Chinese') # img = Image.open(img_path) # plt.title(line[-1]) # plt.imshow(img) # plt.show() except: a = 1 save(file_list, save_path)
def cvt(gt_path, save_path, img_folder): content = load(gt_path) file_list = [] for line in tqdm(content): img_relative_path = line.split(' ')[0] img_path = os.path.join(img_folder, img_relative_path) img_path = pathlib.Path(img_path) label = img_path.stem.split('_')[1] if not img_path.exists(): print(img_path) file_list.append(str(img_path) + '\t' + label + '\t' + 'English') # img = Image.open(img_path) # plt.title(label) # plt.imshow(img) # plt.show() save(file_list, save_path)
def cvt(gt_path, save_path, img_folder): """ 将icdar2015格式的gt转换为json格式 :param gt_path: :param save_path: :return: """ gt_dict = {'data_root': img_folder} data_list = [] for file_path in tqdm(get_file_list(gt_path, p_postfix=['.json'])): content = load(file_path) file_path = pathlib.Path(file_path) img_name = file_path.stem + '.jpg' cur_gt = {'img_name': img_name, 'annotations': []} char_polygon_list, char_illegibility_list, char_text_list = decode_chars( content['chars']) for line in content['lines']: cur_line_gt = { 'polygon': [], 'text': '', 'illegibility': False, 'language': 'Latin' } chars_gt = [{ 'polygon': [], 'char': '', 'illegibility': False, 'language': 'Latin' }] cur_line_gt['chars'] = chars_gt # 字符串级别的信息 cur_line_gt['polygon'] = np.array(line['points']).reshape( -1, 2).tolist() cur_line_gt['text'] = line['transcription'] cur_line_gt[ 'illegibility'] = True if line['ignore'] == 1 else False str_len = len(line['transcription']) # 字符信息 flag = False for char_idx in range(len(char_polygon_list)): for str_idx in range(1, str_len + 1): if ''.join( char_text_list[char_idx:char_idx + str_idx]) == line['transcription']: chars_gt = [] for j in range(char_idx, char_idx + str_idx): chars_gt.append({ 'polygon': char_polygon_list[j], 'char': char_text_list[j], 'illegibility': char_illegibility_list[j], 'language': 'Latin' }) cur_line_gt['chars'] = chars_gt char_polygon_list = char_polygon_list[char_idx + str_len:] char_text_list = char_text_list[char_idx + str_len:] char_illegibility_list = char_illegibility_list[ char_idx + str_len:] flag = True break if flag: break cur_gt['annotations'].append(cur_line_gt) data_list.append(cur_gt) gt_dict['data_list'] = data_list save(gt_dict, save_path)
def __init__(self, txt_path, transform=None, target_transform=None): self.data_list = load(txt_path) self.transform = transform self.target_transform = target_transform