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

表格文字识别V2

接口描述

支持识别图片/PDF格式文档中的表格内容,返回各表格的表头表尾内容、单元格文字内容及其行列位置信息,全面覆盖各类表格样式,包括常规有线表格、无线表格、含合并单元格表格。同时,支持多表格内容识别。

请求说明

请求示例

HTTP 方法:POST

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

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,需去掉编码头(data:image/jpeg;base64, )
要求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
优先级: image > url > pdf_file,当image、url字段存在时,pdf_file字段失效
pdf_file_num string - 需要识别的PDF文件的对应页码,当 pdf_file 参数有效时,识别传入页码的对应页面内容,若不传入,则默认识别第 1 页
cell_contents string true/false 是否输出单元格文字位置信息
- false: 默认值,仅输出单元格行列信息及四角点坐标,不输出单元格内文字位置信息;
- true: 输出单元格内文字的外接四边形四角点坐标,若文字折行,则分行分别输出

请求代码示例

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

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

curl -i -k 'https://aip.baidubce.com/rest/2.0/ocr/v1/table?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/table"
# 二进制方式打开图片文件
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 Table {

    /**
    * 重要提示代码中所需工具类
    * 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 form() {
        // 请求url
        String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/table";
        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) {
        Form.form();
    }
}
#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/table";
static std::string form_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格式
    form_result = std::string((char *) ptr, size * nmemb);
    return size * nmemb;
}
/**
* 表格文字识别
* @return 调用成功返回0,发生错误返回其他错误码
*/
int form(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 = form_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/table?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 Table
    {
        // 表格文字识别
        public static string table()
        {
            string token = "[调用鉴权接口获取的token]";
            string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/table?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 string 日志id,用于问题定位
table_num int 检测到的表格数量
tables_result array[] 表格内容
table_location array[] 单个表格的四角点x,y坐标
header array[] 表头信息
+ location array[] 表头位置,四角点 x,y 坐标
+ words string 表头文字内容,按行拆分
body array[] 单元格信息
+ cell_location array[] 单元格四角点x,y坐标
+ row_start array[] 单元格行起始编号,横线编号从0开始
+ row_end array[] 单元格行终止编号
+ col_start array[] 单元格列起始编号,竖线编号从0开始
+ col_end array[] 单元格列终止编号
+ words string 单元格文字内容
+ contents array[] 单元格内文字内容,分行显示,当请求参数 cell_contents = true 时返回
++ poly_location array[] 单元格内文字各行的四角点x,y坐标
++ word string 单元格内分行文字内容
footer array[] 表尾信息
+ location array[] 表尾位置,四角点 x,y 坐标
+ words string 表尾信息,按行拆分
pdf_file_size string 传入PDF文件的总页数,当 pdf_file 参数有效时返回该字段

返回示例

{
    "tables_result": [
        {
            "table_location": [
                {
                    "x": 67,
                    "y": 43
                },
                {
                    "x": 708,
                    "y": 43
                },
                {
                    "x": 708,
                    "y": 200
                },
                {
                    "x": 67,
                    "y": 200
                }
            ],
            "header": [
                {
                    "location": [
                        {
                            "x": 101,
                            "y": 16
                        },
                        {
                            "x": 264,
                            "y": 16
                        },
                        {
                            "x": 264,
                            "y": 34
                        },
                        {
                            "x": 101,
                            "y": 34
                        }
                    ],
                    "words": "1.营业收入/营业成本"
                }
            ],
            "body": [
                {
                    "cell_location": [
                        {
                            "x": 68,
                            "y": 44
                        },
                        {
                            "x": 188,
                            "y": 44
                        },
                        {
                            "x": 188,
                            "y": 101
                        },
                        {
                            "x": 68,
                            "y": 101
                        }
                    ],
                    "col_start": 0,
                    "row_start": 0,
                    "row_end": 2,
                    "col_end": 1,
                    "words": "项目",
                    "contents": [
                        {
                            "poly_location": [
                                {
                                    "x": 84,
                                    "y": 60
                                },
                                {
                                    "x": 128,
                                    "y": 61
                                },
                                {
                                    "x": 128,
                                    "y": 76
                                },
                                {
                                    "x": 84,
                                    "y": 75
                                }
                            ],
                            "word": "项目"
                        }
                    ]
                },
                {
                    "cell_location": [
                        {
                            "x": 192,
                            "y": 43
                        },
                        {
                            "x": 442,
                            "y": 43
                        },
                        {
                            "x": 442,
                            "y": 68
                        },
                        {
                            "x": 192,
                            "y": 68
                        }
                    ],
                    "col_start": 1,
                    "row_start": 0,
                    "row_end": 1,
                    "col_end": 3,
                    "words": "本期数",
                    "contents": [
                        {
                            "poly_location": [
                                {
                                    "x": 308,
                                    "y": 49
                                },
                                {
                                    "x": 349,
                                    "y": 49
                                },
                                {
                                    "x": 348,
                                    "y": 63
                                },
                                {
                                    "x": 307,
                                    "y": 63
                                }
                            ],
                            "word": "本期数"
                        }
                    ]
                }
            ],
            "footer": []
        }
    ],
    "table_num": 1,
    "log_id": 1516052468533474289
}
上一篇
手写文字识别
下一篇
表格文字识别(异步接口)