WX Miniprogram XR System

微信小程序AR系统试用

基础调试库 version: 2.30.3

AR系统

Q1:暂时仅支持开启一种识别模式

1
2
3
4
5
6
7
8
<xr-scene ar-system="modes:Body;camera:Back"></xr-scene>

// 更新html标签
this.scene.setAttribute("ar-system","modes:Plane;camera:Front");
// 设置对象属性
var arr = ["Plane"];
this.scene.ar.setDataOne("modes",arr);
this.scene.ar.setDataOne("camera","Front");

经测试 不论是更新html标签还是直接设置对象属性,仅仅修改了参数值,但具体运行还是使用系统初始化时的值,因此判断运行过程中无法更改识别模式

Q2:运行过程中无法切换前后置摄像头

同上,因此想要切摄像头或识别模式只能通过切场景实现

Plane模式

Q1:性能问题

判断平面过程中会有闪退情况

Q2:3DoF模式初始化问题

模型偏移
模型的位置取决于场景初始化时相机的位置和旋转,可能会导致模型偏移预期的放置位置

Marker模式

Q1:虽然支持多个AR Tracker,但同时只能识别一张图

同一场景仅识别一张图像

OSD Marker模式

Q1:运行过程中切换识别对象?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<xr-ar-tracker mode="OSD" src="{{markerImg}}">
<xr-mesh geometry="plane" rotation="-90 0 0" scale="1 1 1" uniforms="u_baseColorFactor:0 1 0 0.5" states="alphaMode:BLEND" />
</xr-ar-tracker>

handleChangeMarkerImg: function() {
wx.chooseMedia({
count: 1,
sizeType: ['compressed'],
mediaType: ['image'],
sourceType: ['album'],
success: res => {
const fp = res.tempFiles[0].tempFilePath;
this.setData({markerImg: fp});
},
fail: err => {
console.error('[xr-demo]chooseImage failed', err);
}
});
}

可行,示例如上

Q2:识别精度较低

识别精度较低

右图为上传的识别图,但左边也能被识别标记

Q3:仅影响子节点位置和缩放,不影响旋转(2D Marker模式影响旋转)

人体识别模式

Q1:子节点的旋转需要手动实现

子节点旋转
实际上只是识别了一些特征点,影响AR Tracker下的子节点的位置和缩放,但旋转比较玄学(Face模式下似乎受到一些影响,但仅是在XY两个轴上,Hand,Body模式下则完全不会影响旋转)

Q2:识别精度

  • 人脸识别需要(基本)整张脸在镜头内,例如戴口罩会无法识别
  • 躯体识别只要躯体的一部分就可以识别,但其他不在镜头内的部分的特征点会根据身体比例确定位置但准确率较低
  • 人手识别手不完整时置信度无法稳定,影响识别,所以还是需要整个手在镜头内

WX Miniprogram XR System
https://baifabaiquan.cn/2023/03/27/MiniProgramAR/
作者
白发败犬
发布于
2023年3月27日
许可协议