hiroi-sora / Umi-OCR

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

使用 docs/http /api_doc_demo.py 的上传代码 测试返回未上传文件。 #598

Closed Jerryyuanyuan closed 1 month ago

Jerryyuanyuan commented 2 months ago

Issues

Umi-OCR version 程序版本

Umi-OCR_Paddle_v2.1.3_beta_1

Windows version 系统版本

win10

OCR plugins Used 使用的OCR插件

PaddleOCR

Reproduction steps 复现步骤

base_url = "http://127.0.0.1:1224"
# 我已修改为本地有的pdf文档
file_path = r"test.pdf"

mission_options = {
    "doc.extractionMode": "fullPage",
}

print("=======================================")
print("===== 1. Upload file, get task ID =====")
url = f"{base_url}/api/doc/upload"
with open(file_path, "rb") as file:
    print("Request URL:", url)
    print("Request Files:", {"file": file})
    print("Request Data:", {"json": json.dumps(mission_options)})
    response = requests.post(url, files={"file": file}, data={"json": json.dumps(mission_options)})

response.raise_for_status()
res_data = json.loads(response.text)
assert res_data["code"] == 100, f"Task submission failed: {res_data}"

id = res_data["data"]
print("Task ID:", id)

执行上述代码,返回结果:

AssertionError Traceback (most recent call last)

in () 18 response.raise_for_status() 19 res_data = json.loads(response.text) ---> 20 assert res_data["code"] == 100, f"Task submission failed: {res_data}" 21 22 id = res_data["data"] AssertionError: Task submission failed: {'code': 101, 'data': '[Error] No file was uploaded.'} ### Problem screenshots or related files (optional) 问题截图或相关文件(可选) _No response_
hiroi-sora commented 2 months ago

你好,请问PDF文件多大?换成别的PDF文件可以吗?

或者,试下将 file_path 换成一个不合法格式的文件(比如 .txt.png 文件),正常情况下应该报错 Task submission failed: {'code': 102, 'data': "[Error] File extension '.txt' is not allowed."} 。如果还是报错 'code': 101 ,说明网络传输有问题。

Jerryyuanyuan commented 2 months ago

你好,请问PDF文件多大?换成别的PDF文件可以吗?

或者,试下将 file_path 换成一个不合法格式的文件(比如 .txt.png 文件),正常情况下应该报错 Task submission failed: {'code': 102, 'data': "[Error] File extension '.txt' is not allowed."} 。如果还是报错 'code': 101 ,说明网络传输有问题。

我找到原因了:文档的名字中有中文不行。改成数字和字母命名就没有问题了。

hiroi-sora commented 2 months ago

文档的名字中有中文不行。改成数字和字母命名就没有问题了。

感谢,已复现。这应该是我这边的缺陷,之后修复。

hiroi-sora commented 2 months ago

对了,能否告诉我,报错'code': 101的时候,文件名是什么?

我使用中文文件名进行测试,虽然会有问题,但是不会报 101 。我试试你的文件名。

Jerryyuanyuan commented 2 months ago

Request Files: {'file': <_io.BufferedReader name='./huanya_ocr/LSJWB4093PZ823424识别单.pdf'>} 是这种前面英文数字后面中文的名字,你试试看。

Jerryyuanyuan commented 2 months ago

我这里一直都是解析到101的报错。补充一点,我是内网调用,而且是用的linux系统写代码去调用win10上部署的识别服务。

hiroi-sora commented 2 months ago

好的,我用相同环境测试一下。

hiroi-sora commented 2 months ago

请问你的LInux版本和python版本是啥?

Jerryyuanyuan commented 2 months ago
  • 使用 ubuntu-22.04 调用:正常,不会出现 101 。

    • 使用 centos-7 + python 2.7 调用:异常,复现 101 报错。

请问你的LInux版本和python版本是啥?

图片 图片

hiroi-sora commented 2 months ago

你好。经过测试,有一个很简单的方法可以避免此问题。

api_doc_demo.py 上传文件时,原本的代码是:

    response = requests.post(
        url, files={"file": file}, data={"json": json.dumps(mission_options)}
    )

现在,请将 {"file": file} 改为双元组 {"file": (temp_name, file)}temp_name 是你生成的一个临时文件名,比如 temp_name = "temp.pdf" 。注意:

示例:

    temp_name = "temp" + 原文件的后缀
    response = requests.post(
        url, files={"file": (temp_name,file)}, data={"json": json.dumps(mission_options)}
    )
Jerryyuanyuan commented 2 months ago

好的 谢谢