如何在Android增强现实中检测物理对象?

34

我发现很多方法可以检测不同的形状,但是当面对实际物体时就会遇到麻烦。从我所了解的来看,我们应该在图像周围加上黑色边框来生成模式文件。如果我按照这个概念生成一个模式,那么我的应用程序就可以检测打印出来的图像。但是在现实世界中,物理对象并不一定有黑色边框或正方形的形状。

更新

尽管我接受了答案,但我的问题仍未得到解决。因为仍然没有关于如何检测物理对象的解决方案。

欢迎提供进一步的研究和链接!


你想使用哪些库?能否详细说明一下你的用例:是要检测和识别单个物理对象,比如一个真正的茶壶,还是要检测和区分多个物理对象,比如一个茶壶、一个玩具车和一罐可乐。你是在桌面尺度上工作,还是在户外?或者你是想识别标志物上的茶壶图片吗? - dabhaid
1
谢谢您的回复。我正在尝试仅检测一个物体,例如茶壶或灯泡。我正在使用AndAR库。请问如何为物理对象创建模式文件? - Tofeeq Ahmad
3
嗨,Sameer!终于过了3年,你是否有任何可行的解决方案来使用Vuforia或任何SDK跟踪真实目标(例如真实车辆作为标记)? - Sanket Prabhu
4个回答

17
坏消息是,你不能使用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
谢谢。我非常失望,除了开源性质之外,没有可用于物体检测的库。您能否提供一个使用相机帧比较两个图像的示例,以便我可以尝试这个?但我真的很欣赏您的工作。+1 - Tofeeq Ahmad
1
这是一个非常广泛的问题 :) 也许移动设备最好的方法是直方图匹配方法,可以在这里讨论:https://dev59.com/7nRA5IYBdhLWcg3wvgkb#844113 - 它计算速度快,非常容易与帧匹配,但它不是非常稳健,并且您不会知道对象在图像中的确切位置。 - dabhaid
1
图像匹配有很多种方法。如果你描述整个用例,也许会出现更好的方法,但直方图匹配是在移动设备上实时识别3D对象最简单的方法。如果你需要位置(用于增强),则可以尝试使用模板匹配跟随识别步骤。http://en.wikipedia.org/wiki/Template_matching 还有很多解决方案,但它们更为复杂。 - dabhaid
2
Vuforia的链接已经失效了,也许这个可以替代:https://developer.vuforia.com/resources/dev-guide/trackables - Rui Marques
有没有其他的SDK可以跟踪真实物体?我也需要这种功能。 - Amit Hooda
显示剩余13条评论

3
我最近阅读了关于用于对象表示的分层形状词汇的研究。当然,目前没有可供下载的库,但如果您对一般方法感兴趣,在这里可以找到一些论文。
此外,您可能会对这篇论文感兴趣。它描述了一种基于一组轮廓检测对象的算法。

目前我正在处理不同的项目,只要我有时间,我会学习你提供的链接。无论如何,谢谢。 - Tofeeq Ahmad

1

自2018年起,您可以在Android应用程序和ARCore应用程序中检测对象。

2018年5月,Google宣布推出了一个移动SDK - ML Kit,这是一个面向Android和iOS开发人员的机器学习API,您可以与ARCore SDK一起使用(现在具有增强图像API和增强面部API)。目前仍处于测试阶段,但它具有以下工作功能:

enter image description here

Google ML Kit的工程师们这样评价它:

ML Kit将Google的机器学习专业知识以强大而易于使用的方式带到了Android和iOS应用程序中。无论您是机器学习的新手还是经验丰富的开发者,您都可以在几行代码中实现所需的功能。您无需深入了解神经网络或模型优化即可开始使用。另一方面,如果您是经验丰富的ML开发人员,ML Kit提供了方便的API,帮助您在移动应用程序中使用自定义TensorFlow Lite模型。


但是,它不允许自定义对象检测,或者说它可以吗? - user6038900
你说的“自定义对象检测”是什么意思? - Andy Jazz
自定义对象指的是除了人脸之外的任何物体,例如玩具、标志牌等。 - user6038900
1
谢谢!太棒了!这个模型能离线使用吗? - user6038900
1
根据文档:使用设备上运行或云中运行的开箱即用解决方案(基本API)或自定义模型将机器学习添加到您的应用程序,具体取决于您的特定需求。https://developers.google.com/ml-kit - Andy Jazz
显示剩余2条评论

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接