小程序识别身份证,银行卡,营业执照,驾照的实现


Posted in Javascript onNovember 05, 2019

最近老是有同学问我小程序ocr识别的问题,就趁机研究了下,实现了小程序识别身份证,银行卡,驾照,营业执照,图片文字的功能。今天来给大家讲讲详细的实现流程。

先画一张流程图出来

小程序识别身份证,银行卡,营业执照,驾照的实现

第一次看到这个流程图,可能有点萌,什么云开发,云函数。。。。

不要着急,我们接下来会一步步带大家实现。

先看下我们的页面和效果图。

小程序识别身份证,银行卡,营业执照,驾照的实现

功能其实很简单,就是我们点对应的按钮后,去拍照或者去相册选择对应的图片。然后把图片上传到云存储,会有一个对应的图片url,然后把这个图片url传递到云函数,然后云函数里使用小程序的开发ocr能力,来识别图片,返回对应的信息回来。如下图所示,我们识别银行卡(身份证什么的就不演示了,涉及到石头哥个人隐私)

小程序识别身份证,银行卡,营业执照,驾照的实现

接下来就是代码的实现了。

一,首先要创建一个云开发的小程序项目

这里我前面文章有讲解过,就不再细说了,不会的同学去翻看下我之前的文章。或者看下我录制的讲解视频

这里有一点需要注意的给大家说下

小程序识别身份证,银行卡,营业执照,驾照的实现 

二,创建一个简单的小程序页面

1,index.wxml如下

小程序识别身份证,银行卡,营业执照,驾照的实现 

2,index.js完整代码如下

Page({

 //身份证
 shenfenzheng() {
  this.photo("shenfenzheng")
 },
 //银行卡
 yinhangka() {
  this.photo("yinhangka")
 },
 //行驶证
 xingshizheng() {
  this.photo("xingshizheng")
 },

 //拍照或者从相册选择要识别的照片
 photo(type) {
  let that = this
  wx.chooseImage({
   count: 1,
   sizeType: ['original', 'compressed'],
   sourceType: ['album', 'camera'],
   success(res) {
    // tempFilePath可以作为img标签的src属性显示图片
    let imgUrl = res.tempFilePaths[0];
    that.uploadImg(type, imgUrl)
   }
  })
 },

 // 上传图片到云存储
 uploadImg(type, imgUrl) {
  let that = this
  wx.cloud.uploadFile({
   cloudPath: 'ocr/' + type + '.png',
   filePath: imgUrl, // 文件路径
   success: res => {
    console.log("上传成功", res.fileID)
    that.getImgUrl(type, res.fileID)
   },
   fail: err => {
    console.log("上传失败", err)
   }
  })
 },

 //获取云存储里的图片url
 getImgUrl(type, imgUrl) {
  let that = this
  wx.cloud.getTempFileURL({
   fileList: [imgUrl],
   success: res => {
    let imgUrl = res.fileList[0].tempFileURL
    console.log("获取图片url成功", imgUrl)
    that.shibie(type, imgUrl)
   },
   fail: err => {
    console.log("获取图片url失败", err)
   }
  })
 },

 //调用云函数,实现OCR识别
 shibie(type, imgUrl) {
  wx.cloud.callFunction({
   name: "ocr",
   data: {
    type: type,
    imgUrl: imgUrl
   },
   success(res) {
    console.log("识别成功", res)
   },
   fail(res) {
    console.log("识别失败", res)
   }
  })
 }
})

上面代码注释讲解的很清楚了,再结合我们的流程图,相信你可以看明白。

小程序识别身份证,银行卡,营业执照,驾照的实现 

三,重头戏来了,识别的核心代码是下面这个云函数

小程序识别身份证,银行卡,营业执照,驾照的实现

云函数的完整代码也给大家贴出来

// 云函数入口文件
const cloud = require('wx-server-sdk')
cloud.init()

// 云函数入口函数
exports.main = async(event, context) => {
 let {
  type,
  imgUrl
 } = event
 switch (type) {
  case 'shenfenzheng':
   {
    // 识别身份证
    return shenfenzheng(imgUrl)
   }
  case 'yinhangka':
   {
    // 识别银行卡
    return yinhangka(imgUrl)
   }
  case 'xingshizheng':
   {
    // 识别行驶证
    return xingshizheng(imgUrl)
   }
  default:
   {
    return
   }
 }
}

//识别身份证
async function shenfenzheng(imgUrl) {
 try {
  const result = await cloud.openapi.ocr.idcard({
   type: 'photo',
   imgUrl: imgUrl
  })
  return result
 } catch (err) {
  console.log(err)
  return err
 }
}
//识别银行卡
async function yinhangka(imgUrl) {
 try {
  const result = await cloud.openapi.ocr.bankcard({
   type: 'photo',
   imgUrl: imgUrl
  })
  return result
 } catch (err) {
  console.log(err)
  return err
 }
}
//识别行驶证
async function xingshizheng(imgUrl) {
 try {
  const result = await cloud.openapi.ocr.vehicleLicense({
   type: 'photo',
   imgUrl: imgUrl
  })
  return result
 } catch (err) {
  console.log(err)
  return err
 }
}

