微信小程序因为业务扩展需要用户身份证信息,这里记录一下在小程序中通过百度ocr识别的一个开发过程记录。
1. 注册百度云账号
首先,我们要去百度云注册个账号,百度云注册 ,已经注册过可以忽略这部。注册完成后,登录到首页,点击 产品-人工智能-卡证文字识别,查看技术文档。
2. 接口文档分析
请求说明
HTTP 方法:POST
请求URL: https://aip.baidubce.com/rest/2.0/ocr/v1/idcard
URL参数:
参数 | 值 |
---|---|
access_token | 通过API Key和Secret Key获取的access_token |
Header如下:
参数 | 值 |
---|---|
Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
请求参数
参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
---|---|---|---|---|
image | 和url二选一 | string | - | 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式 |
url | 和image二选一 | string | - | 图片完整URL,URL长度不超过1024字节,URL对应的图片base64编码后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式,当image字段存在时url字段失效 请注意关闭URL防盗链 |
id_card_side | 是 | string | front/back | -front:身份证含照片的一面 -back:身份证带国徽的一面 自动检测身份证正反面,如果传参指定方向与图片相反,支持正常识别,返回参数image_status字段为"reversed_side" |
detect_direction | 否 | string | - | 此参数新版本无需传,支持自动检测图像旋转角度 |
detect_risk | 否 | string | true/false | 是否开启身份证风险类型(身份证复印件、临时身份证、身份证翻拍、修改过的身份证)功能,默认不开启,即:false。 -true:开启,请查看返回参数risk_type; -false:不开启 |
detect_photo | 否 | string | true/false | 是否检测头像内容,默认不检测。可选值:true-检测头像并返回头像的 base64 编码及位置信息 |
detect_rectify | 否 | string | - | 此参数新版本无需传,支持自动校验图片完整性,可识别完整和切片身份证 |
看到这部已经很清晰明了,我们要传递一个 access_token 的参数,这里的access_token 是通过 API Key和Secret Key 进行的一个身份识别参数,接下来看如何获取这个 access_token。
3. 获取 access_tokenassess
请求URL数据格式
向授权服务地址https://aip.baidubce.com/oauth/2.0/token
发送请求(推荐使用POST),并在URL中带上以下参数:
-
grant_type: 必须参数,固定为
client_credentials
; -
client_id: 必须参数,应用的
API Key
; -
client_secret: 必须参数,应用的
Secret Key
;
例如:
https://aip.baidubce.com/oauth/2.0/token?grant_type=client_credentials&client_id=Va5yQRHlA4Fq5eR3LT0vuXV4&client_
接下来,获取 grant_type client_id client_secret ,向 https://aip.baidubce.com/oauth/2.0/token 发送请求获取身份证识别所需的
access_token。
到文字识别这块,我们需要创建一个应用,填好自己的信息。
填写完毕后我们会在 管理应用中看到我们创建的应用信息。
这里就有我们所需的 API Key 和 Secret Key。因为我们这里 assess_token 这一步是我们后端去获取的,assess_token 的过期时间是 30天,后端设置了定时器 每隔30天调用一次。我们前端只需要通过接口去调用去拿这个assess_token.
4. 调用接口识别身份证
这里封装一个 js 方法,去调用身份证识别。ps:我们的小程序使用 Taro框架开发的
// ocr请求
export const onOcr = async () => {
// 调用后端接口获取 assess_assess_token
const { msg } = await getAccessToken();
return new Promise((resolve, reject) => {
//识别身份证
Taro.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: function (res) {
//核心代码
Taro.getFileSystemManager().readFile({
filePath: res.tempFilePaths[0],
encoding: 'base64', //编码格式
success(ans) {
Taro.showLoading({ title: '识别中' })
Taro.request({
url: 'https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=' + msg,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: {
image: ans.data,
id_card_side: 'front'
},
success(_res) {
Taro.hideLoading();
return resolve(_res.data)
}, fail(_res) {
Taro.hideLoading();
Taro.showToast({
title: '网络出错,请稍后再试~',
icon: 'none'
})
reject(_res)
}
})
}
})
}
})
})
}
接下里也是最后一步,也是最重要一点,千万别忘记在小程序后台管理页面配置一下 request请求合法域名:
到此,就完美结束,具体的使用场景以及需求还需根据官方技术文档自行传递参数,以及失败的code码都有详细描述。最后提醒一下,每条应用管理 每天免费调用次数只有500次。