如何在 Android 增强现实中检测物理对象?
Posted
技术标签:
【中文标题】如何在 Android 增强现实中检测物理对象?【英文标题】:How to Detect Physical object in Android Augmented Reality? 【发布时间】:2012-02-08 12:07:50 【问题描述】:我发现了许多检测不同形状的方法。但是当我想要一个物理对象时运气不好。从我读到的内容,我们应该在图像周围有一个黑色边框来制作一个图案文件。如果我遵循这个概念并生成一个模式,那么我的应用程序会检测到打印输出的图像。但在现实世界中,物理对象周围不一定有黑色边框。
更新
虽然我接受了答案,但我的问题仍未解决。由于仍然没有检测物理对象的解决方案。
欢迎任何进一步的研究和链接!
【问题讨论】:
您尝试使用哪些库,您能否详细说明一下您的用例:您是尝试检测和识别单个物理对象(如真正的茶壶),还是检测和区分多个物理对象?茶壶、玩具车和一罐可乐等物品。您是在桌面规模还是在户外工作?或者您是否尝试识别真实物体的图片,例如基准标记上的茶壶图片? 谢谢你的回应..我试图检测一个物体,比如茶壶或灯泡。我正在使用 AndAR 库。那么如何为物理对象制作模式文件。 嗨..Sameer!!终于在 3 年后,您是否有任何可行的解决方案来使用 Vuforia 或任何 SDK 跟踪任何真实对象(作为标记的真实汽车)? 【参考方案1】:坏消息是,您不能使用 AndAR 来检测物理对象。 AndAR 基于基准标记方法,其中标记由两个部分组成:实心边框和内部图案。该模式编码一个值,该值可用于寻址特定模型以在标记上呈现,并且边框使确定标记与设备的相对方向变得容易。显然这只是平面图像识别。
在 3D 对象上进行对象识别是一个更复杂的问题,我不知道有任何 android 库提供统包解决方案,但在移动设备上只识别一个对象可能是可行的。
一种可能性可能是研究可用的 Android AR 工具包(Layar、Junaio、Qualcomm AR SDK),它们现在都支持某些图像识别。可能是通过以各种旋转方式拍摄茶壶的图像并将这些图像用作您希望应用程序与之匹配的图像,您可能会得到此解决方案,但请记住,它们仅设计用于对图像进行平面匹配,而不是真实的 3D 对象,因此性能可能不是很好。 (嗯,Metaio Mobile SDK Pro 做了 3D 识别和跟踪,但是很贵)。
虽然通过将相机帧与您希望识别的对象的图像进行比较(或通过将相机帧中的图像特征与预先计算的图像特征等进行比较)来完成对象识别可能最好,但跟踪是另一回事。如果您想在 3D 空间中准确跟踪您的 3D 对象,您确实需要拥有或构建它的 3D 模型,并为每一帧确定相机图像和 3D 对象之间的点对应关系以进行跟踪。真正的无辅助(即没有深度摄像头)3D 跟踪很难。
我希望这能给你一些背景知识,你可以用来评估你的下一步。
更新: Qualcomm 的 Vuforia SDK 允许您跟踪“多目标”,即具有一组具有固定空间关系的平面跟踪表面的对象。如果你为你的物体(茶壶)的 6 个面制作了一个“立方体”不同的照片,这可能会有所帮助。 https://ar.qualcomm.at/qdevnet/developer_guide/Trackables
2013 年底更新:
我没有这方面的经验,但是:
Metaio 现在提供 CAD 模型的 3D 跟踪:https://dev.metaio.com/sdk/tutorials/3d-tracking-based-on-cad-data/
ARLab.com 的 LinkAR 承诺对象匹配。 http://www.arlab.com/objecttracking
我会注意到“匹配”一词的使用——我认为这里的用例是您知道要覆盖的对象(玩具盒和引擎等)。区分多个 3D 对象可能完全超出范围。
【讨论】:
谢谢..我很失望,除了开源性质,没有可用于物理对象检测的库。你能有使用相机框架比较两个图像的样本,这样我就可以去做.但我真的很欣赏你的工作。 +1 您想要一个从头开始进行图像匹配的示例,或者如何设置例如Junaio Glue 做图像匹配? 这是一个非常广泛的问题 :) 也许移动设备的最佳方法是此处讨论的直方图匹配方法:***.com/a/844113/312007 - 它对计算机来说很快,很容易与框架匹配,但是它不是很健壮,而且您无法确切知道对象在图像中的位置。 图像匹配的方法有很多。如果您描述整个用例,也许另一种方法可能看起来更好,但直方图匹配将是实时识别移动设备上的 3D 对象最直接的方法。如果您需要该位置(用于增加),您可以尝试使用模板匹配来遵循识别步骤。 en.wikipedia.org/wiki/Template_matching 解决方案还有很多,但更复杂。 Vuforia 链接不再有效,可能是这样:developer.vuforia.com/resources/dev-guide/trackables【参考方案2】:我最近读到有关用于对象表示的分层形状词汇表的研究。当然,没有库可供下载,但如果您对通用方法here 感兴趣,您可以找到一些论文。
您也可能对this 论文感兴趣。它描述了一种基于一组轮廓检测对象的算法。
【讨论】:
目前我正在研究不同的项目,一旦我有时间我会研究你的建议链接。无论如何谢谢你【参考方案3】:你考虑过OpenCV for detecting and tracking object吗?看看Find Objects with a Webcam 教程(C++ / Qt)。 OpenCV 适用于 Android - OpenCV 4 Android。
【讨论】:
【参考方案4】:自 2018 年起,您可以检测 Android 应用和 ARCore 应用中的对象。
2018 年 5 月,Google 发布了一个移动 SDK –ML Kit,这是一个供 Android 和 ios 开发人员使用的机器学习 API,您可以将其与 ARCore
SDK(现在有增强图像 API 和增强面孔 API)一起使用。目前它仍处于测试阶段,但它具有以下工作功能:
Google ML Kit 工程师对此的评价如下:
ML Kit 将 Google 的机器学习专业知识通过一个功能强大且易于使用的软件包引入 Android 和 iOS 应用程序。无论您是机器学习新手还是经验丰富的人,只需几行代码即可实现所需的功能。无需深入了解神经网络或模型优化即可开始使用。另一方面,如果您是经验丰富的 ML 开发人员,ML Kit 提供了方便的 API,可帮助您在移动应用中使用自定义 TensorFlow Lite 模型。
【讨论】:
但是,它不允许自定义对象检测吗? 你说custom object detection
是什么意思?
自定义对象在某种意义上除了面孔之外的任何东西,例如玩具、招牌等,
谢谢!太棒了..该模型可以离线使用吗?
根据文档:Add machine learning to your app with out-of-the-box solutions (base APIs) running on device or in the Cloud, or custom models, depending on your specific needs
。 developers.google.com/ml-kit以上是关于如何在 Android 增强现实中检测物理对象?的主要内容,如果未能解决你的问题,请参考以下文章