微信小程序内虽然有OCR识别功能 但是收费是按次计费的,还是选用了百度ai提供的OCR识别二代身份证。
// 上传人面像upFileFront:function(e){let type = e.currentTarget.dataset.typelet self = this;wx.chooseImage({count:1,sourceType: ["album", "camera"],success (res) {var tempFilesSize = res.tempFiles[0].size; //获取图片的大小,单位Bif (tempFilesSize <= 10000000) {//图片小于或者等于10M时 可以执行获取图片self.setData({frontLoad: true})const tempFilePaths = res.tempFilePaths;wx.uploadFile({url: app.globalData.domain + '/baiduAI/idCardOrc', //这个是后台提供已经处理过的接口filePath: tempFilePaths[0],name: 'file',formData: {idCardSide: "front"},success(res) {let result = JSON.parse(res.data)if (result.code == 200) {let imgStatus = self.checkStatus(result.data.image_status);if (imgStatus != 1) {wx.showModal({content: imgStatus,showCancel: false,confirmColor: "#429dff",confirmText: "确定"})}else {self.setData({positiveImg: tempFilePaths[0]})}}else {wx.showModal({content: res.data.message,showCancel: false,confirmColor: "#429dff",confirmText: "确定",success: function (res) {if (res.confirm) {wx.navigateBack()}}})}},complete() {self.setData({frontLoad: false})}})} else {wx.showToast({title: '上传图片不能大于10M!', //标题icon: 'none' //图标 none不使用图标,详情看官方文档})}}})},checkStatus: function(status){//返回OCR识别验证的结果switch (status) {case "normal": //识别正常return "1"break;case "reversed_side": //身份证正反面颠倒return "身份证正反面颠倒"break;case "non_idcard": //上传的图片中不包含身份证return "上传的图片中不包含身份证"break;case "blurred": //身份证模糊return "身份证模糊"break;case "other_type_card": //其他类型证照return "其他类型证照"break;case "over_exposure": //身份证关键字段反光或过曝return "身份证关键字段反光或过曝"break;case "over_dark": // 身份证欠曝(亮度过低)return "身份证欠曝(亮度过低)"break;case "unknown": //未知状态return "未知状态"}},
以上是将图片传给后台, 让后台自行把图片处理过后再到百度AI平台进行OCR识别。百度AI平台的OCR身份证识别可以同过官方发布的规则进行:
百度AI平台身份证识别帮助文档
如果后台没有对图片进行处理, 前端可以将选择的图片进行base64位转换之后再传给后台:
upFileFront:function(e){let type = e.currentTarget.dataset.typelet self = this;wx.chooseImage({count:1,sourceType: ["album", "camera"],success (res) {var tempFilesSize = res.tempFiles[0].size; //获取图片的大小,单位Bif (tempFilesSize <= 10000000) {//图片小于或者等于2M时 可以执行获取图片self.setData({frontLoad: true})const tempFilePaths = res.tempFilePaths;wx.getFileSystemManager().readFile({//核心代码,将选中的图片进行base64位格式转换filePath: res.tempFilePaths[0],encoding: 'base64', //编码格式success(result) {console.log(result.data)wx.request({//百度AI平台 OCR识别链接 同时带参数请求//请求URL:/rest/2.0/ocr/v1/idcardurl: '',data: '',header: {},method: 'GET',dataType: 'json',responseType: 'text',success: function(res) {},fail: function(res) {},complete: function(res) {},})}})} else {wx.showToast({title: '上传图片不能大于10M!', //标题icon: 'none'})}}})},