首先,想要使用ocr识别,是要成为百度云的开发者。
第一步:
成为开发者之后,接下来去管理控制台找到文字识别。
然后在应用列表创建应用:身份证识别获取到对应API Key与Secret Key(重要的一步)。
上面几步操作都是为以下获取Token做的铺垫。
- 获取AccessToken
博主成功案例,图片下方附上url,参数介绍
接口说明
向授权服务地址 https://aip.baidubce.com/oauth/2.0/token 发送请求(推荐使用POST)。
请求URI
POST /oauth/2.0/token
参数名称 | 参数类型 | 是否必须 | 描述 | 示例值 | 参数位置 |
grant_type | String | 是 | client_credentials | Query | |
client_id | String | 是 | Va***********uXV4 | Query | |
client_secret | String | 是 | 0r******************pVw2 | Query |
grant_type填写表格对应的示例值,client_id对应你刚才创建应用里的API Key,client_secret对应Secret Key。
到这里完成重要的一步,获取到自己的Access Token。
身份证识别接口描述:
支持对二代居民身份证正反面所有8个字段进行结构化识别,包括姓名、性别、民族、出生日期、住址、身份证号、签发机关、有效期限,识别准确率超过99%;同时支持身份证正面头像检测,并返回头像切片的base64编码及位置信息。
同时,支持对用户上传的身份证图片进行图像质量和风险检测,是否存在正反颠倒、模糊、欠曝、过曝等质量问题,可识别图片是否为复印件或临时身份证,是否被翻拍或编辑,是否存在四角不完整、头像或关键字段被遮挡。
请求URI
POST /rest/2.0/ocr/v1/idcard
参数名称 | 参数类型 | 是否必须 | 描述 | 示例值 | 参数位置 |
access_token | String | 是 | 通过API Key和Secret Key获取的access_token。 | 24.6c5e1ff107f0e8bcef8c46d3424a0e78.2592000.1485516651.282335-8574074 | Query |
请求头参数
参数名称 | 参数类型 | 是否必须 | 描述 | 示例值 |
Content-Type | String | 是 | 请求体的编码格式 | application/x-www-form-urlencoded |
package com.stx.controller;
/**
* @Author author
* @Date 2022/7/11/0011 15:04
*/
import com.baidubce.http.ApiExplorerClient;
import com.baidubce.http.HttpMethodName;
import com.baidubce.model.ApiExplorerRequest;
import com.baidubce.model.ApiExplorerResponse;
// 身份证识别 示例代码
public class IdCardDemo {
public static void main(String[] args) {
String path = "https://aip.baidubce.com/rest/2.0/ocr/v1/idcard";
ApiExplorerRequest request = new ApiExplorerRequest(HttpMethodName.POST, path);
// 设置header参数
request.addHeaderParameter("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
// 设置query参数
request.addQueryParameter("access_token", "上面获取到的Access Token");
// 设置jsonBody参数
String jsonBody = "url=https://baidu-ai.bj.bcebos.com/ocr/idcard.jpeg&id_card_side=front";
request.setJsonBody(jsonBody);
ApiExplorerClient client = new ApiExplorerClient();
try {
ApiExplorerResponse response = client.sendRequest(request);
// 返回结果格式为Json字符串
System.out.println(response.getResult());
} catch (Exception e) {
e.printStackTrace();
}
}
}
然后你会发现返回值是error_code:18,error_message:Open api qps request limit reached
看到自己响应结果可以对照下面的错误码,来一一解决。
错误码
错误码 | 错误描述 | HTTP状态码 | 中文解释 |
1 | Unknown error | 200 | 服务器内部错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
2 | Service temporarily unavailable | 200 | 服务暂不可用,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
3 | Unsupported openapi method | 200 | 调用的API不存在,请检查请求URL后重新尝试,一般为URL中有非英文字符,如"-",可手动输入重试 |
4 | Open api request limit reached | 200 | 集群超限额,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
6 | No permission to access data | 200 | 无权限访问该用户数据,创建应用时未勾选相关文字识别接口,请登录百度云控制台,找到对应的应用,编辑应用,勾选上相关接口后重新调用 |
14 | IAM Certification failed | 200 | IAM鉴权失败,建议用户参照文档自查生成sign的方式是否正确,或换用控制台中ak sk的方式调用 |
17 | Open api daily request limit reached | 200 | 免费测试资源使用完毕,每天请求量超限额,已支持计费的接口,您可以在控制台文字识别服务选择购买相关接口的次数包或开通按量后付费;邀测和未支持计费的接口,您可以在控制台提交工单申请提升限额 |
18 | Open api qps request limit reached | 200 | QPS超限额,免费额度并发限制为2QPS,开通按量后付费或购买次数包后并发限制为10QPS,如您需要更多的并发量,可以选择购买QPS叠加包;邀测和未支持计费的接口,您可以在控制台提交工单申请提升限额 |
19 | Open api total request limit reached | 200 | 请求总量超限额,已支持计费的接口,您可以在控制台文字识别服务选择购买相关接口的次数包或开通按量后付费;邀测和未支持计费的接口,您可以在控制台提交工单申请提升限额 |
100 | Invalid parameter | 200 | 无效的access_token参数,token拉取失败,您可以参考“Access Token获取”文档重新获取 |
110 | Access token invalid or no longer valid | 200 | access_token无效,token有效期为30天,请注意需要定期更换,也可以每次请求都拉取新token |
111 | Access token expired | 200 | access token过期,token有效期为30天,请注意需要定期更换,也可以每次请求都拉取新token |
216100 | invalid param | 200 | 请求中包含非法参数,请检查后重新尝试 |
216101 | not enough param | 200 | 缺少必须的参数,请检查参数是否有遗漏 |
216102 | service not support | 200 | 请求了不支持的服务,请检查调用的url |
216103 | param too long | 200 | 请求中某些参数过长,请检查后重新尝试 |
216110 | appid not exist | 200 | appid不存在,请重新核对信息是否为后台应用列表中的appid |
216200 | empty image | 200 | 图片为空,请检查后重新尝试 |
216201 | image format error | 200 | 上传的图片格式错误,现阶段我们支持的图片格式为:PNG、JPG、JPEG、BMP,请进行转码或更换图片 |
216202 | image size error | 200 | 上传的图片大小错误,现阶段我们支持的图片大小为:base64编码后小于4M,分辨率不高于4096*4096,请重新上传图片 |
216202 | input oversize | 200 | 上传的包体积过大,现阶段不支持 10M 或以上的数据包 |
216630 | recognize error | 200 | 识别错误,请再次请求,请确保图片中包含对应卡证票据 |
216631 | recognize bank card error | 200 | 识别银行卡错误,出现此问题的原因一般为:您上传的图片非银行卡正面,上传了异形卡的图片、上传的银行卡正面图片不完整或模糊 |
216633 | recognize idcard error | 200 | 识别身份证错误,出现此问题的原因一般为:您上传了非身份证图片、上传的身份证图片不完整或模糊 |
216634 | detect error | 200 | 检测错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
282000 | internal error | 200 | 服务器内部错误,如果您使用的是高精度接口,报这个错误码的原因可能是您上传的图片中文字过多,识别超时导致的,建议您对图片进行切割后再识别,其他情况请再次请求, 如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
282003 | missing parameters: {参数名} | 200 | 请求参数缺失 |
282005 | batch processing error | 200 | 处理批量任务时发生部分或全部错误,请根据具体错误码排查 |
282006 | batch task limit reached | 200 | 批量任务处理数量超出限制,请将任务数量减少到10或10以下 |
282100 | image transcode error | 200 | 图片压缩转码错误 |
282102 | target detect error | 200 | 未检测到图片中识别目标,请确保图片中包含对应卡证票据,出现此问题的原因一般为:您上传了非卡证图片、图片不完整或模糊 |
282103 | target recognize error | 200 | 图片目标识别错误,请确保图片中包含对应卡证票据,出现此问题的原因一般为:您上传了非卡证图片、图片不完整或模糊 |
282110 | urls not exit | 200 | URL参数不存在,请核对URL后再次提交 |
282111 | url format illegal | 200 | URL格式非法,请检查url格式是否符合相应接口的入参要求 |
282112 | url download timeout | 200 | url下载超时,请检查url对应的图床/图片无法下载或链路状况不好,或图片大小大于3M,或图片存在防盗链,您可以重新尝试一下,如果多次尝试后仍不行,建议更换图片地址 |
282113 | url response invalid | 200 | URL返回无效参数 |
282114 | url size error | 200 | URL长度超过1024字节或为0 |
282808 | request id: xxxxx not exist | 200 | request id xxxxx 不存在 |
282809 | result type error | 200 | 返回结果请求错误(不属于excel或json) |
282810 | image recognize error | 200 | 图像识别错误,请再次请求,如果持续出现此类错误,请在控制台提交工单联系技术支持团队 |
我碰到的这个问题就是QPS值并发额度限制了,通俗来讲就是没交钱。
接下来 告诉你个白嫖办法,你就去刚才创建应用获取Key,那一块找到菜单上的概览。
这有一个领取免费资源,足够个人开发者测试用了,记得领完资源刷新一下接口网址,再次发送。 使用Java代码的不需要这步操作。
你会发现成功了,大功告成!完事。