其实没什么特别的,就是用一个switch方法,根据用户传入的不同的type值,来实现不同的识别效果。

如用传入的type是‘ yinhangka',我们就调用银行卡识别

try {
  const result = await cloud.openapi.ocr.bankcard({
   type: 'photo',
   imgUrl: imgUrl
  })
  return result
 } catch (err) {
  console.log(err)
  return err
 }

进而把识别的结果返回给小程序端,如下图

小程序识别身份证,银行卡,营业执照,驾照的实现

到这里我们就完整的实现了,小程序识别身份证,银行卡,行驶证的功能。至于别的更多的ocr识别,可以去看小程序官方文档,结合着我的这篇文章,相信你也可以轻松实现更多的图片识别。

小程序识别身份证,银行卡,营业执照,驾照的实现

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
提高代码性能技巧谈—以创建千行表格为例
Jul 01 Javascript
JavaScript 乱码问题
Aug 06 Javascript
js判断60秒以及倒计时示例代码
Jan 24 Javascript
ZeroClipboard插件实现多浏览器复制功能(支持firefox、chrome、ie6)
Aug 30 Javascript
js获得当前系统日期时间的方法
May 06 Javascript
js HTML5 Canvas绘制转盘抽奖
Sep 13 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
Aug 23 Javascript
解决canvas画布使用fillRect()时高度出现双倍效果的问题
Aug 03 Javascript
angular写一个列表的选择全选交互组件的示例
Jan 22 Javascript
js中let和var定义变量的区别
Feb 08 Javascript
vue使用xe-utils函数库的具体方法
Mar 06 Javascript
vue watch深度监听对象实现数据联动效果
Aug 16 Javascript
node.js域名解析实现方法详解
Nov 05 #Javascript
node.js文件操作系统实例详解
Nov 05 #Javascript
Vue中使用matomo进行访问流量统计的实现
Nov 05 #Javascript
node.js实现简单的压缩/解压缩功能示例
Nov 05 #Javascript
js实现随机点名程序
Sep 17 #Javascript
vue+vant-UI框架实现购物车的复选框全选和反选功能
Nov 05 #Javascript
Vue通过WebSocket建立长连接的实现代码
Nov 05 #Javascript
You might like
ThinkPHP框架实现session跨域问题的解决方法
2014/07/01 PHP
PHP简单实现“相关文章推荐”功能的方法
2014/07/19 PHP
深入理解PHP内核(一)
2015/11/10 PHP
Zend Framework教程之Bootstrap类用法概述
2016/03/14 PHP
Yii视图CGridView实现操作按钮定义地址示例
2016/07/14 PHP
PHP入门教程之字符串处理技巧总结(转换,过滤,解析,查找,截取,替换等)
2016/09/11 PHP
PHP APP微信提现接口代码
2018/09/30 PHP
laravel 框架结合关联查询 when()用法分析
2019/11/22 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
jquery keypress,keyup,onpropertychange键盘事件
2010/06/25 Javascript
JavaScript获取文本框内选中文本的方法
2015/02/20 Javascript
JS实现n秒后自动跳转的两种方法
2020/11/30 Javascript
window.close(); 关闭浏览器窗口js代码的总结介绍
2016/07/14 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
laydate.js日期时间选择插件
2017/01/04 Javascript
微信小程序 解析网页内容详解及实例
2017/02/22 Javascript
JavaScript之事件委托实例(附原生js和jQuery代码)
2017/07/22 jQuery
解决微信小程序防止无法回到主页的问题
2018/09/28 Javascript
详解vantUI框架在vue项目中的应用踩坑
2018/12/06 Javascript
nodejs异步编程基础之回调函数用法分析
2018/12/26 NodeJs
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
vue项目启动出现cannot GET /服务错误的解决方法
2020/04/26 Javascript
Python通过正则表达式选取callback的方法
2015/07/18 Python
Python实现曲线拟合操作示例【基于numpy,scipy,matplotlib库】
2018/07/12 Python
使用python实现语音文件的特征提取方法
2019/01/09 Python
关于Python作用域自学总结
2019/06/10 Python
使用python实现下载我们想听的歌曲,速度超快
2020/07/09 Python
CSS3教程(1):什么是CSS3
2009/04/02 HTML / CSS
华为旗下电子商务平台:华为商城
2016/08/06 全球购物
音乐教学案例
2014/01/30 职场文书
小学生获奖感言范文
2014/02/02 职场文书
幸福家庭事迹材料
2014/12/20 职场文书
Nginx 过滤静态资源文件的访问日志的实现
2021/03/31 Servers
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
详细聊一聊mysql的树形结构存储以及查询
2022/04/05 MySQL