首页 > 解决方案 > 如何使用 AR.js 改进移动浏览器上的标记检测

问题描述

在开发过程中,我正在使用笔记本电脑的网络摄像头测试标记检测和渲染,结果令人满意,但在使用我的 Android 平板电脑时检测效果不是很好。

我发现一个区别是我的网络摄像头具有更高的分辨率(1280x720),而平板电脑的后置摄像头根据该网站仅提供 640x480 视频数据:https ://webrtchacks.github.io/WebRTC-Camera-Resolution/

请注意,sourceWidth, sourceHeight, displayWidth,的属性displayHeight参数似乎没有任何效果,无论我设置它们的高低,我的笔记本电脑总是打印a-scenearjs

Allocated videoFrameSize 1228800

我的平板电脑总是打印

*** Camera Parameter resized from 640, 480. ***  
Allocated videoFrameSize 307200

由于我了解该限制,我拍摄了移动标记的视频并使用sourceType: video而不是sourceType: webcam. 然而,即便如此,平板电脑上的标记检测质量也比笔记本电脑上的差。(视频分辨率是否也像相机一样受到浏览器的限制?)

我在平板电脑上看到三个主要问题:

  1. 如果尺寸很小,则根本不会检测到标记。
  2. 标记检测不稳定,因此标记闪烁开/关或单帧方向改变等。
  3. fps 较低,标记检测需要更长的时间,并且一旦检测到标记并绘制了相应的实体,视频流就已经有了很大的进步。

AR.js 中是否有一些参数可以提高识别结果?我正在考虑诸如“降低置信度阈值”之类的东西来检测更小的标记,“在显示之前识别 N 个后续帧”以提高稳定性,“降低帧率”以减少负载,或类似的东西。

在类似的说明中,实际上不需要一些相机校准来从图像数据中计算出准确的标记方向。

标签: javascriptandroidcomputer-visionartoolkitar.js

解决方案


也在这方面工作。如果不完美,这些参数还不错(我正在使用标记系统进行测试,边框为 0.75,以显示视频):

<a-scene embedded arjs='sourceType: webcam; patternRatio: 0.75 trackingMethod: best maxDetectionRate: 60 detectionMode: mono' renderer='antialias: true; alpha: true; precision: medium;' vr-mode-ui="enabled: false" stats>

后来

<a-marker vidhandler preset="custom" type='pattern' url='...' smoothCount=0 smoothTolerance=0.0001 >

它绝对比默认结果好,但我的手机 (S9) 仍然是 60 fps,我找不到在哪里推送参数以更好地跟踪。

我从中挖掘信息的链接很少:

https://jeromeetienne.github.io/AR.js/aframe/

https://gitlab.giondesign.com.au/ar-and-vr/ar-js/tree/dev/aframe

https://books.google.nl/books?id=JpLnDwAAQBAJ&pg=PA54&lpg=PA54&dq=ar.js+maxDetectionRate&source=bl&ots=9zs_0le60q&sig=ACfU3U014Kfw8Pt64OKa34Y0jzPCHppxFg&hl=en&sa=X&ved=2ahUKEwiF1JDmqpbqAhXN_aQKHYAmDTQQ6AEwAnoECBQQAQ#v=onepage&q=ar.js%20maxDetectionRate&f=false


推荐阅读