예제 #1
0
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)
예제 #2
0
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)
예제 #3
0
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))
예제 #4
0
 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
예제 #5
0
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)
예제 #6
0
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)
예제 #7
0
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)
예제 #8
0
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)
예제 #9
0
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)
예제 #10
0
 def __init__(self, txt_path, transform=None, target_transform=None):
     self.data_list = load(txt_path)
     self.transform = transform
     self.target_transform = target_transform