Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

构建失败 #54

Closed
Auroraol opened this issue Jun 22, 2023 · 21 comments
Closed

构建失败 #54

Auroraol opened this issue Jun 22, 2023 · 21 comments

Comments

@Auroraol
Copy link

这是什么问题?
6C9CB29F

config_path [] does not exist.
[ERROR] det_model_dir [models/ch_PP-OCRv3_det_infer] does not exist. rec_model_dir [models/ch_PP-OCRv3_rec_infer] does not exist.

image

@hiroi-sora
Copy link
Owner

hiroi-sora commented Jun 22, 2023

恰恰相反,你这不是构建成功了嘛😂只是缺少模型库,所以未能启动引擎而已。

下载一个1.3.0版的release包,将其中的models文件夹整个拷贝到你编译生成的 ppocr.exe 同目录下,即可。

可选传入-config_path来手动指定加载哪一套模型库,比如 ppocr.exe -config_path="models/config_german_v2.txt"

@Auroraol
Copy link
Author

谢谢啦
6CAB68FB

hiroi-sora added a commit that referenced this issue Jun 23, 2023
@lil-i321
Copy link

我也是同样的问题,也把models文件夹整个拷贝到panddleOCR-Json_v1.3.0文件夹下面了(和panddleOCR-json.exe同路径),然后还是同样的错误。

@lil-i321
Copy link

我是在matlab调用,文件也都有,这些错误怎么搞呢?
1、配置config代码:

exepath = '.\PaddleOCR-json_v.1.3.0\PaddleOCR-json.exe';
configpath = '.\PaddleOCR-json_v.1.3.0\models\config_chinese.txt';
commandconfig = [exepath,' "--config_path" ',configpath];
[status,cmout] = system(commandconfig)   

报错:

cmout =
'PaddleOCR-json v1.3.0
     Load config from [.\PaddleOCR-json_v.1.3.0\models\config_chinese.txt] : det_model_dir set to models/ch_PP-OCRv3_det_infercls_model_dir set to models/ch_ppocr_mobile_v2.0_cls_inferrec_model_dir set to models/ch_PP-OCRv3_rec_inferrec_char_dict_path set to models/dict_chinese.txt. 
     [ERROR] det_model_dir [models/ch_PP-OCRv3_det_infer] does not exist. rec_model_dir [models/ch_PP-OCRv3_rec_infer] does not exist. 
     ' 

2、使用PaddleOCR-json.exe

exepath = '.\PaddleOCR-json_v.1.3.0\PaddleOCR-json.exe';
command = [exepath,' ',imagepath];
[status,cmout] = system(command);

报错:

cmout =
    'PaddleOCR-json v1.3.0
     config_path [] does not exist. 
     [ERROR] det_model_dir [models/ch_PP-OCRv3_det_infer] does not exist. rec_model_dir [models/ch_PP-OCRv3_rec_infer] does not exist. 
     '

图片

@hiroi-sora
Copy link
Owner

@lil-i321

你先试试,不通过程序调用,直接打开 PaddleOCR-json.exe 有没有问题。
如果直接运行OK。通过程序调用失败,那么是你代码调用exe的工作路径的问题。

PaddleOCR-json.exe 的工作路径必须是它所在的文件夹。可能你在调用时,调用方默认设置了另外的工作路径,导致相对路径找不到模型库。
请尝试手动设置工作路径,或者传入绝对路径。

@lil-i321
Copy link

lil-i321 commented Aug 19, 2023

@lil-i321

你先试试,不通过程序调用,直接打开 PaddleOCR-json.exe 有没有问题。 如果直接运行OK。通过程序调用失败,那么是你代码调用exe的工作路径的问题。

PaddleOCR-json.exe 的工作路径必须是它所在的文件夹。可能你在调用时,调用方默认设置了另外的工作路径,导致相对路径找不到模型库。 请尝试手动设置工作路径,或者传入绝对路径。

