PaddlePaddle / PaddleOCR

Awesome multilingual OCR toolkits based on PaddlePaddle (practical ultra lightweight OCR system, support 80+ languages recognition, provide data annotation and synthesis tools, support training and deployment among server, mobile, embedded and IoT devices)
Apache License 2.0
38.99k stars 7.32k forks source link

Fix the bug where Python scripts fail to execute PDF text recognition… #11994

Closed guangyunms closed 3 weeks ago

guangyunms commented 3 weeks ago
  1. 修复Python脚本执行pdf文本识别任务失败的BUG,优化判断pdf文件的逻辑。
  2. 为版面分析的quickstart文档添加案例。
paddle-bot[bot] commented 3 weeks ago

Thanks for your contribution!

guangyunms commented 3 weeks ago

原PR为# 11984,因为原PR的commit message过于混乱,而重新创建PR。

GreatV commented 3 weeks ago

https://github.com/PaddlePaddle/PaddleOCR/blob/00f0d42d9bf61d7fe5b70bc6bd87d809724d5abc/paddleocr.py#L845-L960

这里已经有相关的逻辑了,PR里添加的与现有的有什么异同

GreatV commented 3 weeks ago

版面分析的quickstart文档案例确实没有提供pdf格式的处理 demo。感觉可以把main里面相关内容提出来改一改,做一个pdf格式的demo。

guangyunms commented 3 weeks ago

https://github.com/PaddlePaddle/PaddleOCR/blob/00f0d42d9bf61d7fe5b70bc6bd87d809724d5abc/paddleocr.py#L845-L960

这里已经有相关的逻辑了,PR里添加的与现有的有什么异同

我的贡献参考了这里的代码。异同在于已有的代码是通过命令行方式运行的,而我的贡献是通过Python脚本运行的。开发者可能更习惯Python脚本的方式

guangyunms commented 3 weeks ago

版面分析的quickstart文档案例确实没有提供pdf格式的处理 demo。感觉可以把main里面相关内容提出来改一改,做一个pdf格式的demo。

确实,我目前参考quickstart文档里已有的案例写了一个demo。

GreatV commented 3 weeks ago

main里面是先把pdf文件解析成单个图片,然后再对单个图片处理。可能并不需要直接传pdf到 PPStructure engine。只需要把demo改成先解析pdf,再处理图片的形式。这样改动最小,也解决了用户的疑惑。

guangyunms commented 3 weeks ago

main里面是先把pdf文件解析成单个图片,然后再对单个图片处理。可能并不需要直接传pdf到 PPStructure engine。只需要把demo改成先解析pdf,再处理图片的形式。这样改动最小,也解决了用户的疑惑。

这样子也可以的,我觉得可以把两种方式都写上,一种是直接传pdf,因为现有文档里命令行的运行方式就是直接传入的pdf文件路径,用户看了之后可能觉得这种更符合使用的直觉。另一种是用户自己先对pdf进行处理解析成图片,再处理图片。

写好之后我再合并到之前的版面分析里吧。

您这边觉得如何? @GreatV

GreatV commented 3 weeks ago

@guangyunms 看了一下,ocr部分是支持pdf infer的,所以这么改也是合理的。可以按照你的想法做。

guangyunms commented 3 weeks ago
  1. 我测试了,不会对gif造成影响,并且从代码中得知判断gif的文件的原因是读取文件的方式与普通图片不同,至于后续处理应该都是一样的,并不会和pdf一样出现因为存在多页而出现错误。
  2. 是的,目前看来判断是不是list也可以达到目标,但是根据数据类型判断感觉不太稳妥,而代码中既然有flag_pdf这个判断标准,感觉还是加上这个判断条件比较符合相关函数的定义和代码逻辑,且不会影响到后续的设计。
  3. 此外,关于返回类型发生了改变,会不会对用户使用造成困扰。参考ocr部分可知,它对返回类型的处理为,img如果是list,则不做改变,如果不是list,则把他放入一个list里返回,即都处理成一个list。然而,对于PPStructure类,它的定义和ocr不同,似乎是设计为返回单个页面的结果,main函数验证了我的猜想,目前命令行的方式里调用PPStructure是让它返回单个值的,如果按照OCR的部分处理的话,势必要改变main函数,我觉得还是暂时不动比较好。因为您那边可能对后续如何编写有其它设计,我尽量不改变已有的操作方式。
  4. 我添加了两个样例并合并到版面分析里。
GreatV commented 3 weeks ago

测试了一下两个demo都能正常工作。