hiroi-sora / Umi-OCR

OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多国语言库。
MIT License
25.42k stars 2.58k forks source link

添加pdf解析http接口 #363

Closed Mingxiangyu closed 6 months ago

hiroi-sora commented 6 months ago

我建议一步一步来,先将文档识别的同步接口写出来,然后写命令行识别本地文件的接口,最后在基础上再写HTTP接口。

之前忘了说,文档识别任务流程代码(mission_doc.py)缺少一个同步接口

阅读一下UmiOCR-data\py_src\mission\mission.pyUmiOCR-data\py_src\mission\mission_ocr.py,你会发现,任务管理器基类提供了一个异步的接口addMissionList和同步接口addMissionWait。如果在Umi前端调用,则应该调用异步接口。如果通过命令行等接口调用,则应该调用同步接口。

mission_ocr.py 继承了任务管理器基类,能正常使用同步和异步接口。但 mission_doc.py 的文档流程有一定特殊性,所以只有异步接口 addMission ,没有同步接口。

所以,如果要写命令行/HTTP,则最初的一步要在 mission_doc.py 中补一个同步接口,类似:

    # 【同步】添加一个文档任务,等待完成,返回任务结果。
    def addMissionWait(self, argd, msnPath, pageRange=None, pageList=[], password=""):
        # 1. 用一个变量 resPages 来缓存每一页的识别结果 。
        # 2. 创建一些回调函数  _onGet、_onEnd ,与argd一起封装为msnInfo 。
        # 3. 调用异步接口 self.addMission 启动任务。然后立刻 condition.wait() 阻塞线程。
        # 4. 在回调 _onGet 中,将获取的本页结果存入 resPages 。
        # 5. 在回调 _onEnd 中,condition.notify() 释放线程阻塞。
        # 6. 将结果 resPages 返回给调用方。
        # ex1. 如果需要 tbpu ,则需要在开始时初始化tbpu实例,在回调函数中调用实例。
        # ex2. 如果需要保存为双层PDF等格式,则需要在开始时初始化 output 实例,在回调函数中调用实例。

可参考这样地方: UmiOCR-data\py_src\mission\mission.py def addMissionWait UmiOCR-data\py_src\tag_pages\BatchDOC.py def msnDocs

你可以按照上述思路尝试一下,如果有什么参数不明白,可找到项目中已有的类似代码print一下看看。

Mingxiangyu commented 6 months ago

好的好的,感谢解惑,主要之前没用过qml,项目没跑起来

---- 回复的原邮件 ---- | 发件人 | @.> | | 发送日期 | 2024年02月22日 20:27 | | 收件人 | hiroi-sora/Umi-OCR @.> | | 抄送人 | Mingxiangyu @.>, Author @.> | | 主题 | Re: [hiroi-sora/Umi-OCR] 添加pdf解析http接口 (PR #363) |

我建议一步一步来,先将文档识别的同步接口写出来,然后写命令行识别本地文件的接口,最后在基础上再写HTTP接口。

之前忘了说,文档识别任务流程代码(mission_doc.py)缺少一个同步接口。

阅读一下UmiOCR-data\py_src\mission\mission.py和UmiOCR-data\py_src\mission\mission_ocr.py,你会发现,任务管理器基类提供了一个异步的接口addMissionList和同步接口addMissionWait。如果在Umi前端调用,则应该调用异步接口。如果通过命令行等接口调用,则应该调用同步接口。

mission_ocr.py 继承了任务管理器基类,能正常使用同步和异步接口。但 mission_doc.py 的文档流程有一定特殊性,所以只有异步接口 addMission ,没有同步接口。

所以,如果要写命令行/HTTP,则最初的一步要在 mission_doc.py 中补一个同步接口,类似:

【同步】添加一个文档任务,等待完成,返回任务结果。defaddMissionWait(self, argd, msnPath, pageRange=None, pageList=[], password=""):

    # 1. 用一个变量 resPages 来缓存每一页的识别结果 。# 2. 创建一些回调函数  _onGet、_onEnd ,与argd一起封装为msnInfo 。# 3. 调用异步接口 self.addMission 启动任务。然后立刻 condition.wait() 阻塞线程。# 4. 在回调 _onGet 中,将获取的本页结果存入 resPages 。# 5. 在回调 _onEnd 中,condition.notify() 释放线程阻塞。# 6. 将结果 resPages 返回给调用方。# ex1. 如果需要 tbpu ,则需要在开始时初始化tbpu实例,在回调函数中调用实例。# ex2. 如果需要保存为双层PDF等格式,则需要在开始时初始化 output 实例,在回调函数中调用实例。

可参考这样地方: UmiOCR-data\py_src\mission\mission.py def addMissionWait UmiOCR-data\py_src\tag_pages\BatchDOC.py def msnDocs

你可以按照上述思路尝试一下,如果有什么参数不明白,可找到项目中已有的类似代码print一下看看。

— Reply to this email directly, view it on GitHub, or unsubscribe. You are receiving this because you authored the thread.Message ID: @.***>