微信小程序接入百度OCR(身份证识别)
Kindear_chen 人气:0
### 微信小程序接入百度OCR(SFZ识别)
#### 1.接口描述
支持对二代居民SFZ正反面所有8个字段进行结构化识别,包括姓名、性别、民族、出生日期、住址、SFZ号、签发机关、有效期限,识别准确率超过99%;同时支持SFZ正面头像检测,并返回头像切片的base64编码及位置信息。
同时,支持对用户上传的SFZ图片进行图像风险和质量检测,可识别图片是否为复印件或临时SFZ,是否被翻拍或编辑,是否存在正反颠倒、模糊、欠曝、过曝等质量问题。
**请求示例**
HTTP 方法:`POST`
请求URL: `https://aip.baidubce.com/rest/2.0/ocr/v1/idcard`
URL参数:
| 参数 | 值 |
| ------------ | ------------------------------------------------------------ |
| access_token | 通过API Key和Secret Key获取的access_token,参考“[Access Token获取](http://ai.baidu.comhttps://img.qb5200.com/download-x/docs#/Auth)” |
Header如下:
| 参数 | 值 |
| ------------ | --------------------------------- |
| Content-Type | application/x-www-form-urlencoded |
Body中放置请求参数,参数详情如下:
**请求参数**
| 参数 | 是否必选 | 类型 | 可选值范围 | 说明 |
| ---------------- | -------- | ------ | ---------- | ------------------------------------------------------------ |
| image | 是 | string | - | 图像数据,base64编码后进行urlencode,要求base64编码和urlencode后大小不超过4M,最短边至少15px,最长边最大4096px,支持jpg/jpeg/png/bmp格式 |
| id_card_side | 是 | string | front/back | front:SFZ含照片的一面;back:SFZ带国徽的一面 |
| detect_direction | 否 | string | true/false | 是否检测图像旋转角度,默认检测,即:true。朝向是指输入图像是正常方向、逆时针旋转90/180/270度。可选值包括: - true:检测旋转角度; - false:不检测旋转角度。 |
| detect_risk | 否 | string | true/false | 是否开启SFZ风险类型(SFZ复印件、临时SFZ、SFZ翻拍、修改过的SFZ)功能,默认不开启,即:false。可选值:true-开启;false-不开启 |
| detect_photo | 否 | string | true/false | 是否检测头像内容,默认不检测。可选值:true-检测头像并返回头像的 base64 编码及位置信息 |
| detect_rectify | 否 | string | true/false | 是否进行完整性校验,默认为true,需上传各字段内容完善的图片方可识别;如果设置为false,则对于SFZ切片(如仅SFZ号区域)也可识别 |
#### 2.小程序端调用
需要参数access_token,存放在云数据库中,并定时刷新,不明白如何获取并定时刷新的参考文章:
[[小程序开发技巧总结(三)-- 云开发时效数据刷新和存储 (access_token等)](https://www.cnblogs.com/masterchd/p/12431426.html)]
2.1 自定义文件 **profunc.js**,实现函数并封装
~~~js
function OcrIdCard(access_token){
return new Promise(function(resolve,reject){
var that = this;
//识别SFZ
wx.chooseImage({
count: 1,
sizeType: ['compressed'],
sourceType: ['album', 'camera'],
success: function (res) {
console.log(res.tempFilePaths)
wx.getFileSystemManager().readFile({
filePath: res.tempFilePaths[0],
encoding: 'base64', //编码格式
success(ans) {
// console.log(ans.data)
wx.showLoading({ title: '识别中' })
wx.request({
url: 'https://aip.baidubce.com/rest/2.0/ocr/v1/idcard?access_token=' + access_token,
method: 'POST',
header: {
'Content-Type': 'application/x-www-form-urlencoded'
},
data: {
image: ans.data,
id_card_side: 'front'
},
success(_res) {
wx.hideLoading();
resolve(_res)
}, fail(_res) {
wx.hideLoading();
wx.showToast({
title: '请求出错',
})
reject(_res)
}
})
}
})
}
})
})
}
module.exports = {
OcrIdCard: OcrIdCard
}
~~~
2.2 在小程序页面引用,需要传入access_token
~~~js
const cwx = require('profunc.js'); //在小程序页面引入该js 文件
...
ocridcard(){
var that = this;
cwx.OcrIdCard(that.data.access_token).then(function(_res){
var trdata = _res.data.words_result;
console.log(trdata)
that.setData({
name: trdata['姓名'].words,
idcard: trdata['公民身份号码'].words,
userloc: trdata['住址'].words
})
})
}
~~~
#### 3.效果展示
![](https://gitee.com/Kindear/BlogAssets/raw/master/cnblogs/unnamed.jpg)
接口返回数据如下
![](https://gitee.com/Kindear/BlogAssets/raw/master/cnblogs/20200309221213.png)
> 小程序 Android Web 等开发欢迎联系 QQ 1025584691
加载全部内容