1、matlab调用PaddleOCR-json.v1.2.1,不会报错,但是matlab一直会run下去,10min还没停,就1张100k的图片。
Umi-OCR这个软件,10张差不多的图片,18s就提取完了。
2、直接打开1.3.0的 PaddleOCR-json.exe是这个界面
图片

@hiroi-sora
Copy link
Owner

hiroi-sora commented Aug 19, 2023

直接打开1.3.0的 PaddleOCR-json.exe是这个界面

对,这个界面表示 PaddleOCR-json 初始化成功了,能正常读入models文件夹中的模型库。所以肯定是调用方的代码编写有问题,而我估计大概率是工作路径没设置对。

@lil-i321
Copy link

直接打开1.3.0的 PaddleOCR-json.exe是这个界面

对,这个界面表示 PaddleOCR-json 初始化成功了。所以肯定是调用方的代码编写有问题,而我估计大概率是工作路径没设置对。

1、更改了绝对路径,也将matlab程序脚本放在PaddleOCR-json.exe同目录下,确实不会报错了。
但是对于1.2.1,这两个额外配置都是不需要的。
2、新的问题是,1.3.0和1.2.1,调用后,一直在运行,没有一点停下来的意思。。。。这是不正常的吧?

@hiroi-sora
Copy link
Owner

没有一点停下来的意思

嗯,因为你用堵塞的方式来调用OCR(即PaddleOCR-json.exe程序退出后,你的代码才能得到返回结果)。而 PaddleOCR-json 默认是循环工作模式,即识别一张图片后不会主动退出,而是等待下一张图片任务。因此,就算 PaddleOCR-json 输出了识别结果,因为它没有退出,你的堵塞模式的代码也无法得到命令行输出。

有两种解法:

  1. 使用单次识图模式,见 文档
  2. 将你的代码改写为非堵塞模式。

@hiroi-sora
Copy link
Owner

hiroi-sora commented Aug 19, 2023

另外,我发现了你原本代码里的一个错误,可能是这个错误导致了读模型库失败,而不是工作路径的问题。
configpath = '.\PaddleOCR-json_v.1.3.0\models\config_chinese.txt';
这句写错了,模型库的相对路径,是相对于PaddleOCR-json.exe的位置,而不是相对于调用方脚本的位置。正确的是:
configpath = 'models\config_chinese.txt';

改正上述错误之后,v1.3.0和1.2.1的表现应该一致,即既不需要绝对路径,也不需要移动matlab脚本位置。

@lil-i321
Copy link

没有一点停下来的意思

嗯,因为你用堵塞的方式来调用OCR(即PaddleOCR-json.exe程序退出后,你的代码才能得到返回结果)。而 PaddleOCR-json 默认是循环工作模式,即识别一张图片后不会主动退出,而是等待下一张图片任务。因此,就算 PaddleOCR-json 输出了识别结果,因为它没有退出,你的堵塞模式的代码也无法得到命令行输出。

有两种解法:

1. 使用单次识图模式,
2. 将你的代码改写为非堵塞模式。

单次识图模式,出现这个错误
图片
图片

@hiroi-sora
Copy link
Owner

hiroi-sora commented Aug 19, 2023

@lil-i321

这是一个示例,演示如何用非堵塞模式处理多张图片。(我不熟悉matlab,有错请见谅)

% 图片地址列表
imagePaths = {'test1.png', 'test2.png', 'test3.png'};

% 配置文件路径
configPath = 'models\config_chinese.txt';

% 导入 JSON 库
json = jsondecode('{"image_path": ""}');

% 打开管道
cmd = '.\PaddleOCR-json_v.1.3.0\PaddleOCR-json.exe --config_path "%s"';
pipe = popen(sprintf(cmd, configPath), 'w');

