美文网首页
小程序实现百度AI 银行卡识别功能

小程序实现百度AI 银行卡识别功能

作者: 云高风轻 | 来源:发表于2021-12-13 22:34 被阅读0次

1. 前言

1.最近突然就想玩玩AI,资料也不多,干脆就找了简单的百度免费AI玩玩
2.百度文档看的头疼,眼花,还是不如直接上手干
3其实所有接口用法差不多,除了人脸识别需要但的sdk
4.最终发现 最后使用的时候 用了不少 Promise


2. 准备工作

1.注册百度AI账号 ,按步骤操作
2.创建应用
3.access_token 获取 主要熟练 api用法


3. 大概的界面

1. 1.png

2.当然不会上传我的银行卡了哈哈


4. 布局代码

<view>
  <button type="primary" bindtap="showCamera">拍照识别</button>
  <button type="primary" bindtap="openLocalImage">图片识别</button>


  <!-- 相机标签 -->
  <camera wx:if="{{showCamera}}" device-position="{{pos}}">
    <cover-view hover-class="opa" bindtap="getPhoto"></cover-view>
    <cover-image bindtap="changePos" src="/public/changeCamera.png"></cover-image>
  </camera>
  <image src="{{imgUrl}}" mode="widthFix" bindlongpress="savePhoto"></image>
  <view class="hint" wx:if="{{imgUrl}}">长按保存图片</view>
</view>

5. 打开本地相册

  // 打开本地相册
  async openLocalImage() {
    console.log("打开相册")
    let res = await wx.chooseImage({
      count: 1,
      sourceType: ['album'],
    })
    this.setData({
      imgUrl: res.tempFilePaths[0]
    })
    let res2 = await this.base64toUrlencode(res.tempFilePaths[0])
    let res3 = await this.recognition(res2)
    console.log('------识别------res3', res3)
  },

6. 百度AI 接口参数 要求

1. 1.png

7. 图片转为base64再进行urlencode编码

  base64toUrlencode(imgPath) {
    return new Promise((resolve, reject) => {
      wx.getFileSystemManager().readFile({
        filePath: imgPath,
        encoding: 'base64',
        success: (res2) => {
          resolve(decodeURI(res2.data))
        },
        fail(error) {
          reject(error)
        }
      })
    })
  },

8. 调用识别接口

  recognition(imgPath) {
    return new Promise((resolve, reject) => {
      wx.request({
        url: 'https://aip.baidubce.com/rest/2.0/ocr/v1/bankcard?access_token=' + this.data.access_token,
        method: 'POST',
        header: {
          'Content-Type': 'application/x-www-form-urlencoded'
        },
        data: {
          image: imgPath
        },
        success(res) {
          wx.showToast({
            title: '识别成功',
          })
          resolve(res)
        },
        fail(error) {
          wx.showToast({
            icon: 'error',
            title: '识别失败',
          })
          reject(error)
        },
      })
    })

  },

1.现在这个只是简写 大概的逻辑,具体的接口返回参数

2. 1.png

9. 当然这个access_token 我在 onLoad的时候获取了

1.client_id
2.client_secret
3.这2个都需要创建应用的时候 生成

  getToken() {
    wx.request({
      url: 'https://aip.baidubce.com/oauth/2.0/token',
      data: {
                 grant_type: 'client_credentials',
                 client_id: 'xxxxxxxxxxxxxxxxxxxxx',//用你创建的应用的API Key
                 client_secret: 'xxxxxxxxxxxxxxxxxxxxx'//用你创建的应用的Secret Key
               },
       header: {
                 'Content-Type': 'application/json' // 默认值
               },
      success: (res) => {
        console.log('res-----------', res)
        this.setData({
          access_token: res.data.access_token
        })
      },
      fail(error) {
        console.log('失败', error)
      }
    })
  },

10.打开相机

  // 显示相机的函数 (默认在wxml中添加camera组件, 通过变量控制它的显示和隐藏)
  showCamera() {
    console.log("显示相机")
    this.setData({
      showCamera: true
    })
  },

11. 点击拍照

  // 点击拍照的函数
  async getPhoto() {
    //创建 camera 上下文 CameraContext 对象。
    let context = wx.createCameraContext(this)
    // 拍摄照片
    try {
      let res = await context.takePhoto({
        quality: "low",
      })
      // res.tempImagePath 字段是照片的本地缓存路径
      this.setData({
        showCamera: false, // 隐藏相机
        imgUrl: res.tempImagePath
      })
      this.base64toUrlencode(res.tempImagePath)
      let res2 = await this.base64toUrlencode(res.tempImagePath)
      let res3 = await this.recognition(res2)
      console.log('------识别------res3', res3)
    } catch (error) {
      console.log("内存不足,拍照失败", err)

    }
  },

12. 长按保存

  savePhoto() {
    if (!this.data.imgUrl) return;
    // 把图片保存到系统相册
    wx.saveImageToPhotosAlbum({
      filePath: this.data.imgUrl,
      success() {
        wx.showToast({
          title: '图片已保存',
        })
      }
    })
  },


13.切换摄像头

  changePos() {
    this.setData({
      pos: this.data.pos == "back" ? "front" : "back"
    })
  },

参考资料

文字识别API


初心

我所有的文章都只是基于入门,初步的了解;是自己的知识体系梳理;如有错误,欢迎交流;
如果能帮助到有缘人,非常的荣幸,一切为了部落的崛起;
共勉

相关文章

网友评论

      本文标题:小程序实现百度AI 银行卡识别功能

      本文链接:https://www.haomeiwen.com/subject/evbsfrtx.html