安卓上的标记识别(识别魔方)

8
我正在开发一款增强现实应用程序,用于Android系统,该应用程序使用手机相机来识别魔方每个面上的彩色正方形的排列方式。
我不确定如何检测和识别魔方每个面上的彩色正方形。如果你看一下魔方,你会发现每个正方形都是六种可能颜色之一,并带有一条细黑边框。这让我想到,可能可以使用现有的标记检测API来相对简单地检测一个正方形。
我的问题是,这里是否有人有图像识别和Android方面的经验?理想情况下,我想能够实现现有的API,但如果有人能指点我开始的方向,从头开始做将是一个有趣的项目。
非常感谢您的帮助。

我无法帮助你,但我想说,如果有一个应用程序,我可以将相机对准魔方,然后获得逐步解决它的指导,那将是太棒了。祝你好运,请在未来的某个时候回到这里发布消息,告诉我们你是否实现了它。 - Aric TenEyck
这就是计划 :-) 首要问题将是让Android识别魔方,然后我可以开始努力让它带你完成解决方案。当我认为它已经达到测试版阶段时,将在Android市场上发布公共测试版以获取用户反馈,并且我会回来更新这个问题,让大家知道它已经可以进行测试了。 - greenie
请注意,内联图片已损坏。您是否有可以重新上传的副本? - D.W.
@D.W. 我已经修复了图片。它只是一个魔方的图片。 - greenie
5个回答

5

您想让摄像机对准一个立方体,并使其理解配置吗?

在照片中识别物体是一个开放的人工智能问题。因此,您需要对问题进行相当的限制才能取得任何进展。我建议从以下内容开始:

  1. 立方体将从距离摄像机正好12英寸的地方拍摄,100W光源直接位于摄像机后面。立方体将被对角线设置,以便它呈现出3个面,中心有一个角。摄像机将被定位,使其直接聚焦于中心的立方体角。

  2. 拍摄一张照片。然后将立方体垂直和水平旋转180度,以使其他三个面可见。将拍摄第二张照片。由于您知道每个面应该在哪里,所以从每个区域获取几个像素,并假设这是该正方形的颜色。请记住,立方体通常会被打乱,而不是像这里显示的那样均匀。因此,您总是要查看9 * 6 = 54个小正方形来获取每个正方形的颜色。

  3. 这两张图片中的信息定义了立方体的配置。生成立方体以相同的配置的图像,并允许用户确认或更正。

也许拍摄6张照片会更简单-每个面一张,并按照明确定义的顺序遍历各个面。请记住,每个面的中心正方形不会移动,并定义了该面的正确颜色。

一旦您获得了配置,就可以使用OpenGL操作旋转立方体切片。这将是一个有数百行代码来定义和旋转立方体的程序,再加上您进行图像识别所需的任何内容。


是的,这正是我设想中应用程序的工作方式。我希望能够实现一个现有的标记检测API(因为每个面上的小立方体都可以被定义为一个标记)。但如果我找不到现有的API,这是非常好的建议。 - greenie

1
除了Peter所说的,最好在用户拍照时在魔方的图片上叠加指南线。然后用户将魔方对准指南线,无论是单面(一个正方形指南线)还是三个面(透视中的三个正方形)。您可能还希望要求用户指定每行中有多少个彩色框。在您的代码中,取样每个彩色框中心的颜色并将其与其他彩色框进行比较(在某些容差水平内),以识别颜色。除了向用户提供识别结果之外,允许用户对识别出的颜色进行更改也是不错的选择。似乎并不需要高级图像识别技术。

0
不错的想法,我也计划在另一个项目中使用计算机视觉和标记检测器。我仍在寻找是否有任何可用的网络信息,例如:将openCV或ARtoolkit链接到Android SDK。如果您有关于如何链接计算机视觉API的其他信息,请告诉我。
再见,祝好运!

0
我建议您查看Andoid OpenCV库。您可能想要检查blob检测算法。您还可以考虑使用Hough线或Countours来检测四边形。

0

NYARToolkit使用标记检测技术,是用JAVA编写的(同时也支持Windows设备的管理C#)。我不知道它在Android平台上的表现如何,但我已经看到它在Windows移动设备上的应用,非常出色。

祝你好运,愉快编程!


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