hiroi-sora / Umi-OCR_v2

结束和新的开始
MIT License
915 stars 69 forks source link

打扰下,问下http接口返回的数据要怎么排版才能跟软件中的排版效果一致 #53

Closed zhuibo66 closed 3 months ago

zhuibo66 commented 8 months ago

Snipaste_2023-11-08_23-39-24

如上图,接口和软件中的不一样,我理解返回的数据应该是要处理,但是并不清楚具体的逻辑

hiroi-sora commented 8 months ago

文档:PaddleOCR-json python

代码:PaddleOCR-json python tbpu

可以参照上述代码(注释非常详细),用你的语言实现类似的逻辑。

zhuibo66 commented 8 months ago

文档:PaddleOCR-json python

代码:PaddleOCR-json python tbpu

可以参照上述代码(注释非常详细),用你的语言实现类似的逻辑。

弱弱的问一句,是否又考虑在http接口处增加个段落合并的参数,由py处理好后返回 代码是看了,但是对于py不是很熟练,还是挺费劲的。嘻嘻。

hiroi-sora commented 8 months ago

作为临时措施,你可以手动改一下这个文件,实现服务端执行段落合并。

UmiOCR-data\py_src\server\ocr_server.py

整个文件改为如下:

import json
import time
import threading

from .bottle import request
from ..mission.mission_ocr import MissionOCR
from ..ocr.tbpu import Merge

def init(UmiWeb):
    @UmiWeb.route("/api/ocr/get_options")
    def _get_options():
        opts = MissionOCR.getLocalOptions()
        res = json.dumps(opts)
        return res

    @UmiWeb.route("/api/ocr", method="POST")
    def _ocr():
        condition = threading.Condition()
        ocrData = None

        def onGet(msnInfo, msn, res):
            nonlocal ocrData
            if res["code"] == 100:
                mergeType = "MergeLine"  # 可修改不同合并方案
                res["data"] = Merge[mergeType]().run(res["data"], None)
            ocrData = res
            with condition:
                condition.notify()

        def onEnd(msnInfo, msg):
            nonlocal ocrData
            if not ocrData:
                ocrData = {"code": 803, "data": f"未知原因,未获取OCR返回值。{msg}"}
            with condition:
                condition.notify()

        data = request.json
        if not data:
            return json.dumps({"code": 800, "data": f"请求为空。"})
        if "base64" not in data:
            return json.dumps({"code": 801, "data": f"请求中缺少 base64 字段。"})
        if "options" not in data:
            return json.dumps({"code": 802, "data": f"请求中缺少 options 字段。"})
        msnList = [{"base64": data["base64"]}]
        options = data["options"]
        opt = {}
        for k in options:
            if "ocr." not in options:
                opt["ocr." + k] = options[k]
        msnInfo = {"onGet": onGet, "onEnd": onEnd, "argd": opt}
        MissionOCR.addMissionList(msnInfo, msnList)
        with condition:
            condition.wait()
        res = json.dumps(ocrData)
        return res

其中第25行的 mergeType = "MergeLine" ,可以将 MergeLine 改为其它方案,具体看这里

zhuibo66 commented 8 months ago
tbpu 

顶不住了,这都是什么神仙作者呀,原先是不抱希望的,没想到作者还是写了,太感谢了

还有一点,想问下作者,就是如果我只用到http接口的服务,有没有比较简单的开发调试步骤,目前我每次都需要打开umi-ocr软件,如果打不开我就知道肯定是代码改错了,而且都是盲改,没办法看到打印的可调试输出语句,py萌新也想多了解下该软件的调试方式,感谢感谢

hiroi-sora commented 8 months ago

那正好。咱家这项目主打的就是一个简单方便,不仅普通用户能轻松使用,开发者也能轻松完成开发环境部署。

本项目的文档中,详细介绍了开发环境部署的流程。可参照这里:

https://github.com/hiroi-sora/Umi-OCR_v2#%E6%9E%84%E5%BB%BA%E9%A1%B9%E7%9B%AE

hiroi-sora commented 3 months ago

正式版已支持通过HTTP参数指定排版方案了,见使用手册: https://github.com/hiroi-sora/Umi-OCR/blob/main/docs/README_HTTP.md