-
Notifications
You must be signed in to change notification settings - Fork 104
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
Comments
恰恰相反,你这不是构建成功了嘛😂只是缺少模型库,所以未能启动引擎而已。 下载一个1.3.0版的release包,将其中的models文件夹整个拷贝到你编译生成的 ppocr.exe 同目录下,即可。 可选传入 |
我也是同样的问题,也把models文件夹整个拷贝到panddleOCR-Json_v1.3.0文件夹下面了(和panddleOCR-json.exe同路径),然后还是同样的错误。 |
我是在matlab调用,文件也都有,这些错误怎么搞呢? 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) 报错:
2、使用PaddleOCR-json.exe exepath = '.\PaddleOCR-json_v.1.3.0\PaddleOCR-json.exe';
command = [exepath,' ',imagepath];
[status,cmout] = system(command); 报错:
|
你先试试,不通过程序调用,直接打开 PaddleOCR-json.exe 有没有问题。 PaddleOCR-json.exe 的工作路径必须是它所在的文件夹。可能你在调用时,调用方默认设置了另外的工作路径,导致相对路径找不到模型库。 |
对,这个界面表示 PaddleOCR-json 初始化成功了,能正常读入models文件夹中的模型库。所以肯定是调用方的代码编写有问题,而我估计大概率是工作路径没设置对。 |
1、更改了绝对路径,也将matlab程序脚本放在PaddleOCR-json.exe同目录下,确实不会报错了。 |
嗯,因为你用堵塞的方式来调用OCR(即PaddleOCR-json.exe程序退出后,你的代码才能得到返回结果)。而 PaddleOCR-json 默认是循环工作模式,即识别一张图片后不会主动退出,而是等待下一张图片任务。因此,就算 PaddleOCR-json 输出了识别结果,因为它没有退出,你的堵塞模式的代码也无法得到命令行输出。 有两种解法:
|
另外,我发现了你原本代码里的一个错误,可能是这个错误导致了读模型库失败,而不是工作路径的问题。 改正上述错误之后,v1.3.0和1.2.1的表现应该一致,即既不需要绝对路径,也不需要移动matlab脚本位置。 |
这是一个示例,演示如何用非堵塞模式处理多张图片。(我不熟悉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); |
这是因为单次识别模式可能对中文路径的兼容性不好。如果要用单次识别模式,请准备纯英文路径的图片。 |
非常感谢,我确定matlab没有多线程运行的功能,不知道这个非阻塞模式是否和这个相关,如果是,就不行了,后面我会试试看,先搞定单次识别吧,再加上for循环 |
非常抱歉可能闹了乌龙,我查了一下,matlab似乎没有提供管道的机制,所以我示例中的 popen() 可能不存在这个函数。 你也许可能找找第三方库或别的方式,实现管道通信的机制。或者,只能使用单次识别模式+英文路径。 |
谢谢特地查询,后面我试试看,结果会在此反馈。 |
你这已经识别成功了。后续只需要将这个json字符串转为matlab对象,就可以读取结果的每个字段。 |
matlab确实不能用管道模式,单次识别模式+英文路径+for循环,每张图大概3s,还可以接受... |
请问如何设置PaddleOCR-json.exe 的工作路径?我的调用代码所在的位置就是其工作路径吗? |
搞定了。 |
这是什么问题?
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.
The text was updated successfully, but these errors were encountered: