13

我正在尝试构建一个简单的应用程序来识别两个 6 面骰子的值。我正在寻找一些通用的指针,甚至可能是一个开源项目。

两个骰子将是黑色和白色的,分别有白色和黑色的点子。他们与摄像机的距离始终相同,但他们在比赛表面上的位置和方向将是随机的。

骰子 http://www.freeimagehosting.net/uploads/9160bdd073.jpg
(不是最好的例子,表面的颜色会更明显,阴影会消失)

我以前没有开发这种识别软件的经验,但我认为诀窍是首先通过搜索以白色或黑色为主的方形轮廓(图像的其余部分,即桌子/游戏)来隔离面部表面,将具有明显不同的颜色),然后隔离点数以进行计数。自上而下的照明将消除阴影。

我希望所描述的场景如此简单(阅读:常见),它甚至可以用作从事 OCR 技术或类似计算机视觉挑战的开发人员的“入门练习”。

更新:

我做了一些进一步的谷歌搜索,发现了这个视频,奇怪的是这正是我正在寻找的。到目前为止,似乎OpenCV 项目是我最好的选择,我将尝试将它与其他项目 OpenCVDotNetEmgu CV一起使用。

更新:
仍在苦苦挣扎,无法让 Emgu CV 工作。

想法,指针,想法等仍然非常受欢迎!

4

7 回答 7

9

正如@Brian 所说,虽然图像训练“不简单”,但实际上这将是一个非常容易编写的程序。您需要做的是为骰子开发 haar 分类器。您总共需要 6 个分类器。分类器是良好图像识别的关键,而 haar 分类器是目前最好的。他们需要很长时间才能制作。这里有一些很好的链接可以让您熟悉 haar 级联:

http://www.computer-vision-software.com/blog/2009/11/faq-opencv-haartraining/

http://www.cognotics.com/opencv/docs/1.0/haartraining.htm

http://note.sonots.com/SciSoftware/haartraining.html

看看这个家伙的 youtube 视频,然后从他在视频中提供的链接下载他的源代码,看看他是如何在 EmguCV 中应用级联文件的。这将是你可以建立的东西。

http://www.youtube.com/watch?v=07QAhRJmcKQ

该站点发布了一些不错的小工具源的链接,该工具为裁剪图像和创建创建 haar 级联所需的索引文件添加了一点自动化。几个月前我用过它,但我无法让它正常工作,但我修改了它,它对 haar(不是 HMM)很有用。如果你想要我修改过的版本,我会发给你。

http://sandarenu.blogspot.com/2009/03/opencv-haar-training-resources.html

于 2010-05-03T04:56:26.810 回答
3

好吧,

执行具有高度抽象性的图像识别的算法(如生成可靠的手写识别软件或面部识别软件所必需的抽象类型)仍然是当今计算机科学中最困难的问题之一。但是,对于像您描述的应用程序这样的受限应用程序的模式识别是一个可解决且非常有趣的算法问题。

我会建议两种可能的策略来执行您的任务:

第一种策略涉及使用一些第三方软件,这些软件可以预处理您的图像并返回有关低级图像组件的数据。我有一些使用pixcavator软件的经验,这里有一个 SDK. Pixavator 将通过您的图像进行挖掘并研究每个像素的颜色值之间的差异,以返回图像中各个组件的边界。像 pixcavator 这样的软件应该能够轻松定义图片中成分的边界,最重要的是每个点。然后,您的工作将是挖掘第三方软件返回给您的数据,并寻找符合白色或黑色小圆形分区描述的组件。您将能够计算这些图像组件中有多少被分区,并使用它来返回图像中的点数。

如果你有足够的野心在不使用第三方软件的情况下解决这个问题,那么问题仍然是可以解决的。本质上,您需要定义一个圆形扫描仪,它是圆形形式的一组像素,它将扫描您的图像测试以寻找一个点(就像眼睛可能扫描一张图片以寻找隐藏在图片中的东西一样)。当您的算法“眼睛”扫描图像时,它将从图像中获取像素集(称为测试集)并与预定义的像素集(我们将称为训练集)进行比较并检查以查看如果测试集在预定义的容错范围内匹配其中一个训练集。运行此类测试的最简单方法是将测试集中每个像素的颜色数据与训练集中每个像素的颜色数据进行比较,以生成称为差异集的第三组像素。如果差异集中的值足够小(意味着测试集与训练集足够相似),您将图像上的该区域定义为点,然后继续扫描图像的其他部分。

这将需要一些猜测并检查以找到正确的容错性,以便您抓住每一个点,并且您不会对不是点的东西进行正面测试。

于 2010-05-03T06:01:34.783 回答
3

虽然我几乎无法为您提供技术帮助,但Dice-O-Matic mark II的制造商可能会提供帮助。

于 2010-04-08T03:46:37.210 回答
2

图像识别并非易事。您将不得不以某种方式限制输入数据,看起来您已经考虑过这一点。

你的问题让我想起了SudokuGrab 的作者的一篇博文,这是一款 iPhone 应用程序,可以让你在报纸上拍摄数独谜题的照片,并让它为你解谜。在帖子中,他讨论了您在解决问题时将面临的几个问题,以及他如何克服这些问题。

于 2010-04-08T03:56:34.543 回答
2

这是一个与模板中的对象识别类似的问题,我提供了一个我认为可能有用的答案。

虽然不同种类的分类器可能会很好地工作,但我可能会尝试我首先概述的方法。分类器通常很难实现,尤其是要正确训练。此外,当事情不工作时,很难知道问题出在哪里:是在您的分类器实现中,您是否选择了错误的方法,参数是否错误,您是否没有正确训练它,或者您是只是不走运?

不,如果可以(轻松)使用 simlpe 图像处理方法和一些数学来解决问题,请远离分类器、模板匹配和神经网络。

于 2010-05-03T06:53:44.360 回答
1

另一种可能性是首先使用更通用的图像处理/识别算法来确定骰子的位置,然后将图像旋转并缩放到某种形式的标准(例如,已旋转为直线的骰子的 512x512 像素灰度图像)。然后尝试训练 6 个不同的神经网络来识别屏幕上不同数量的骰子。AForge.Net是一个很好的可靠的人工智能(包括神经网络)库,应该可以帮助您实现一些目标。

于 2010-05-03T06:46:11.750 回答
0

我认为,在这个视频中,您几乎可以看到您想要的行为。作者使用了多个白色骰子,但他提供了代码(python/opencv),也许您可​​以在此基础上构建您的项目。

于 2013-05-21T20:37:31.320 回答