% 循环处理每个图片
for i = 1:numel(imagePaths)
    % 获取当前图片地址
    imagePath = imagePaths{i};

    % 构造 JSON 对象
    json.image_path = imagePath;
    jsonString = jsonencode(json);

    % 转义 JSON 字符串
    jsonString = matlab.net.base64encode(uint8(jsonString));

    % 发送转义后的 JSON 字符串到管道
    fprintf(pipe, '%s\n', jsonString);

    % 刷新管道缓冲区
    fflush(pipe);

    % 监听管道回传的结果
    result = fgets(pipe);
    disp(result);
    % TODO:对result做反ascii转义 和 json解析
end

% 关闭管道
pclose(pipe);

@hiroi-sora
Copy link
Owner

单次识图模式,出现这个错误

这是因为单次识别模式可能对中文路径的兼容性不好。如果要用单次识别模式,请准备纯英文路径的图片。
如果需要处理中文路径,那么请使用循环模式+json传入值,像上面我给的例子。

@lil-i321
Copy link

lil-i321 commented Aug 19, 2023

@lil-i321

这是一个示例,演示如何用非堵塞模式处理多张图片。(我不熟悉matlab,有错请见谅)

非常感谢,我确定matlab没有多线程运行的功能,不知道这个非阻塞模式是否和这个相关,如果是,就不行了,后面我会试试看,先搞定单次识别吧,再加上for循环

@hiroi-sora
Copy link
Owner

@lil-i321

非常抱歉可能闹了乌龙,我查了一下,matlab似乎没有提供管道的机制,所以我示例中的 popen() 可能不存在这个函数。

你也许可能找找第三方库或别的方式,实现管道通信的机制。或者,只能使用单次识别模式+英文路径。

@lil-i321
Copy link

单次识图模式,出现这个错误

这是因为单次识别模式可能对中文路径的兼容性不好。如果要用单次识别模式,请准备纯英文路径的图片。 如果需要处理中文路径,那么请使用循环模式+json传入值,像上面我给的例子。

非常感谢,图片名改成英文就可以了,但是不能转成文字,我还需要配置什么呢?
图片

@lil-i321
Copy link

@lil-i321

非常抱歉可能闹了乌龙,我查了一下,matlab似乎没有提供管道的机制,所以我示例中的 popen() 可能不存在这个函数。

你也许可能找找第三方库或别的方式,实现管道通信的机制。或者,只能使用单次识别模式+英文路径。

谢谢特地查询,后面我试试看,结果会在此反馈。

@hiroi-sora
Copy link
Owner

但是不能转成文字,我还需要配置什么呢?

你这已经识别成功了。后续只需要将这个json字符串转为matlab对象,就可以读取结果的每个字段。

https://ww2.mathworks.cn/help/matlab/ref/jsondecode.html

@lil-i321
Copy link

单次识别模式+英文路径

matlab确实不能用管道模式,单次识别模式+英文路径+for循环,每张图大概3s,还可以接受...
谢谢作者的程序与解答!!!

@lil-i321
Copy link

PaddleOCR-json.exe 的工作路径必须是它所在的文件夹。可能你在调用时,调用方默认设置了另外的工作路径,导致相对路径找不到模型库。

请问如何设置PaddleOCR-json.exe 的工作路径?我的调用代码所在的位置就是其工作路径吗?
能实现,将任意位置的PaddleOCR-json.exe路径传给matlab程序脚本 吗?
现在只能是PaddleOCR-json.exe和所有的matlab程序脚本 都在一个文件夹下,才能正常工作。

@lil-i321
Copy link

请问如何设置PaddleOCR-json.exe 的工作路径?我的调用代码所在的位置就是其工作路径吗? 能实现,将任意位置的PaddleOCR-json.exe路径传给matlab程序脚本 吗? 现在只能是PaddleOCR-json.exe和所有的matlab程序脚本 都在一个文件夹下,才能正常工作。

搞定了。
1、matlab程序脚本 和 PaddleOCR-json.exe ,不必在一个文件夹下,
2、cd(which('PaddleOCR-json.exe')),设置PaddleOCR-json.exe所在路径为当前文件夹即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants