EasyAR+微信小程序识别图片开发记录

EasyAR+微信小程序识别图片开发记录

  1. 所需数据
  2. 业务关系
  3. 示例代码
  4. 总结

所需数据

//小程序>appid
AppId:*****
//EasyAR>
ApiKey:****
APISecret:*****
Token:*****
//微信小程序相关的业务操作-创建云识别管理-寻找云图库-密钥-小程序AR使用
CloudKey:*****
CloudURLs:*****
小程序ARToken:******
// 1.可用官方提供Token使用开发可设置Token有效天数(官方提供-ApiKey位置);
// 2.可使用自建服务器解析Sign签名,向服务器申请有效Token(动态生成)

业务关系
官方文档示例:Esayar官方微信小程序使用操作指示

  1. 动态签名加密方法:
//NodeJs服务器解析方法
var crypto = require('crypto');

function genSign(params,appSecret) {
    var paramsStr = Object.keys(params).sort().map(function(key) {
        return key+params[key];
    }).join('') + appSecret;
	console.log("排序后数据",paramsStr);
    return crypto.createHash('sha256').update(paramsStr).digest('hex');
}

let signParams = function(params, timestamp, apiKey, apiSecret) {
    params.timestamp = new Date().getTime();
    params.apiKey = encodeURI(apiKey);
	params.expires=3600;	
    params.signature = genSign(params, apiSecret);
    return params;
};
//调用signParams()插入相关数据的ApiKey+ApiSecret[注意!非小程序ar的key以及密钥]
//将获取到的数据传入Token查询接口即可获取所需Token数据
//微信小程序获取使用:https://uac-na1.easyar.com/Token/v2【官方默认的请求接口/不携带V2获取数据有所不同,结构不同吗,不过均可获取Token的效果值】
//官方示例地址:https://help.easyar.cn/EasyAR%20APIKey/api/get-token.html
//中国1区: https://uac.easyar.com
//北美1区: https://uac-na1.easyar.com

Token[动态获取-官方提供]
小程序端使用示例
操作描述:

  1. 打开相机权限
  2. 截取某帧生成Canvas绘制图片
  3. 转换Base64格式图片,向Search服务发起请求
  4. 请求地址:https://cn1-crs.easyar.com:8443/search/
  5. 获取反馈的数据,target与图库表的某个图片ID对应,判断是否识别成功,然后做相关操作业务

微信小程序端示例代码

示例代码为官方提供Git地址代码截取
//js区域
// pages/recognition/recognition.js
import upng from '../../UPNG.js'
Page({
  data: {
    height: '360',
    width: '20',
    status:false,
    scanStatus: 'none',
    msg: "请点击识别图片",
    src: '',
    imgurl:"",
    listener: null,
    isReuqest: false,
    canvasWidth: '10',
    canvasHeight:'10',
  },

  onLoad: function (options) {
    this.ctx = wx.createCameraContext();

    wx.getSystemInfo({
      success: res => {
        this.setData({ height: res.windowHeight * 0.8, width: res.windowWidth});
      }
    });
  },

  stopScan: function () {
    this.setData({ scanStatus: 'none' });
  },

  onShow: function () {
    this.setData({ msg: '请点击识别图片' });
  },

  error: function (e) {
    this.setData({ msg: '打开摄像头失败,请点击“立即体验' });
  },


  searchPhoto: function(imageBase64) {
    let that = this;
    wx.showLoading({
      title: '识别中...',
    })
    wx.request({
      url: 'https://cn1-crs.easyar.com:8443/search/', 
      data: {
        image: imageBase64,
        notracking: "true",//下方Token为小程序ARtoken的时候,不需要此字段
        appId: "ApiKey",//同notracking后注释一样
      },
      header: {
        'Authorization':'Token',//可填数据ApiToken or 小程序ARtoken
        'content-type': 'application/json' // 默认值
      },
      method: 'POST',
      success(res) {
        console.log(res);
        that.setData({isReuqest: false});
        if (res.data.statusCode == 0) {
          that.listener.stop();
          that.setData({ msg: '识别成功'});
          wx.hideLoading()
        }else{
          wx.hideLoading();
          if(res.data.statusCode=="21"){
            that.status = false;
            that.setData({ msg:res.data.result.message, isReuqest:true});
            wx.showToast({
              title:res.data.result.message,
              icon:"none"
            })
          }
        }
      },
      fail(err) {
        console.log(err)
        that.status = false;
        that.setData({ msg: '识别失败,请点击重试', isReuqest: false});
      }
    })
  },

  transformArrayBufferToBase64: function (frame) {
    console.log(frame,"参数")
    const data = new Uint8ClampedArray(frame.data);
    this.setData({isReuqest: true});
    let pngData = upng.encode([frame.data], frame.width, frame.height, 16, 0);
    let base64 = wx.arrayBufferToBase64(pngData);
    console.log(base64);
    this.setData({imgurl:base64});
    this.searchPhoto(base64)
  },

  takePhoto: function (e) {
    console.log(`点击开启`);
    if (this.status) return;
    this.status = true;
    const context = wx.createCameraContext()
    this.listener = context.onCameraFrame((frame) => {
      if(!this.data.isReuqest) {
        this.transformArrayBufferToBase64(frame);
      }
    });
    this.listener.start({
      success: () => {
        console.log('监听成功')
      },
      fail: (err) => {
        console.log('监听失败')
        console.log(err)
      }
    })
  }
})

页面代码

<camera device-position="back"  frame-size="small"  flash="off" binderror="error" style="width: 100%; height: {{height}}px"></camera>
<view class='recognition-container'>
  <view class="btn-area">
      <button type="primary" bindtap="takePhoto">{{msg}}</button>
  </view>
  <canvas style="width: {{width}}px; height: {{height}}px; opacity: 0" canvas-id="firstCanvas"></canvas>
</view>
<textarea name="" id="" cols="30" rows="10">
{{imgurl}}
</textarea>
<image src="{{imgurl}}"></image>
//样式
/* pages/recognition/recognition.wxss */
.recognition-container{
  position: relative;
  top: 0;
  right: 0;
  bottom: 0;
  left: 0;
}

.btn-area{
  position: relative;
  right: 20px;
  left: 20px;
  bottom: 10vh;
  z-index: 1000;
}

官方提供示例Demo
示例1:https://github.com/z-92/EasyAR-miniprogram-WebAR-Demo.git
示例2:https://github.com/zi-kang/EasyAR-miniprogram-WebAR-Demo.git
博主使用代码为示例2描述的TokenType
业务完结
如有不理解的地方,可用留言,Mark!

  • 3
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 33
    评论
### 回答1: Spring Boot 是一个用于构建独立的、可扩展的、基于Java的应用程序的框架。微信小程序是一种基于微信平台的轻量级应用程序。通过结合Spring Boot 和微信小程序开发实战,可以创建出功能丰富、灵活可扩展的小程序。 首先,可以使用Spring Boot 提供的便利性和高效性来创建一个后端服务。通过Spring Boot 的自动配置和快速开发特性,可以快速搭建一个高度可扩展的后端服务,支持实现用户登录验证、数据存储和访问等功能。 其次,可以利用微信小程序提供的各种API和功能来实现与用户的交互。可以使用微信小程序的界面组件和模板来构建用户界面,支持用户与小程序进行交互。同时,通过调用微信提供的API,可以实现用户登录、用户位置获取、支付等功能。 此外,通过Spring Boot 和微信小程序的结合,可以实现数据的实时同步和共享。可以通过后端服务将数据存储到数据库中,并通过微信小程序将数据展示给用户。同时,通过微信小程序提供的数据上报和反馈功能,可以将用户的操作数据实时传输到后端服务,并进行相应的处理。 最后,利用Spring Boot 和微信小程序开发实战,可以进行持续的迭代和优化。通过使用Spring Boot 提供的测试框架和集成开发环境,可以快速进行开发和测试。同时,通过微信小程序提供的发布和更新功能,可以实现小程序的持续改进和功能优化。 综上所述,通过Spring Boot 和微信小程序开发实战,可以创建出高效、灵活、功能强大的小程序,为用户提供良好的使用体验。同时,可以借助Spring Boot 和微信小程序提供的开发工具和功能,实现快速开发、持续迭代和优化的开发流程。 ### 回答2: Spring Boot是一种用于构建Java应用程序的开源框架。微信小程序是一种可以在微信中运行的小型应用程序。结合Spring Boot和微信小程序可以进行微信小程序开发实战。 在使用Spring Boot开发微信小程序时,我们可以使用Spring Boot的各种特性和功能来加快开发速度和简化开发过程。首先,我们可以使用Spring Boot的自动配置功能来快速配置和集成微信小程序的相关组件和功能。例如,我们可以使用Spring Boot的自动配置来集成微信小程序的授权登录和用户信息获取功能,这样我们就可以快速实现用户登录和权限控制。 其次,Spring Boot有良好的开发文档和社区支持,我们可以通过查阅文档和参与社区讨论来解决开发过程中的问题和困惑。同时,Spring Boot也有丰富的第三方库和插件,我们可以借助这些工具来实现更复杂的功能和性能优化。 此外,Spring Boot还提供了方便的测试工具和环境,我们可以通过单元测试和集成测试来确保微信小程序的稳定性和质量。通过使用Spring Boot的测试工具,我们可以快速编写和运行各种类型的测试,例如接口测试、性能测试和压力测试等。 最后,Spring Boot具有良好的扩展性和可维护性,我们可以使用Spring Boot的模块化和组件化特性来管理和维护微信小程序的代码和资源。同时,Spring Boot也支持容器化部署,我们可以使用Docker等工具将微信小程序打包为容器镜像,并通过云平台实现自动化的部署和运维。 综上所述,使用Spring Boot进行微信小程序开发实战可以提高开发效率、简化开发过程、保证应用质量,并且具备良好的扩展性和可维护性。这些优点使得Spring Boot成为一种非常适合用于微信小程序开发的框架。 ### 回答3: Spring Boot 是一个开源的Java开发框架,它简化了Java应用程序的配置和部署过程。微信小程序是一种用于开发在微信平台上运行的小程序的框架。在开发微信小程序时,使用Spring Boot可以提供更高效、更简洁的开发方式。 首先,Spring Boot提供了丰富的功能和插件,可以帮助开发者快速搭建微信小程序的后端服务。通过使用Spring Boot的自动配置功能,可以省去繁琐的配置过程,并且可以轻松地集成其他常用的框架和组件,如数据库访问、缓存、消息队列等。 其次,Spring Boot提供了灵活的开发方式,可以根据具体需求选择使用Java、Kotlin或者Groovy等不同的开发语言。开发者可以根据自己的技术栈和喜好进行选择,提高开发效率。 另外,Spring Boot还提供了丰富的文档和社区支持,开发者可以轻松地学习和解决问题。通过参与Spring Boot社区,可以与其他开发者进行交流和分享经验,使开发过程更加顺利。 总结来说,Spring Boot在微信小程序开发中可以提供快速搭建后端服务、灵活的开发方式和丰富的文档和社区支持等优势。使用Spring Boot开发微信小程序,可以提高开发效率,减少不必要的工作量,让开发者能够更专注于业务逻辑的实现。
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲江涛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值