手写文字识别
百度 官方文档
能够对手写汉字和手写数字进行识别
基本说明:
接口地址:https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting
返回格式:json
请求方式:post
请求示例:https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting?access_token=test
请求参数说明:
名称 类型 必填 说明
image string 必填 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/png/bmp格式
recognize_granularity string 选填 是否定位单字符位置,big:不定位单字符位置,默认值;small:定位单字符位置
words_type string 选填 words_type=number:手写数字识别;无此参数或传其它值 默认手写通用识别(目前支持汉字和英文)
返回参数说明:
名称 类型 说明
log_id uint64 唯一的log id,用于问题定位
words_result_num uint32 识别结果数,表示words_result的元素个数
words_result array() 定位和识别结果数组
location object 位置数组(坐标0点为左上角)
left uint32 表示定位位置的长方形左上顶点的水平坐标
top uint32 表示定位位置的长方形左上顶点的垂直坐标
width uint32 表示定位位置的长方形的宽度
height uint32 表示定位位置的长方形的高度
words string 识别结果字符串
chars array() 单字符结果,recognize_granularity=small时存在
location array() 位置数组(坐标0点为左上角)
left uint32 表示定位位置的长方形左上顶点的水平坐标
top uint32 表示定位位置的长方形左上顶点的垂直坐标
width uint32 表示定位定位位置的长方形的宽度
height uint32 表示位置的长方形的高度
char string 单字符识别结果
probability object 识别结果中每一行的置信度值,包含average:行置信度平均值,variance:行置信度方差,min:行置信度最小值
JSON返回示例:
{
	"log_id": 620759800,
	"words_result": [{
		"location": {
			"left": 56,
			"top": 0,
			"width": 21,
			"height": 210
		},
		"words": "3"
	}],
	"words_result_num": 1
}
服务级错误码参照
错误码 说明
1 服务器内部错误,请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队
2 服务暂不可用,请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队
3 调用的API不存在,请检查后重新尝试
4 集群超限额
6 无权限访问该用户数据
14 IAM鉴权失败,建议用户参照文档自查生成sign的方式是否正确,或换用控制台中ak sk的方式调用
17 每天请求量超限额
18 QPS超限额
19 请求总量超限额
100 无效的access_token参数,请检查后重新尝试
110 access_token无效
111 access token过期
282000 服务器内部错误,如果您使用的是高精度接口,报这个错误码的原因可能是您上传的图片中文字过多,识别超时导致的,建议您对图片进行切割后再识别,其他情况请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队
216100 请求中包含非法参数,请检查后重新尝试
216101 缺少必须的参数,请检查参数是否有遗漏
216102 请求了不支持的服务,请检查调用的url
216103 请求中某些参数过长,请检查后重新尝试
216110 appid不存在,请重新核对信息是否为后台应用列表中的appid
216200 图片为空,请检查后重新尝试
216201 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、JPEG、BMP,请进行转码或更换图片
216202 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096*4096,请重新上传图片
216630 识别错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队
216631 识别银行卡错误,出现此问题的原因一般为:您上传的图片非银行卡正面,上传了异形卡的图片或上传的银行卡正品图片不完整
216633 识别身份证错误,出现此问题的原因一般为:您上传了非身份证图片或您上传的身份证图片不完整
216634 检测错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队
272000 未能匹配模板,请检查参照字段的设置是否符合规范,并重新选取或增加更多的参照字段
272001 未能成功分类
282003 请求参数缺失
282004 您指定的模板暂未发布,请先保存发布该模板,再调用
282005 处理批量任务时发生部分或全部错误,请根据具体错误码排查
282006 批量任务处理数量超出限制,请将任务数量减少到10或10以下
282102 未检测到图片中识别目标,请确保图片中包含对应卡证票据
282103 图片目标识别错误,请确保图片中包含对应卡证票据,如果持续出现此类错误,请在控制台提交工单联系技术支持团队
282110 URL参数不存在,请核对URL后再次提交
282111 URL格式非法,请检查url格式是否符合相应接口的入参要求
282112 url下载超时,请检查url对应的图床/图片无法下载或链路状况不好,您可以重新尝试一下,如果多次尝试后仍不行,建议更换图片地址
282113 URL返回无效参数
282114 URL长度超过1024字节或为0
282808 request id xxxxx 不存在
282809 返回结果请求错误(不属于excel或json)
282810 图像识别错误
完整教学代码示例
<?php
/**
 * Created by PhpStorm.
 * User: FZS
 * Time: 2019/3/13 17:10
 */
//----------------------------------
// 百度手写文字识别调用类
//----------------------------------
class freeApi{
    private $apiKey = false; //百度应用AppID
    private $secretKey = false; //百度应用API Key
    private $tokenUrl = 'https://aip.baidubce.com/oauth/2.0/token';
    private $apiUrl = 'https://aip.baidubce.com/rest/2.0/ocr/v1/handwriting';
    public function __construct($apikey,$secretkey){
        $this->apiKey = $apikey;
        $this->secretKey = $secretkey;
    }
    /**
     * 获取token
     * @return array
     */
    public function getToken(){
        $params = [
            'grant_type' => 'client_credentials',
            'client_id'  => $this->apiKey,
            'client_secret' => $this->secretKey,
        ];
        $params = $this->handleUrl($params);
        return $this->returnArray($this->freeApiCurl($this->tokenUrl,$params,1));
    }
    /**
     * url拼接
     * @return string
     */
    private function handleUrl($params){
        $o = "";
        foreach ( $params as $k => $v )
        {
            $o.= "$k=" . urlencode( $v ). "&" ;
        }
        $params = substr($o,0,-1);
        return $params;
    }
    /**
     * 将JSON内容转为数据,并返回
     * @param string $content [内容]
     * @return array
     */
    public function returnArray($content){
        return json_decode($content,true);
    }
    /**
     * 获取手写文字识别结果
     * @return array
     */
    public function getResult(){
        $params = [
            'image' => base64_encode(file_get_contents('图片路径')),
        ];
        return $this->returnArray($this->freeApiCurl($this->apiUrl.'?access_token='.$this->getToken()['access_token'],$params,1));
    }
    /**
     * 请求接口返回内容
     * @param  string $url [请求的URL地址]
     * @param  string $params [请求的参数]
     * @param  int $ipost [是否采用POST形式]
     * @return  string
     */
    public function freeApiCurl($url,$params=false,$ispost=0){
        $httpInfo = array();
        $ch = curl_init();
        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_HTTP_VERSION , CURL_HTTP_VERSION_1_1 );
        curl_setopt( $ch, CURLOPT_USERAGENT , 'free-api' );
        curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT , 60 );
        curl_setopt( $ch, CURLOPT_TIMEOUT , 60);
        curl_setopt( $ch, CURLOPT_RETURNTRANSFER , true );
        if( $ispost )
        {
            curl_setopt( $ch , CURLOPT_POST , true );
            curl_setopt( $ch , CURLOPT_POSTFIELDS , $params );
            curl_setopt( $ch , CURLOPT_URL , $url );
        }
        else
        {
            if($params){
                curl_setopt( $ch , CURLOPT_URL , $url.'?'.$params );
            }else{
                curl_setopt( $ch , CURLOPT_URL , $url);
            }
        }
        $response = curl_exec( $ch );
        if ($response === FALSE) {
            return false;
        }
        $httpCode = curl_getinfo( $ch , CURLINFO_HTTP_CODE );
        $httpInfo = array_merge( $httpInfo , curl_getinfo( $ch ) );
        curl_close( $ch );
        return $response;
    }
}