小程序 AI/AR 能力
一、关于 VisionKit
1、定义
2、版本
- V1平面接口,适用于用户在平面场景下,例如桌面,地面,泛平面场景,放置虚拟物体,不提供真实世界距离。用户放置物体时,手机相机倾斜向下对着目标平面点击即可,具有广泛的机型支持。
- V2平面接口,提供真实物理距离的 AR 定位功能,提供平面识别功能,用户在平面范围点击放置虚拟物体的功能,具有有限的支持机型。
3、能力
-
2D Marker,仅适用于平面类物体,用户上传一张平面物体的俯视图像作为目标物体,算法运行时识别该平面物品,并渲染出相关虚拟物体。2D Marker可以理解为特殊的3D Marker。3D Marker,相比于2D Marker,能够识别3D物体,不局限于平面物体,具有更广的使用范围,算法运行前,需要手动制作3D Marker的识别目标文件(.map文件),然后算法运行时载入该文件用于识别。
-
-
只使用一张待检测类别的图片,就能检测到输入图像中该类别的物体。适合标志性建筑、商品包装等具有平面图案的3D物体。不适用于检测人脸、动物、汽车等3D对象。允许识别图片与3D物体有视角差异或一定程度的外形差异。
-
-
提供了两种方式,静态图片检测和通过摄像头实时检测。可以输出人脸位置坐标、106个关键点坐标以及人脸在三维坐标系中的旋转角度。
-
二、使用 VisionKit
1、VKSession(VisionKit 会话对象)
- 创建 VKSession 的实例:
wx.createVKSession
- 创建 VKSession 的实例:
const session = wx.createVKSession({
track: {
plane: {mode: 3},
},
version: 'v2',
})
- 启动 VKSession 实例:
start方法
- 启动 VKSession 实例:
session.start(err => {
if (err) return console.error('VK error: ', err)
// do something
})
2、渲染
getVKFrame 方法可以获取到帧对象,帧对象包含了需要上屏的画面,然后将其用 WebGL 渲染出来。3、WebGL & three.js
4、放置 3D 模型
- 将 2D 坐标转成 3D 世界坐标,即 (x, y) 转成 (x, y, z),原点是相机打开瞬间其所在的点
- 参数:相对于画布视窗的坐标,取值范围为 [0, 1],0 为左/上边缘,1 为右/下边缘
- 返回:一个矩阵,包含 3D 世界坐标的位置、旋转和放缩信息
camera 属性拿到了帧相机,把帧相机拿到的视图矩阵、投影矩阵,都传给 three.js 的相机对象,以确保 three.js 的相机位置、角度正确。5、平面检测
三、官方demo解析
1、代码结构
2、实现逻辑
behaviors实现代码共享,其中 yuvBehavior.js 主要包含 webGL 相关方法。主要代码逻辑如下(以水平面 AR 为例):
四、相关链接
小程序 AI/AR 能力的更多相关文章
- 当微信小程序遇到AR(一)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 当微信小程序遇到AR(四)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 当微信小程序遇到AR(三)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 当微信小程序遇到AR(二)
当微信小程序遇到AR,会擦出怎么样的火花?期待与激动...... 通过该教程,可以从基础开始打造一个微信小程序的AR框架,所有代码开源,提供大家学习. 本课程需要一定的基础:微信开发者工具,JavaS ...
- 微信小程序 LBS 能力全面解析
分享之前我们先来看看地图能力在小程序架构体现中所处的位置. 小程序架构图解 如图标黄处为地图能力所处的一个位置,举个例子,比如调用定位能力获取用户当前位置的一个流程: 首先调用 JS API wx.g ...
- 小程序webview涉及的支付能力、选用绑定多商户支付
小程序webview涉及的支付能力.选用绑定多商户支付 webview承接页面涉及的支付能力: 仅支持小程序本身支付能力,不支持承接页面内的原支付功能(譬如,webview中嵌入了h5官方商城,经过配 ...
- 实时视频直播客户端技术盘点:Native、HTML5、WebRTC、微信小程序
1.前言 2017 年 12 月,微信小程序向开发者开放了实时音视频能力,给业内带来广阔的想象空间.连麦互动视频直播技术在 2016 年直播风口中成为视频直播的标配,然而只有在原生的 APP 上才能保 ...
- 【名额有限】云开发AI拓展能力等你来体验!
这次来了个超厉害的新能力! 人脸智能打马赛克.人脸智能裁剪--各种操作,都能一步到位! 迫不及待想体验,戳链接:https://wj.qq.com/s2/3986990/e0ef/ 还没有搞懂,继续往 ...
- 基于git的博客(含站点与小程序)
1 效果 静态站点: blog.makergyt.com 备用链接: github.blog.makergyt.com 小程序: 语雀:<MakerGYT blog> 2 需求分析 2.1 ...
随机推荐
- 多校联训 DP 专题
[UR #20]跳蚤电话 将加边变为加点,方案数为 \((n-1)!\) 除以一个数,\(dp\) 每种方案要除的数之和即可. 点击查看代码 #include<bits/stdc++.h> ...
- 【python】M3U8下载器脚本
[python]M3U8下载器脚本 脚本目标: 1. 输入M3U8文件的链接,得到视频 2.使用异步操作,这样可以快很多,不加锁,因为懒得写,而且影响不大 已知条件: 1.m3u8文件其实就是一个记录 ...
- Fleet 使用感受
1. 前言 笔者主要使用的编程语言是 Java.平时使用的 IDE 是 JetBrains 公司的 IntelliJ IDEA.有时候也会打开该公司旗下的 PyCharm.DataGrip.WebSt ...
- 整数分解和for循环
整数的分解: 一个整数是由多位数字组成的,那么如何能分解出整数的各个位上的数字呢 对一个整数做%10的操作,就可以得到它的个位数 对一个整数做/10的操作,就去掉了他的个位数 然后再对2的结果做%10 ...
- 别再用 System.currentTimeMillis 统计耗时了,太 Low,试试 Spring Boot 源码在用的 StopWatch吧,够优雅!
大家好,我是二哥呀! 昨天,一位球友问我能不能给他解释一下 @SpringBootApplication 注解是什么意思,还有 Spring Boot 的运行原理,于是我就带着他扒拉了一下这个注解的源 ...
- 获取某个html元素相对于视窗的位置集合
getBoundingClientRect() getBoundingClientRect()获取元素位置,这个方法没有参数 getBoundingClientRect()用于获得页面中某个元素的左, ...
- css基础05
无关浏览器,只想对于原来的位置.而且下面的盒子也不会升上去. 没有父亲的时候就是以浏览器为标准的. 父亲没定位,爷爷有定位,就按照爷爷的,不管父亲了. 绝对定位飘起来比浮动还要高.飘起来了它的位置就会 ...
- 编译式安装PHP
yum install -y curl curl-devel libxslt-devel* --prefix是编译安装后的目录 --enable-fpm是为了支持nginx /configure ...
- 【面试题】JSON.stringify()妙用,你真的知道吗?
JSON.stringify()妙用 点击打开视频讲解更加详细 语法:JSON.stringify(value, replacer , space) value:将要序列化成 一个JSON 字符串的值 ...
- 推荐软件(一):Motrix——磁力下载器
个人觉得迅雷这样的下载器广告又多,启动速度又慢,又占用内存和存储,非常地不好用.有时候下载速度也不是你自己网速的最大值,而且有一些资源也会因为版权问题阻止你下载. Motrix 界面非常简洁:下载速度 ...