文档解析(Unlimited-OCR)
接口描述
文档解析(Unlimited-OCR):基于 Unlimited-OCR 开源底座,通过标准化API服务,提供开箱即用、免部署的快捷接入方式,可直接返回 Markdown/JSON 结构化输出(当前返回 Markdown;JSON 能力后续支持),助您快速实现复杂文档智能解析。
该接口处于公测阶段,欢迎体验!个人实名可获取免费测试资源200次,企业实名可获取免费测试资源1000次。
文档解析(Unlimited-OCR)API服务为异步接口,需要先调用提交请求接口获取 task_id,然后调用获取结果接口进行结果轮询,建议提交请求后 5~10 秒轮询。提交请求接口QPS为2,获取结果接口QPS为5。
在线调试
您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。
提交请求接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
| 参数 | 值 |
|---|---|
| Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
| 参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
|---|---|---|---|---|
| file_data | 和file_url二选一 | string | - | 文件的base64编码数据:-版式文档:pdf、jpg、jpeg、png、bmp、tif、tiff、ofd,图片最长边不大于8192px-流式文档:doc、docx、txt、wps、ppt、pptx图片不超过10M,版式文档大小不超过100M,流式文档大小不超过50M,其中PDF文档最大支持500页若文档大小超过50M,须从file_url方式上传。优先级: file_data > file_url,当file_data字段存在时,file_url字段失效 |
| file_url | 和file_data二选一 | string | - | 文件数据URL,URL长度不超过1024字节,支持单个URL传入PDF文档大小不超过100M,最大支持500页优先级: file_data > file_url,当file_data字段存在时,file_url字段失效请注意关闭URL防盗链 |
| file_name | 是 | string | - | 文件名,请保证文件名后缀正确,例如 "1.pdf " |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、文档地址或Base64信息。
1import base64
2import os
3
4import requests
5
6API_KEY = "你的API_KEY"
7SECRET_KEY = "你的SECRET_KEY"
8FILE_PATH = "./test_sample/doc-0emc2uejide48tnp.jpg"
9
10
11def get_access_token():
12 url = "https://aip.baidubce.com/oauth/2.0/token"
13 params = {
14 "grant_type": "client_credentials",
15 "client_id": API_KEY,
16 "client_secret": SECRET_KEY,
17 }
18 return requests.get(url, params=params, timeout=30).json()["access_token"]
19
20
21def create_task(url, file_path):
22 with open(file_path, "rb") as f:
23 file_data = base64.b64encode(f.read()).decode()
24
25 data = {
26 "file_data": file_data,
27 "file_name": os.path.basename(file_path),
28 }
29 headers = {"Content-Type": "application/x-www-form-urlencoded"}
30 return requests.post(url, headers=headers, data=data, timeout=120)
31
32
33if __name__ == "__main__":
34 access_token = get_access_token()
35 url = (
36 "https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task"
37 f"?access_token={access_token}"
38 )
39 response = create_task(url, FILE_PATH)
40 print(response.json())
返回说明
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| log_id | uint64 | 唯一的log id,用于问题定位 |
| error_code | int | 错误码 |
| error_msg | string | 错误描述信息 |
| result | dict | 返回的结果列表 |
| + task_id | string | 该请求生成的task_id,后续使用该task_id获取审查结果 |
返回示例
成功返回示例:
1{
2 "error_code": 0,
3 "error_msg": "",
4 "log_id": "10138598131137362685273505665433",
5 "result": {
6 "task_id": "task-3zy9Bg8CHt1M4pPOcX2q5bg28j26801S"
7 }
8}
失败返回示例(详细的错误码说明见API文档-错误码):
1{
2 "error_code": 282003,
3 "error_msg": "missing parameters",
4 "log_id": "37507631033585544507983253924141",
5 "result": "null"
6}
获取结果接口
请求说明
请求示例
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task/query
URL参数:
| 参数 | 值 |
|---|---|
| access_token | 通过API Key和Secret Key获取的access_token,参考“Access Token获取” |
Header如下:
| 参数 | 值 |
|---|---|
| Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
| 参数 | 是否必选 | 类型 | 说明 |
|---|---|---|---|
| task_id | 是 | string | 发送提交请求时返回的task_id |
请求代码示例
提示:使用示例代码前,请记得替换其中的示例Token、task_id。
1import requests
2
3API_KEY = "你的API_KEY"
4SECRET_KEY = "你的SECRET_KEY"
5TASK_ID = "task_id" # 替换为提交接口返回的 task_id
6
7
8def get_access_token():
9 url = "https://aip.baidubce.com/oauth/2.0/token"
10 params = {
11 "grant_type": "client_credentials",
12 "client_id": API_KEY,
13 "client_secret": SECRET_KEY,
14 }
15 return requests.get(url, params=params, timeout=30).json()["access_token"]
16
17
18def query_task(url, task_id):
19 data = {"task_id": task_id}
20 headers = {"Content-Type": "application/x-www-form-urlencoded"}
21 return requests.post(url, headers=headers, data=data, timeout=60)
22
23
24if __name__ == "__main__":
25 access_token = get_access_token()
26 url = (
27 "https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task/query"
28 f"?access_token={access_token}"
29 )
30 resp = query_task(url, TASK_ID)
31 print(resp.json())
返回说明
返回参数
| 字段 | 类型 | 说明 |
|---|---|---|
| log_id | uint64 | 唯一的log id,用于问题定位 |
| error_code | int | 错误码 |
| error_msg | string | 错误描述信息 |
| result | dict | 返回的结果列表 |
| + task_id | string | 任务ID |
| + status | string | 任务状态,pending:排队中;running:运行中;success:成功;failed:失败 |
| + task_error | string | 解析报错信息,包含任务失败、额度不够 |
| + markdown_url | string | 文档解析结果的markdown格式链接,链接有效期30天 |
| + parse_result_url | string | 文档解析结果的bos链接,链接有效期30天 |
可通过markdown_url、parse_result_url(后续支持)下载解析结果,markdown_url的返回参数如下:
返回示例
成功返回示例:
1{
2 "log_id": "23596597899286921761579365582373",
3 "error_code": 0,
4 "error_msg": "",
5 "result":
6 {
7 "task_id": "task-UnvGsgbYZp9pS3BZRHn11ifzjNvKzTgf",
8 "status": "success",
9 "task_error": null,
10 "markdown_url": "https:xxxxxxxxxxxxxxxxxxx",
11 "parse_result_url": "https:xxxxxxxxxxxxxxxxxxx"//后续支持
12 }
13}
markdown_url解析结果示例:

