首页 PaddleOCR 帖子详情
请教 PaddleOCR对测试集预测并将图片排序输出txt文件--错误 已解决
收藏
快速回复
PaddleOCR 问答识别OCR文本 2330 3
请教 PaddleOCR对测试集预测并将图片排序输出txt文件--错误 已解决
收藏
快速回复
PaddleOCR 问答识别OCR文本 2330 3

修改后的infer_rec代码如下所示:

1、其中使用了

infer_list = get_image_file_list(infer_img)
infer_list.sort(key=lambda x: int(re.split('/home/aistudio/data/test_images/|.jpg',x)[1]))

对输测试集图片进行排序。

2、使用了

f = open('test2.txt',mode='w',encoding='utf8')

f.write('new_name\tvalue\n')

f.write('{}\t{}\n'.format(infer_list[i].replace('/home/aistudio/data/test_images/', ''),preds_text))

语句将输出写入txt文件。

但是输出结果得到的txt文件中,图片序号与预测文本不对应(虽然txt文件中按照图片序号进行了排序,但是图片序号和测试集中图片序号不一样),请问大佬们如何解决?

from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from pyspark.sql.functions import split
import os
import re
import sys
project = 'PaddleOCR'  # 工作项目根目录
sys.path.append(os.getcwd().split(project)[0] + project)
import time
import multiprocessing
import numpy as np

def set_paddle_flags(**kwargs):
    for key, value in kwargs.items():
        if os.environ.get(key, None) is None:
            os.environ[key] = str(value)


# NOTE(paddle-dev): All of these flags should be
# set before `import paddle`. Otherwise, it would
# not take any effect.
set_paddle_flags(
    FLAGS_eager_delete_tensor_gb=0,  # enable GC to save memory
)

from paddle import fluid

# from ppocr.utils.utility import load_config, merge_config
import program
from paddle import fluid
from ppocr.utils.utility import initial_logger
logger = initial_logger()
from ppocr.data.reader_main import reader_main
from ppocr.utils.save_load import init_model
from ppocr.utils.character import CharacterOps
from ppocr.utils.utility import create_module
from ppocr.utils.utility import get_image_file_list
logger = initial_logger()


def main():
    config = program.load_config(FLAGS.config)
    program.merge_config(FLAGS.opt)
    logger.info(config)
    char_ops = CharacterOps(config['Global'])
    config['Global']['char_ops'] = char_ops

    # check if set use_gpu=True in paddlepaddle cpu version
    use_gpu = config['Global']['use_gpu']
    #     check_gpu(use_gpu)

    place = fluid.CUDAPlace(0) if use_gpu else fluid.CPUPlace()
    exe = fluid.Executor(place)

    rec_model = create_module(config['Architecture']['function'])(params=config)

    startup_prog = fluid.Program()
    eval_prog = fluid.Program()
    with fluid.program_guard(eval_prog, startup_prog):
        with fluid.unique_name.guard():
            _, outputs = rec_model(mode="test")
            fetch_name_list = list(outputs.keys())
            fetch_varname_list = [outputs[v].name for v in fetch_name_list]
            print(fetch_varname_list)
    eval_prog = eval_prog.clone(for_test=True)
    exe.run(startup_prog)

    init_model(config, eval_prog, exe)

    blobs = reader_main(config, 'test')()             ###
    # print(blobs)
    infer_img = config['TestReader']['infer_img']
    infer_list = get_image_file_list(infer_img)
    infer_list.sort(key=lambda x: int(re.split('/home/aistudio/data/test_images/|.jpg',x)[1]))   ##
    print(infer_list)

    max_img_num = len(infer_list)
    if len(infer_list) == 0:
        logger.info("Can not find img in infer_img dir.")
    from tqdm import tqdm
    f = open('test2.txt',mode='w',encoding='utf8')   ###
    f.write('new_name\tvalue\n')                     ###

    for i in tqdm( range(max_img_num)):
        # print("infer_img:",infer_list[i])
        img = next(blobs)
        predict = exe.run(program=eval_prog,
                          feed={"image": img},#img
                          fetch_list=fetch_varname_list,
                          return_numpy=False)

        preds = np.array(predict[0])
        if preds.shape[1] == 1:
            preds = preds.reshape(-1)
            preds_lod = predict[0].lod()[0]
            preds_text = char_ops.decode(preds)
        else:
            end_pos = np.where(preds[0, :] == 1)[0]
            if len(end_pos) <= 1:
                preds_text = preds[0, 1:]
            else:
                preds_text = preds[0, 1:end_pos[1]]
            preds_text = preds_text.reshape(-1)
            preds_text = char_ops.decode(preds_text)

        f.write('{}\t{}\n'.format(infer_list[i].replace('/home/aistudio/data/test_images/', ''),preds_text))   ###
        # print("\t index:",preds)
        # print("\t word :",preds_text)
    f.close()
    # save for inference model
    # target_var = []
    # for key, values in outputs.items():
    #     target_var.append(values)

    # fluid.io.save_inference_model(
    #     "./output/",
    #     feeded_var_names=['image'],
    #     target_vars=target_var,
    #     executor=exe,
    #     main_program=eval_prog,
    #     model_filename="model",
    #     params_filename="params")


if __name__ == '__main__':
    parser = program.ArgsParser()
    FLAGS = parser.parse_args()
    FLAGS.config = 'configs/rec/my_rec_ch_train.yml'
    main()
Zidane
已解决
4# 回复于2022-04
最后还是用python搞了个txt排序小算法解决了
1
收藏
回复
全部评论(3)
时间顺序
三岁
#2 回复于2021-12

还是没有很理解,图片顺序和读取以后的文字顺序不匹配对吧

可以看一下读取的时候处理的方式

1
回复
Zidane
#3 回复于2021-12
三岁 #2
还是没有很理解,图片顺序和读取以后的文字顺序不匹配对吧 可以看一下读取的时候处理的方式

ok,我再看看

 

1
回复
Zidane
#4 回复于2022-04

最后还是用python搞了个txt排序小算法解决了

1
回复
需求/bug反馈?一键提issue告诉我们
发现bug?如果您知道修复办法,欢迎提pr直接参与建设飞桨~
在@后输入用户全名并按空格结束,可艾特全站任一用户