资讯 文档
技术能力
语音技术
文字识别
人脸与人体
图像技术
语言与知识
视频技术

文档解析(Unlimited-OCR)

接口描述

文档解析(Unlimited-OCR):基于 Unlimited-OCR 开源底座,通过标准化API服务,提供开箱即用、免部署的快捷接入方式,可直接返回 Json/Markdown 结构化输出,助您快速实现复杂文档智能解析。

接口限时免费,欢迎进行体验与咨询反馈!个人实名可获取免费测试资源200页,企业实名可获取免费测试资源1000页。

文档解析(Unlimited-OCR)API服务为异步接口,需要先调用提交请求接口获取 task_id,然后调用获取结果接口进行结果轮询,建议提交请求后 5~10 秒轮询。提交请求接口QPS为2,获取结果接口QPS为5。

在线调试

您可以在 示例代码中心 中调试该接口,可进行签名验证、查看在线调用的请求内容和返回结果、示例代码的自动生成。

为方便您更好地使用文档解析服务,我们设立了专属交流群。您可通过下方二维码入群:

300x300.jpg

提交请求接口

请求说明

请求示例

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 "
recognize_formula - bool - 无需开启,大模型默认对版式类型文档进行公式识别
analysis_chart 否 bool True/False 是否对统计图表进行解析,默认为False
parse_image_layout - bool - 无需开启,大模型默认解析文档中的所有图片
language_type - string - 无需开启,大模型默认识别语种类型
merge_tables - bool - 是否将跨页表格合并输出,开启后tables内将返回跨页表格的合并标识,并将合并内容存放在table_html和markdown下,默认为False
relevel_titles - bool - 是否对段落标题(paragraph_title)进行分级,开启后会在sub_type中输出对应的标题级别,默认为False
recognize_seal - bool - 是否识别印章内容 ,默认为true;erase_seal=true 时被强制置false
return_span_boxes - bool - 是否返回行坐标,默认为False
angle_adjust - bool - 角度矫正,默认为true
angle_mode - string - 角度矫正模式,开启角度矫正后生效,默认为 derection,可选:
- direction:四方向
- arbitrary:任意方向
erase_seal - bool - 印章擦除,默认为False;优先级高于 recognize_seal
erase_watermark - bool - 水印擦除,默认为False
unwarp - bool - 图像扭曲矫正,默认为False
page_filter - list[int] - 指定页码进行解析,默认解析全部页数
need_pdffile_data - bool - 是否返回整份PDF,默认为False
need_pdffile_vis_data - bool - 当开启角度矫正、水印擦除等预处理能力后,是否输出处理后的PDF,默认为False

请求代码示例

提示:使用示例代码前,请记得替换其中的示例Token、文档地址或Base64信息。

import base64
import os

import requests

API_KEY = "你的API_KEY"
SECRET_KEY = "你的SECRET_KEY"
FILE_PATH = "./test_sample/doc-0emc2uejide48tnp.jpg"


def get_access_token():
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {
        "grant_type": "client_credentials",
        "client_id": API_KEY,
        "client_secret": SECRET_KEY,
    }
    return requests.get(url, params=params, timeout=30).json()["access_token"]


def create_task(url, file_path):
    with open(file_path, "rb") as f:
        file_data = base64.b64encode(f.read()).decode()

    data = {
        "file_data": file_data,
        "file_name": os.path.basename(file_path),
    }
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    return requests.post(url, headers=headers, data=data, timeout=120)


if __name__ == "__main__":
    access_token = get_access_token()
    url = (
        "https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task"
        f"?access_token={access_token}"
    )
    response = create_task(url, FILE_PATH)
    print(response.json())

返回说明

返回参数

字段 类型 说明
log_id uint64 唯一的log id,用于问题定位
error_code int 错误码
error_msg string 错误描述信息
result dict 返回的结果列表
+ task_id string 该请求生成的task_id,后续使用该task_id获取解析结果

返回示例

成功返回示例:

{
    "error_code": 0,
    "error_msg": "",
    "log_id": "10138598131137362685273505665433",
    "result": {
        "task_id": "task-3zy9Bg8CHt1M4pPOcX2q5bg28j26801S"
    }
}

失败返回示例(详细的错误码说明见API文档-错误码):

{
    "error_code": 282003,
    "error_msg": "missing parameters",
    "log_id": "37507631033585544507983253924141",
    "result": "null"
}

获取结果接口

请求说明

请求示例

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。

import requests

API_KEY = "你的API_KEY"
SECRET_KEY = "你的SECRET_KEY"
TASK_ID = "task_id"  # 替换为提交接口返回的 task_id


