开放能力
开发平台
行业应用
生态合作
开发与教学
资讯 社区 控制台
技术能力
语音技术
图像技术
文字识别
人脸与人体识别
视频技术
AR与VR
自然语言处理
知识图谱
数据智能
场景方案
部署方案
行业应用
智能教育
智能医疗
智能零售
智能工业
企业服务
智能政务
智能农业
信息服务
智能园区
智能硬件

办公文档识别

接口描述

可对办公类文档版面进行分析,输出图、表、标题、文本的位置,并输出分版块内容的OCR识别结果,支持中、英两种语言,手写、印刷体混排多种场景。

在线调试

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

请求说明

请求示例

HTTP 方法:POST

请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office

URL参数:

参数
access_token 通过API Key和Secret Key获取的access_token,参考“Access Token获取

Header如下:

参数
Content-Type application/x-www-form-urlencoded

Body中放置请求参数,参数详情如下:

请求参数

参数 是否必选 类型 可选值范围 说明
image 和 url/pdf_file 三选一 string - 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
优先级:image > url > pdf_file,当image字段存在时,url、pdf_file字段失效
url 和 image/pdf_file 三选一 string - 图片完整url,url长度不超过1024字节,url对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式
优先级:image > url > pdf_file,当image字段存在时,url字段失效
请注意关闭URL防盗链
pdf_file 和 image/url 三选一 string - PDF文件,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px
优先级:image > url > pdf_file,当image、url字段存在时,pdf_file字段失效
pdf_file_num string - 需要识别的PDF文件的对应页码,当 pdf_file 参数有效时,识别传入页码的对应页面内容,若不传入,则默认识别第 1 页
language_type string CHN_ENG/ ENG 识别语言类型,默认为CHN_ENG
可选值包括:
=CHN_ENG:中英文
=ENG:英文
result_type string big/small 返回识别结果是按单行结果返回,还是按单字结果返回,默认为big。
=big:返回行识别结果
=small:返回行识别结果之上还会返回单字结果
detect_direction string true/false 是否检测图像朝向,默认不检测,即:false。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。其中,
0 :正向
1:逆时针旋转90度
2:逆时针旋转180度
3:逆时针旋转270度
line_probability string true/false 是否返回每行识别结果的置信度。默认为false
disp_line_poly string true/false 是否返回每行的四角点坐标。默认为false
words_type string handwring_only/ handprint_mix 文字类型。
默认:印刷文字识别
= handwring_only:手写文字识别
= handprint_mix: 手写印刷混排识别
layout_analysis string true/false 是否分析文档版面:包括layout(图、表、标题、段落、目录);attribute(栏、页眉、页脚、页码、脚注)的分析输出
erase_seal string true/false 是否先擦除水印、印章后再识别文档

请求代码示例

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

提示二:部分语言依赖的类或库,请在代码注释中查看下载地址。

# 办公文档识别
curl -i -k 'https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office?access_token=【调用鉴权接口获取的token】' --data 'image=【图片Base64编码,需UrlEncode】' -H 'Content-Type:application/x-www-form-urlencoded'
# encoding:utf-8

import requests
import base64

'''
办公文档识别
'''

request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office"
# 二进制方式打开图片文件
f = open('[本地文件]', 'rb')
img = base64.b64encode(f.read())

params = {"image":img}
access_token = '[调用鉴权接口获取的token]'
request_url = request_url + "?access_token=" + access_token
headers = {'content-type': 'application/x-www-form-urlencoded'}
response = requests.post(request_url, data=params, headers=headers)
if response:
    print (response.json())
package com.baidu.ai.aip;

import com.baidu.ai.aip.utils.Base64Util;
import com.baidu.ai.aip.utils.FileUtil;
import com.baidu.ai.aip.utils.HttpUtil;

import java.net.URLEncoder;

/**
* 办公文档识别
*/
public class AnalysisOffice {

    /**
    * 重要提示代码中所需工具类
    * FileUtil,Base64Util,HttpUtil,GsonUtils请从
    * https://ai.baidu.com/file/658A35ABAB2D404FBF903F64D47C1F72
    * https://ai.baidu.com/file/C8D81F3301E24D2892968F09AE1AD6E2
    * https://ai.baidu.com/file/544D677F5D4E4F17B4122FBD60DB82B3
    * https://ai.baidu.com/file/470B3ACCA3FE43788B5A963BF0B625F3
    * 下载
    */
    public static String analysisOffice() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office";
        try {
            // 本地文件路径
            String filePath = "[本地文件路径]";
            byte[] imgData = FileUtil.readFileByBytes(filePath);
            String imgStr = Base64Util.encode(imgData);
            String imgParam = URLEncoder.encode(imgStr, "UTF-8");

            String param = "image=" + imgParam;

            // 注意这里仅为了简化编码每一次请求都去获取access_token,线上环境access_token有过期时间, 客户端可自行缓存,过期后重新获取。
            String accessToken = "[调用鉴权接口获取的token]";

            String result = HttpUtil.post(url, accessToken, param);
            System.out.println(result);
            return result;
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        AnalysisOffice.analysisOffice();
    }
}
#include <iostream>
#include <curl/curl.h>