1附表一:
2
3机组每日用房、用餐明细表
4
5
6<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td colspan="9">机组每日用房明细表</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>房间号</td><td style='text-align: center; word-wrap: break-word;'>姓名</td><td style='text-align: center; word-wrap: break-word;'>编号</td><td style='text-align: center; word-wrap: break-word;'>单间/标间</td><td style='text-align: center; word-wrap: break-word;'>入住时间</td><td style='text-align: center; word-wrap: break-word;'>退房时间</td><td style='text-align: center; word-wrap: break-word;'>天数</td><td style='text-align: center; word-wrap: break-word;'>金额</td><td style='text-align: center; word-wrap: break-word;'>备注</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>101</td><td style='text-align: center; word-wrap: break-word;'>张三</td><td style='text-align: center; word-wrap: break-word;'>1000001234</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0108:30</td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0208:30</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>0</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>101</td><td style='text-align: center; word-wrap: break-word;'>李四</td><td style='text-align: center; word-wrap: break-word;'>1000001334</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0108:30</td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0208:30</td><td style='text-align: center; word-wrap: break-word;'>1</td><td style='text-align: center; word-wrap: break-word;'>100</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>102</td><td style='text-align: center; word-wrap: break-word;'>王五</td><td style='text-align: center; word-wrap: break-word;'>1000008234</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0508:30</td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0708:30</td><td style='text-align: center; word-wrap: break-word;'>2</td><td style='text-align: center; word-wrap: break-word;'>200</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>405</td><td style='text-align: center; word-wrap: break-word;'>杨一</td><td style='text-align: center; word-wrap: break-word;'>1000004454</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0815:23</td><td style='text-align: center; word-wrap: break-word;'>20XX-01-1506:20</td><td style='text-align: center; word-wrap: break-word;'>7</td><td style='text-align: center; word-wrap: break-word;'>0</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>405</td><td style='text-align: center; word-wrap: break-word;'>王二</td><td style='text-align: center; word-wrap: break-word;'>1000001331</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0815:23</td><td style='text-align: center; word-wrap: break-word;'>20XX-01-1506:20</td><td style='text-align: center; word-wrap: break-word;'>7</td><td style='text-align: center; word-wrap: break-word;'>700</td><td style='text-align: center; word-wrap: break-word;'></td></tr><tr><td style='text-align: center; word-wrap: break-word;'>708</td><td style='text-align: center; word-wrap: break-word;'>李四</td><td style='text-align: center; word-wrap: break-word;'>1000001334</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0412:45</td><td style='text-align: center; word-wrap: break-word;'>20XX-01-0813:46</td><td style='text-align: center; word-wrap: break-word;'>3.5</td><td style='text-align: center; word-wrap: break-word;'>350</td><td style='text-align: center; word-wrap: break-word;'></td></tr></table>
7
8
9<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td colspan="7">机组每日用餐明细表</td></tr><tr><td colspan="2">日期</td><td style='text-align: center; word-wrap: break-word;'>姓名</td><td style='text-align: center; word-wrap: break-word;'>编号</td><td style='text-align: center; word-wrap: break-word;'>早餐</td><td style='text-align: center; word-wrap: break-word;'>中餐</td><td style='text-align: center; word-wrap: break-word;'>晚餐</td></tr><tr><td colspan="2">20XX-01-01</td><td style='text-align: center; word-wrap: break-word;'>张三</td><td style='text-align: center; word-wrap: break-word;'>1000001234</td><td style='text-align: center; word-wrap: break-word;'>25</td><td style='text-align: center; word-wrap: break-word;'>0</td><td style='text-align: center; word-wrap: break-word;'>25</td></tr><tr><td colspan="2">20XX-01-01</td><td style='text-align: center; word-wrap: break-word;'>李四</td><td style='text-align: center; word-wrap: break-word;'>1000001334</td><td style='text-align: center; word-wrap: break-word;'>25</td><td style='text-align: center; word-wrap: break-word;'>45</td><td style='text-align: center; word-wrap: break-word;'>45</td></tr><tr><td colspan="2">20XX-01-01</td><td style='text-align: center; word-wrap: break-word;'>王五</td><td style='text-align: center; word-wrap: break-word;'>1000008234</td><td style='text-align: center; word-wrap: break-word;'>25</td><td style='text-align: center; word-wrap: break-word;'>0</td><td style='text-align: center; word-wrap: break-word;'>25</td></tr><tr><td colspan="2">...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td></tr><tr><td colspan="2">...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'></td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td><td style='text-align: center; word-wrap: break-word;'>...</td></tr><tr><td colspan="2">20XX-01-01</td><td style='text-align: center; word-wrap: break-word;'>王二</td><td style='text-align: center; word-wrap: break-word;'>1000001331</td><td style='text-align: center; word-wrap: break-word;'>25</td><td style='text-align: center; word-wrap: break-word;'>0</td><td style='text-align: center; word-wrap: break-word;'>45</td></tr><tr><td colspan="2">20XX-01-01</td><td style='text-align: center; word-wrap: break-word;'>李四</td><td style='text-align: center; word-wrap: break-word;'>1000001334</td><td style='text-align: center; word-wrap: break-word;'>25</td><td style='text-align: center; word-wrap: break-word;'>45</td><td style='text-align: center; word-wrap: break-word;'>45</td></tr></table>
10
11
12<table border=1 style='margin: auto; word-wrap: break-word;'><tr><td colspan="10">机组每日用车明细表</td></tr><tr><td style='text-align: center; word-wrap: break-word;'>车牌</td><td style='text-align: center; word-wrap: break-word;'>发车日</td><td style='text-align: center; word-wrap: break-word;'>发车时间</td><td style='text-align: center; word-wrap: break-word;'>航班号</td><td style='text-align: center; word-wrap: break-word;'>发车</td><td style='text-align: center; word-wrap: break-word;'>目的</td><td style='text-align: center; word-wrap: break-word;'>航司代</td><td style='text-align: center; word-wrap: break-word;'>司机签</td><td style='text-align: center; word-wrap: break-word;'>保障车</td><td style='text-align: center; word-wrap: break-word;'>备</td></tr></table>
失败返回示例(详细的错误码说明见API文档-错误码):
1 {"log_id": "13665091038742503867108513247608",
2 "error_code": "282007",
3 "error_msg": "task not exist, please check task id",
4 "result": "null"}
评价此篇文章
