javascript - 如何使用 AR.js 改进移动浏览器上的标记检测
问题描述
在开发过程中,我正在使用笔记本电脑的网络摄像头测试标记检测和渲染,结果令人满意,但在使用我的 Android 平板电脑时检测效果不是很好。
我发现一个区别是我的网络摄像头具有更高的分辨率(1280x720),而平板电脑的后置摄像头根据该网站仅提供 640x480 视频数据:https ://webrtchacks.github.io/WebRTC-Camera-Resolution/
请注意,sourceWidth
, sourceHeight
, displayWidth
,的属性displayHeight
参数似乎没有任何效果,无论我设置它们的高低,我的笔记本电脑总是打印a-scene
arjs
Allocated videoFrameSize 1228800
我的平板电脑总是打印
*** Camera Parameter resized from 640, 480. ***
Allocated videoFrameSize 307200
由于我了解该限制,我拍摄了移动标记的视频并使用sourceType: video
而不是sourceType: webcam
. 然而,即便如此,平板电脑上的标记检测质量也比笔记本电脑上的差。(视频分辨率是否也像相机一样受到浏览器的限制?)
我在平板电脑上看到三个主要问题:
- 如果尺寸很小,则根本不会检测到标记。
- 标记检测不稳定,因此标记闪烁开/关或单帧方向改变等。
- fps 较低,标记检测需要更长的时间,并且一旦检测到标记并绘制了相应的实体,视频流就已经有了很大的进步。
AR.js 中是否有一些参数可以提高识别结果?我正在考虑诸如“降低置信度阈值”之类的东西来检测更小的标记,“在显示之前识别 N 个后续帧”以提高稳定性,“降低帧率”以减少负载,或类似的东西。
在类似的说明中,实际上不需要一些相机校准来从图像数据中计算出准确的标记方向。
解决方案
也在这方面工作。如果不完美,这些参数还不错(我正在使用标记系统进行测试,边框为 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
推荐阅读
- asp.net-core - asp.net core 2.2 brotli 压缩在 IIS 上不起作用?
- codeigniter - Codeigniter:当前未加载数据库驱动程序
- php - symfony 4 通过服务器在 dev 中运行时显示 500 错误“某事已损坏”:运行
- c++ - 如何获得对变体值的引用?
- postgresql - Postgres:删除外键约束查询卡住
- jquery - 在 ASP.NET 中使用 JQuery 删除 INPUT TAG 中的垂直对齐
- python - Python 未在 Windows 7 上安装 - 安装程序甚至不会出现
- python - 如何在列表中查找重复项?
- javascript - JavaScript 中的 POST 数据未发送
- macros - Spacemacs 中的宏在哪里保存?