Android上的标记识别(识别Rubik的立方体)

我正在开发一个Android的增强现实应用程序,使用手机的相机来识别魔方的每个面上的彩色正方形的排列。

我不确定的一件事情是如何去检测和识别立方体每个面上的彩色正方形。 如果你看一个魔方,那么你可以看到,每个方块都是六种可能的颜色之一,并带有一个薄的黑色边框。 这导致我认为它应该相对简单地检测一个正方形,可能使用现有的标记检测API。

魔方

我的问题是真的,这里有人有任何图像识别和Android的经验吗? 理想情况下,我希望能够实现和现有的API,但如果有人能指引我正确的方向开始,这将是一个有趣的项目,从头开始。

提前谢谢了。

Solutions Collecting From Web of "Android上的标记识别(识别Rubik的立方体)"

你想把摄像机指向一个立方体,并且了解configuration吗?

识别照片中的物体是一个开放的AI问题。 所以你需要对这个问题进行相当程度的限制,以获得更多的吸引力。 我build议从类似的东西开始:

  1. 立方体将从12英寸的距离拍摄,相机后面有一个100W的光源。 立方体将对angular线设置,因此它正好呈现3个面,中间有一个angular落。 相机将被定位,使其直接对焦在中心的立方体angular落。

  2. 一张照片将被拍摄。 然后,立方体将垂直和水平转动180度,以便其他三个面可见。 第二张照片将被拍摄。 由于您确切知道每张脸的位置,请从每个区域中抓取几个像素,并假定该平方的颜色。 请记住,立方体通常会被打乱,不像图中所示的那样是统一的。 所以你总是要看9 * 6 = 54的小方块才能得到每一个的颜色。

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

拍摄6张照片可能会更简单 – 每张照片中的一张,并按照明确的顺序在脸部周围漫游。 请记住,每个面的中心平方不会移动,并为该面定义正确的颜色。

完成configuration后,可以使用OpenGL操作来旋转多维数据集切片。 这将是一个包含数百行代码的程序,用于定义和旋转立方体,以及您为图像识别所做的任何操作。

除了彼得所说的之外,用户拍摄照片的时候最好在立方体的图片上叠加引导线。 然后用户在引导线内排列立方体,无论是单侧(方形引导线)还是三侧(透视三个方块)。 您也可能希望让用户指定每行中彩色框的数量。 在您的代码中,对每个彩色框的中心颜色进行采样,并将其与其他彩色框(在一定公差范围内)进行比较以识别颜色。 除了向用户提供识别的结果之外,允许用户对识别的颜色进行更改将是很好的。 它似乎并不需要花哨的图像识别。

这个问题可以给你一些关于如何在android上使用opencv的提示。 但是我不知道是否需要用户安装一些复杂的额外库。

不错的想法,我打算使用计算机视觉和标记探测器,但也为另一个项目。 我仍在查看是否有任何可用的信息,例如:将openCV或ARtoolkit链接到Android SDK。 如果您有任何关于如何链接计算机视觉API的其他信息,请让我知道。

很快见到你,好运!

NYARToolkit使用标记检测,并在JAVA(以及托pipeC#的Windows设备)。 我不知道它在android平台上的效果如何,但我已经看到它在Windows移动设备上使用,它做得很好。

祝你好运,快乐的编程!

我build议看看Andoid OpenCV库。 您可能想要检查斑点检测algorithm。 你也可以考虑Hough线或Countours检测四边形。