我正在为 Android 开发一个增强现实应用程序,它使用手机的摄像头来识别魔方每个面上彩色方块的排列。
我不确定的一件事是我将如何准确地检测和识别立方体每个面上的彩色方块。如果您查看魔方,您会发现每个方块都是六种可能的颜色之一,带有细黑色边框。这让我认为应该相对简单地检测一个正方形,可能使用现有的标记检测 API。
我的问题是真的,这里有人有图像识别和安卓的经验吗?理想情况下,我希望能够实现现有的 API,但如果有人能指出我正确的开始方向,这将是一个从头开始的有趣项目。
提前谢谢了。
我正在为 Android 开发一个增强现实应用程序,它使用手机的摄像头来识别魔方每个面上彩色方块的排列。
我不确定的一件事是我将如何准确地检测和识别立方体每个面上的彩色方块。如果您查看魔方,您会发现每个方块都是六种可能的颜色之一,带有细黑色边框。这让我认为应该相对简单地检测一个正方形,可能使用现有的标记检测 API。
我的问题是真的,这里有人有图像识别和安卓的经验吗?理想情况下,我希望能够实现现有的 API,但如果有人能指出我正确的开始方向,这将是一个从头开始的有趣项目。
提前谢谢了。
你想把相机对准一个立方体,让它了解配置吗?
识别照片中的物体是一个开放的 AI 问题。因此,您需要对问题进行相当多的限制才能获得任何牵引力。我建议从以下内容开始:
立方体将从恰好 12 英寸的距离拍摄,相机正后方有一个 100W 的光源。立方体将被设置为对角线,因此它正好呈现 3 个面,中间有一个角。相机将被定位,使其直接聚焦在中心的立体角上。
会拍一张照片。然后将立方体垂直和水平旋转180度,使其他三个面可见。将拍摄第二张照片。由于您确切地知道每张脸的预期位置,因此从每个区域中抓取几个像素,并假设这是该正方形的颜色。请记住,立方体通常会被打乱,不均匀,如图所示。所以你总是需要查看 9*6 = 54 个小方块才能获得每个小方块的颜色。
这两张图片中的信息定义了立方体配置。在相同的配置中生成立方体的图像,并允许用户确认或更正。
拍摄 6 张照片可能更简单——每张脸一张,并以明确定义的顺序在脸周围移动。请记住,每个面的中心正方形不会移动,并为该面定义正确的颜色。
完成配置后,您可以使用 OpenGL 操作来旋转立方体切片。这将是一个包含数百行代码的程序,用于定义和旋转立方体,以及您为图像识别所做的一切。
除了 Peter 所说的,最好在用户拍照时在立方体的图片上叠加引导线。然后用户在引导线内排列立方体,无论是单边(正方形引导线)还是三个边(透视中的三个正方形)。您可能还希望让用户指定每行中彩色框的数量。在您的代码中,在每个彩色框的中心处对颜色进行采样,并将其与其他彩色框(在某个容差范围内)进行比较以识别颜色。除了向用户提供识别的结果之外,允许用户对识别的颜色进行更改会很好。似乎不需要花哨的图像识别。
I'd suggest looking at the Andoid OpenCV library. You probably want to examine the blob detection algorithms. You may also want to consider Hough lines or Countours to detect quads.
好主意,我也打算使用计算机视觉和标记检测器,但用于另一个项目。我仍在寻找网络上是否有任何可用信息,例如:将 openCV 或 ARtoolkit 链接到 Android SDK。如果您有任何其他信息,关于如何链接计算机视觉 API,请告诉我。
再见,祝你好运!
NYARToolkit 使用标记检测并使用 JAVA(以及用于 Windows 设备的托管 C#)制作。我不知道它在 android 平台上的效果如何,但我已经看到它在 windows 移动设备上使用过,而且做得非常好。
祝你好运,编程愉快!