def get_access_token():
    url = "https://aip.baidubce.com/oauth/2.0/token"
    params = {
        "grant_type": "client_credentials",
        "client_id": API_KEY,
        "client_secret": SECRET_KEY,
    }
    return requests.get(url, params=params, timeout=30).json()["access_token"]


def query_task(url, task_id):
    data = {"task_id": task_id}
    headers = {"Content-Type": "application/x-www-form-urlencoded"}
    return requests.post(url, headers=headers, data=data, timeout=60)


if __name__ == "__main__":
    access_token = get_access_token()
    url = (
        "https://aip.baidubce.com/rest/2.0/brain/online/v2/unlimited-ocr-parser/task/query"
        f"?access_token={access_token}"
    )
    resp = query_task(url, TASK_ID)
    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 文档解析结果的 JSON bos 链接,链接有效期30天

可通过parse_result_url下载解析结果的JSON文件,parse_result_url的返回参数如下:

字段 类型 说明
file_name string 文档名称
file_id string 文档ID
+ pdf_vis_data string 文档预处理后输出PDF的bos链接,链接有效期30天
+ pages list 文件单页解析内容
++ page_id string 页码ID
++ page_num int 页码数
++ page_angle int 旋转角度值,取值0~359
++ text string 当前页的所有纯文字内容
++ layouts list 页面内容版式分析的结果
+++ layout_id string layout ID,layout元素唯一标志,以"xxxxx-layout-{global_layout_index}"形式,global_layout_index为layout元素整个文档的全局索引
+++ text string layout对应的文本内容。注:当type为table, image时该字段为空, 需要根据type和layout_id分别到tables, images字段里找到对应的内容
+++ position list layout元素在页面中的位置,[x, y, w, h] box框,左上角和宽高
+++ polygon list layout元素在页面中的顶点坐标列表,可围合成多边形
+++ span_boxes list 行信息,开启return_span_boxex后生效
++++ text list 行内文本内容
++++ location list 行坐标
+++ type string layout元素类型, 当前可取值:
• abstract:摘要
• algorithm:算法
• aside_text:旁注文本
• chart:图表
• contents:目录
• formula:公式
• doc_title:文档标题
• figure_title:图片标题
• footer:页脚
• footer_image:页脚图片
• footnote:脚注
• formula_number:公式编号
• header:页眉
• header_image:页眉图片
• image:图片(figure:普通插图、QRcode:二维码、Barcode:条形码、handsign:手写签名、doc:文档截图)
• inline_formula:行内公式
• number:页码
• paragraph_title:段落标题
• reference:参考文献
• reference_content:参考文献内容
• seal:印章
• table:表格(wired_table:有线表格、wireless_table:无线表格)
• text:文本
• vertical_text:竖排文本
+++ sub_type string 输出标题层级,开启relevel_titles后生效
++ tables list 页面表格解析结果
+++ layout_id string layout ID,与layouts中的元素type为table的元素的layout ID对应
+++ markdown string 表格内容的markdown形式
+++ position list 边框数据 「x, y, w, h」(x, y)为坐标点坐标,w为box宽度,h为box高度(以页面坐标为原点),版式格式时有效
+++ cells list 单元格的内嵌版面信息,layout类型为表格时有值
+++ matrix list 二位数组 表示表格内布局位置信息,每个元素对应cells列表中元素的索引
+++ merge_table string 合并表格标识,开启merge_tables后生效,跨页表格开始(begin),跨页表格结束(end)
++ images list 页面中图片解析结果
+++ layout_id string layout ID,与layouts中的元素type为image的元素的layout ID对应
+++ position list 边框数据 「x, y, w, h」(x, y)为坐标点坐标,w为box宽度,h为box高度(以页面坐标为原点),版式格式时有效
+++ data_url string 图片存储链接
+++ image_description string 对统计图表进行内容解析和描述,输出结果为json字符串,可通过json.loads结构化为json格式
++ meta dict 页面元信息
+++ page_width int 页面宽度
+++ page_height int 页面高度

返回示例

成功返回示例:

{
    "log_id": "23596597899286921761579365582373",
    "error_code": 0,
    "error_msg": "",
    "result":
    {
        "task_id": "task-UnvGsgbYZp9pS3BZRHn11ifzjNvKzTgf",
        "status": "success",
        "task_error": null,
        "markdown_url": "https:xxxxxxxxxxxxxxxxxxx",
        "parse_result_url": "https:xxxxxxxxxxxxxxxxxxx"//后续支持
    }
}

markdown_url解析结果示例:

image.png

附表一:

机组每日用房、用餐明细表


<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>


<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>


<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文档-错误码):

  {"log_id": "13665091038742503867108513247608", 
  "error_code": "282007", 
  "error_msg": "task not exist, please check task id", 
  "result": "null"}
上一篇
文档解析(PaddleOCR-VL)
下一篇
错误码