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

    试卷分析与识别

    接口描述

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

    在线调试

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

    请求说明

    请求示例

    HTTP 方法:POST

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

    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
    words_type string handwring_only/ handprint_mix 文字类型。
    默认:印刷文字识别
    = handwring_only:手写文字识别
    = handprint_mix: 手写印刷混排识别
    layout_analysis string true/false 是否分析文档版面:包括图、表、标题、段落的分析输出

    请求代码示例

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

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

    # 文档版面分析与识别
    curl -i -k 'https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis?access_token=【调用鉴权接口获取的token】' --data 'language_type=CHN_ENG&result_type=big&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"
    # 二进制方式打开图片文件
    f = open('[本地文件]', 'rb')
    img = base64.b64encode(f.read())
    
    params = {"image":img,"language_type":"CHN_ENG","result_type":"big"}
    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 DocAnalysis {
    
        /**
        * 重要提示代码中所需工具类
        * 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 docAnalysis() {
            // 请求url
            String url = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis";
            try {
                // 本地文件路径
                String filePath = "[本地文件路径]";
                byte[] imgData = FileUtil.readFileByBytes(filePath);
                String imgStr = Base64Util.encode(imgData);
                String imgParam = URLEncoder.encode(imgStr, "UTF-8");
    
                String param = "language_type=" + "CHN_ENG" + "&result_type=" + "big" + "&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) {
            DocAnalysis.docAnalysis();
        }
    }
    #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";
    static std::string docAnalysis_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格式
        docAnalysis_result = std::string((char *) ptr, size * nmemb);
        return size * nmemb;
    }
    /**
     * 文档版面分析与识别
     * @return 调用成功返回0,发生错误返回其他错误码
     */
    int docAnalysis(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, "language_type", CURLFORM_COPYCONTENTS, "CHN_ENG", CURLFORM_END);
            curl_formadd(&post, &last, CURLFORM_COPYNAME, "result_type", CURLFORM_COPYCONTENTS, "big", CURLFORM_END);
            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 = docAnalysis_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?access_token=' . $token;
    $img = file_get_contents('[本地文件路径]');
    $img = base64_encode($img);
    $bodys = array(
        'language_type' => "CHN_ENG",
        'result_type' => "big",
        '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 DocAnalysis
        {
            // 文档版面分析与识别
            public static string docAnalysis()
            {
                string token = "[调用鉴权接口获取的token]";
                string host = "https://aip.baidubce.com/rest/2.0/ocr/v1/doc_analysis?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 = "language_type=" + "CHN_ENG" + "&result_type=" + "big" + "&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 整行的识别结果
    ++ 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[] 文档版面信息数组,包含表格、图、段落文本、标题等标签;标签的坐标位置;段落文本和表格内文本内容对应的行序号ID
    + layout string 版面分析的标签结果。表格:table, 图:figure, 文本:text, 标题:title
    + 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 参数有效时返回该字段

    返回示例

    {
    	"results_num": 6,
    	"log_id": "4488766695474114139",
    	"img_direction": 0,
    	"layouts_num": 0,
    	"results": [
    		{
    			"words_type": "print",
    			"words": {
    				"words_location": {
    					"top": 124,
    					"left": 136,
    					"width": 418,
    					"height": 65
    				},
    				"word": "五默写(4分)"
    			},
    		},
    		{
    			"words_type": "print",
    			"words": {
    				"words_location": {
    					"top": 246,
    					"left": 136,
    					"width": 37,
    					"height": 45
    				},
    				"word": "1"
    			},
    		},
    		{
    			"words_type": "handwriting",
    			"words": {
    				"words_location": {
    					"top": 195,
    					"left": 237,
    					"width": 469,
    					"height": 104
    				},
    				"word": "采菊东篱下"
    			},
    		},
    		{
    			"words_type": "print",
    			"words": {
    				"words_location": {
    					"top": 241,
    					"left": 889,
    					"width": 287,
    					"height": 52
    				},
    				"word": "悠然见南山?"
    			},
    		},
    		{
    			"words_type": "print",
    			"words": {
    				"words_location": {
    					"top": 415,
    					"left": 134,
    					"width": 472,
    					"height": 52
    				},
    				"word": "2.商女不知亡国恨"
    			},
    		},
    		{
    			"words_type": "handwriting",
    			"words": {
    				"words_location": {
    					"top": 377,
    					"left": 607,
    					"width": 556,
    					"height": 93
    				},
    				"word": "隔江犹唱后庭花。"
    			},
    		},
    	]
    }
    上一篇
    医疗票据文字识别
    下一篇
    公式识别