// libcurl库下载链接:https://curl.haxx.se/download.html
// jsoncpp库下载链接:https://github.com/open-source-parsers/jsoncpp/
const static std::string request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office";
static std::string analysisOffice_result;
/**
 * curl发送http请求调用的回调函数,回调函数中对返回的json格式的body进行了解析,解析结果储存在全局的静态变量当中
 * @param 参数定义见libcurl文档
 * @return 返回值定义见libcurl文档
 */
static size_t callback(void *ptr, size_t size, size_t nmemb, void *stream) {
    // 获取到的body存放在ptr中,先将其转换为string格式
    analysisOffice_result = std::string((char *) ptr, size * nmemb);
    return size * nmemb;
}
/**
 * 办公文档识别
 * @return 调用成功返回0,发生错误返回其他错误码
 */
int analysisOffice(std::string &json_result, const std::string &access_token) {
    std::string url = request_url + "?access_token=" + access_token;
    CURL *curl = NULL;
    CURLcode result_code;
    int is_success;
    curl = curl_easy_init();
    if (curl) {
        curl_easy_setopt(curl, CURLOPT_URL, url.data());
        curl_easy_setopt(curl, CURLOPT_POST, 1);
        curl_httppost *post = NULL;
        curl_httppost *last = NULL;
        curl_formadd(&post, &last, CURLFORM_COPYNAME, "image", CURLFORM_COPYCONTENTS, "【base64_img】", CURLFORM_END);

        curl_easy_setopt(curl, CURLOPT_HTTPPOST, post);
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, callback);
        result_code = curl_easy_perform(curl);
        if (result_code != CURLE_OK) {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                    curl_easy_strerror(result_code));
            is_success = 1;
            return is_success;
        }
        json_result = analysisOffice_result;
        curl_easy_cleanup(curl);
        is_success = 0;
    } else {
        fprintf(stderr, "curl_easy_init() failed.");
        is_success = 1;
    }
    return is_success;
}
<?php
/**
 * 发起http post请求(REST API), 并获取REST请求的结果
 * @param string $url
 * @param string $param
 * @return - http response body if succeeds, else false.
 */
function request_post($url = '', $param = '')
{
    if (empty($url) || empty($param)) {
        return false;
    }

    $postUrl = $url;
    $curlPost = $param;
    // 初始化curl
    $curl = curl_init();
    curl_setopt($curl, CURLOPT_URL, $postUrl);
    curl_setopt($curl, CURLOPT_HEADER, 0);
    // 要求结果为字符串且输出到屏幕上
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false);
    // post提交方式
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $curlPost);
    // 运行curl
    $data = curl_exec($curl);
    curl_close($curl);

    return $data;
}

$token = '[调用鉴权接口获取的token]';
$url = 'https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office?access_token=' . $token;
$img = file_get_contents('[本地文件路径]');
$img = base64_encode($img);
$bodys = array(
    'image' => $img
);
$res = request_post($url, $bodys);

var_dump($res);
using System;
using System.IO;
using System.Net;
using System.Text;
using System.Web;

namespace com.baidu.ai
{
    public class AnalysisOffice
    {
        // 办公文档识别
        public static string analysisOffice()
        {
            string token = "[调用鉴权接口获取的token]";
            string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis_office?access_token=" + token;
            Encoding encoding = Encoding.Default;
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(host);
            request.Method = "post";
            request.KeepAlive = true;
            // 图片的base64编码
            string base64 = getFileBase64("[本地图片文件]");
            String str = "image=" + HttpUtility.UrlEncode(base64);
            byte[] buffer = encoding.GetBytes(str);
            request.ContentLength = buffer.Length;
            request.GetRequestStream().Write(buffer, 0, buffer.Length);
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            StreamReader reader = new StreamReader(response.GetResponseStream(), Encoding.Default);
            string result = reader.ReadToEnd();
            Console.WriteLine("办公文档识别:");
            Console.WriteLine(result);
            return result;
        }

        public static String getFileBase64(String fileName) {
            FileStream filestream = new FileStream(fileName, FileMode.Open);
            byte[] arr = new byte[filestream.Length];
            filestream.Read(arr, 0, (int)filestream.Length);
            string baser64 = Convert.ToBase64String(arr);
            filestream.Close();
            return baser64;
        }
    }
}

返回说明

返回参数

