微信小程序实现Web AR,相关功能及项目准备步骤

2025-04-04
来源:网络整理

1。项目背景

2019年7月5日,微信开放式官方帐户宣布了微信小程序实现Web AR的基本API,该APL可以实时从相机中获取每个图像。但是,微信小程序不提供图像识别和面部检测功能。 .JS是一个轻巧的计算机视觉库,可以实现颜色跟踪,面部检测和其他功能。它是计算机视觉算法库,类似于图像算法。

该演示项目的源代码上面,请参阅文章末尾的地址。

2。准备步骤

使用微信开发人员工具导入源代码,单击工具栏上的“预览”按钮,然后扫描微信帐户以启动微信系列。如果“预览”按钮是可以灰色的,则需要为项目填写测试ID。

微信小程序将请求使用相机的权限并选择“允许”。如果选择“拒绝”并在小程序右上角的“设置”按钮中再次打开。

因为这是一个新的Mini API,所以的iOS版本需要7.0.4版,而的版本需要版本7.0.5。目前,大多数人还没有安装新版本的微信,因此他们可以选择在“采用”模式而不是“ A”模式下体验它。因为“采用”模式不使用新的API,因此在任何版本的微信中都可以使用。

3。如何使用

使用演示小程序,只需扫描此图片即可。您还可以用红色,黄色和蓝色扫描周围的东西。

成功扫描后的效果如下:

屏幕截图的“接收”模式

操作方法:单击“拿”按钮拍照,然后单击“再次拍照”。

“ A”模式的屏幕截图

操作方法:该页面将自动检测到相机屏幕中是否有紫色,黄色和蓝色,并且没有手动操作。

4。图像颜色跟踪的目的

尽管不可能根据颜色确定它是什么对象,但它可以将其与已知颜色的一堆对象区分开来。颜色分析比图像技术(例如大纲分析)快得多,但准确性较低。适用于准确性不高的场合。

5。面部检测

使用演示小程序进行扫描或图片。

成功识别后,将显示一个盒子,将显示31个特征点,例如眉毛,眼睛,鼻子,嘴和脸部轮廓。

单击“”按钮以切换和前置摄像头。

更新2019.8.1:实现透视转换的面孔。

透视化转化的脸部:当面部特征点不准确时,2D贴纸的位置不准确。

调整面部识别参数后,特征点变得靠近面部,并且2D贴纸的位置变得准确。

6。图像识别

图像识别分为两个部分,一个是公认的图像,另一个是通过实时拍摄照片或相机获得的图像。

有必要计算照片或相机图像中确定图片的位置,大小,旋转和其他转换。

确定的图片如下:

扫描旋转图像

预期结果如下:

小程序开发图像识别_图像识别应用开发_图像识别开发板

半透明的黑色面膜层覆盖了已识别的图像。

扫描斜线图像

预期结果如下:

扫描锅和变焦图像

预期结果如下:

功能局限性:当前,它支持2D转换,例如图像的翻译,旋转,斜角和缩放。

更新的2019.8.1:实现了识别图片的透视转换。

扫描透视图转换的图片

预期结果如下:

7。对象跟踪(不建议)

在脸部,眼睛,嘴巴等上显示一个盒子。此功能的速度比面部识别速度慢,并且准确性差。这是.js的一个示例。

8。技术问题和解决方案

8.1覆盖本机组件和覆盖层以显示相机视频并显示信息。第一次打开小程序时,下面的组件将阻止上面的组件。

处理方法:分别为组件和组件设置CSS的Z-。

8.2实时获取相机图像。方法。该方法的数据值是类型。如何将其转换为图像的数据类型?

处理方法:图像对象= new(.data);

8.3端口计算机视觉库需要进行哪些修改?

处理方法:微信小程序中不存在浏览器对象的总和,需要更换。 .js库无法访问小程序中的相机,因此需要将的摄像头数据发送到.js库。

8.4实时获取相机图像。对象的stop()方法无法停止收听相机,即使您退出小程序页面也是没有用的。

重现步骤:启用侦听相机后,您可以在调试日志中看到.log记录的连续输出。然后,通知了调用的stop()方法以停止,并且调试日志仍在输出.log记录。最后,单击左上角返回到退出页面,新页面上的小程序调试登录仍在输出.log记录。

const

处理方法:调用。的回调函数中的.js库,然后将其更改为使用计时器调用.js库。

const

8.5除了用计时器执行循环外,还有其他循环执行方法吗?

通常使用电子方法。它以前没有在迷你节目中提供,而仅在迷你游戏中提供。

现在,MINI程序添加了支持,并且也添加了.E方法。

9。图像识别的优化方法

9.1准备计时器

图像识别开发板_小程序开发图像识别_图像识别应用开发

将计时器放置在方法调用之前和之后的位置,并记录在方法上所花费的时间。某些优化方法可能没有预期效应,可以通过计时器观察。

9.2提高识别速度

1。通常,预处理图像,例如灰度,模糊,边缘检测等。我测试了.blur(),。(),。()和.js随附的其他方法,但结果并不理想。预处理后,总体识别时间也会增加。

测试结果:没有预处理时耗时。灰度之后,这需要时间。模糊之后,这需要时间。

2。通过减小图像的大小,效果显而易见。

测试结果:

图像宽度为375像素,耗时;

图像宽度为180像素,耗时;

图像宽度为90像素,耗时;

图像宽度为50像素,需要50ms。

3。图像大小的压缩方法,用于微信小组拍照

将图像绘制到画布上,然后使用画布调节图像大小。

ctx

4。压缩微信迷你程序的图像大小以实时获取相机的方法

2019.8.6更新:因为经常打电话给WX。将导致微信的版本崩溃,“ A”模式不再使用此压缩方法。

获得的相机图像是一种类型,而不是文件路径,而CTX。画布的方法不能绘制。

非官方的想法:首先使用WX将图像类型绘制到画布上。方法,然后使用WX生成临时文件。方法,然后使用CTX绘制临时文件。画布的方法。其余的与图像时的图像压缩方法相同。

wx

注意:此方法将反复创建临时文件,如果还有其他图像压缩方法,那就更好了。

9.3提高识别精度

1。标识的图像应与原始图像成正比。例如,原始图像的纵横比为4:3。为了在程序上显示出良好的外观,将图像拉伸到4:3.5的纵横比,无法正确识别拉伸图像。

2。固定图像大小时,.js库中面部检测和颜色检测的值越大,检测速度越快,但识别精度越低。两个值越小,检测速度慢,但识别精度越高。

3。当图像大小变化多次时,应根据图像大小分别调整.js库中的面部检测值和颜色检测值。例如,图像尺寸将从375像素宽,高458像素到宽50像素,高61像素。目前,脸几乎无法检测到,但是设置的值和值足够小以检测到面部。

9.4根据场景选择优化计划

当提高识别精度时,识别速度将降低;当识别速度提高时,识别精度将降低。在用户单击按钮拍摄照片的场景中,可以将识别精度设置为更高的级别。在实时从相机中获取图像的场景中,可以将识别精度设置为较低,以换取更快的识别速度。

9.5微信无法优化

微信系的主机环境分为两层:逻辑层在发动机上运行,​​并且渲染层在其上运行。迷你程序的计算速度比移动网页的计算速度要快一些。但是,当使用视觉计算时,计算时间将很长。

例如,在PC浏览器上计算图像转换需要300毫秒,并且在移动浏览器上计算此图像转换需要3秒钟。从视觉上讲,PC浏览器的速度比移动浏览器快10倍。在微信小程序中,您不能使用WASM加速度,也不能直接使用硬件加速度。此外,迷你程序的尺寸限制为2MB。

提示:表明面部检测所需的面部训练模型(.JS)的原始大小为4MB,并且包含4层模型。为了满足微信小程序的尺寸限制,将其更改为第1层模型。

10。开源代码地址/ -

分享