字段 是否必选 类型 说明
log_id uint64 唯一的log id,用于问题定位
img_direction int32 detect_direction=true 时返回该字段。检测到的图像朝向,0 :正向; 1:逆时针旋转90度;2:逆时针旋转180度;3:逆时针旋转270度
results_num uint32 识别结果数,表示results的元素个数
results array[] 识别结果数组
+ words_type string 文字属性(手写、印刷),handwriting 手写,print 印刷
+ words array[] 整行的识别结果数组
++ line_probability array[] line_probability=true时返回。识别结果中每一行的置信度值,包含average:行置信度平均值,min:行置信度最小值
+++ average float 行置信度
+++ min float 整行中单字的最低置信度
++ word float 整行的识别结果
++ poly_location array[] 是否返回每行的四角点坐标,disp_line_poly=true时返回
++ words_location array[] 整行的矩形框坐标。位置数组(坐标0点为左上角)
+++ left uint32 表示定位位置的长方形左上顶点的水平坐标
+++ top uint32 表示定位位置的长方形左上顶点的垂直坐标
+++ width uint32 表示定位定位位置的长方形的宽度
+++ height uint32 表示位置的长方形的高度
+ chars array[] result_type=small时返回。单字符结果数组
++ char string result_type=small时返回。每个单字的内容
++ chars_location array[] 每个单字的矩形框坐标。位置数组(坐标0点为左上角)
+++ left uint32 表示定位位置的长方形左上顶点的水平坐标
+++ top uint32 表示定位位置的长方形左上顶点的垂直坐标
+++ width uint32 表示定位定位位置的长方形的宽度
+++ height uint32 表示位置的长方形的高度
layouts_num uint32 版面分析结果数,表示layout的元素个数
layouts array[] 每个「栏:section」里面的文档版面模块数组,包含表格、图、段落文本、标题、目录等5个模块;每个模块的坐标位置;段落文本和表格内文本内容对应的行序号id。
+ layout string 版面分析的标签结果。表格:table, 图:figure, 文本:text, 标题:title ,目录:contents
+ layout_location array[] 文档版面信息标签的位置,四个顶点: 左上,右上,右下,左下
++ x uint32 水平坐标(坐标0点为左上角)
++ y uint32 水平坐标(坐标0点为左上角)
+ layout_idx array[] 文档版面信息中的文本在results结果中的位置:版面文本标签对应的行序号ID为n,则此标签中的文本在results结果中第n+1条展示)
pdf_file_size string 传入PDF文件的总页数,当 pdf_file 参数有效时返回该字段
sec_rows uint32 将所有的版面中的「栏:section」内容表示成 M x N 的网格,sec_rows = M
sec_cols uint32 将所有的版面中的「分栏」内容表示成 M x N 的网格,sec_cols = N
sections array[] 一张图片中包含的5大版面属性,包含:栏,页眉,页脚,页码,脚注,该数组里有属性的标签、属性的位置、属性所包含文本内容的id序号。
其中,栏(section)里面包含5个模块内容,有:表格、图、段落文本、标题、目录(在返回参数layouts里输出)。
+ attribute string 版面分析的属性标签结果,栏:section, 页眉:header, 页脚:footer, 页码:number,脚注:footnote。
+ attri_location array[] 版面分析的属性所在位置,四个顶点: 左上,右上,右下,左下
++ x uint32 水平坐标(坐标0点为左上角)
++ y uint32 水平坐标(坐标0点为左上角)
+ sec_idx string sections返回参数中的5个版面属性里,包含的内容序号标识
++ idx string sections返回参数中的5个版面属性里,每个属性下包含的文本行id序号
++ para_idx string 当且仅当attribute=section时才会返回。表示,返回参数中的「栏:section」里面,所包含的表格、图、段落文本、标题、目录等5个模块返回的顺序号id(即layouts返回结果中,每个模块的返回顺序号)
++ row_idx string 当且仅当attribute=section时才会返回。表示,将所有栏表示成 M xN 的网格,所属网格的行的id。
++ col_idx string 当且仅当attribute=section时才会返回。表示,将所有栏表示成 M xN 的网格,所属网格的列的id。

返回示例

{
	"results_num": 5,
	"log_id": "1410491260247950412",
	"results": [
		{
			"words_type": "print",
			"words": {
				"words_location": {
					"top": 88,
					"left": 442,
					"width": 142,
					"height": 49
				},
				"word": "行程单"
			}
		},
		{
			"words_type": "print",
			"words": {
				"words_location": {
					"top": 241,
					"left": 439,
					"width": 393,
					"height": 37
				},
				"word": "美国东海岸名校8天7晚"
			}
		},
		{
			"words_type": "print",
			"words": {
				"words_location": {
					"top": 318,
					"left": 436,
					"width": 774,
					"height": 31
				},
				"word": "国会大厦位于华盛顿25米高的国会山上,是美国的心脏建筑。"
			}
		},
		{
			"words_type": "print",
			"words": {
				"words_location": {
					"top": 374,
					"left": 434,
					"width": 805,
					"height": 31
				},
				"word": "中央顶楼上的大圆顶上立有一尊6米高的自由女神青铜雕像。"
			}
		},
		{
			"words_type": "print",
			"words": {
				"words_location": {
					"top": 431,
					"left": 436,
					"width": 556,
					"height": 31
				},
				"word": "东面的大草坪是历届总统举行就职典礼的地方。"
			}
		}
	]
}
上一篇
通用文字识别(标准含位置版)
下一篇
网络图片文字识别