2010-04-08 114 views
13

我试图建立一个简单的应用程序,它将识别两个6面骰子的值。我正在寻找一些通用的指针,或者甚至是一个开源项目。骰子面值识别

这两个骰子将是黑色和白色,分别与白色和黑色点子。它们与相机的距离将始终相同,但它们在游戏表面上的位置和方向将是随机的。

Dice http://www.freeimagehosting.net/uploads/9160bdd073.jpg
(不是最好的例子,表面会有更鲜明的色彩和阴影将会消失)

我有开发这种识别软件没有现成的经验,但我会假设诀窍是首先通过搜索具有主要白色或黑色颜色的正方形轮廓(图像的其余部分,即桌子/播放表面,将具有明显不同的颜色)来隔离脸部,然后隔离脸部的点计数。自顶向下照明将消除阴影。

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

更新:

我做了一些进一步的谷歌搜索和跨this video来到这奇怪的是正是我要找的。它也似乎是OpenCV project是我迄今为止最好的选择,我会尝试使用这个other project, OpenCVDotNetEmgu CV

更新:
仍在挣扎,无法获得Emgu CV的工作。

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

回答

3

尽管我几乎没有技术上的帮助可以为您提供帮助,但Dice-O-Matic mark II的制造商可能会提供帮助。

+0

是的,我知道他的项目非常棒。但我根本没有要求他直接寻求帮助:他对客户端脚本以及他如何构建机器非常开放。但是没有提到软件的细节,当然也没有下载这个源代码。我不知道他对帮助竞争对手的感觉如何......:/ – 2010-04-08 04:04:39

+0

看来,这款非常酷的机器的软件似乎使用了这样一个事实,即根据骰子的面积不同,颜色会有不同的颜色,所以黄色点意味着两个滚动,蓝色六等。 – 2010-04-08 05:35:46

+0

是的,这是一个非常优雅的解决方案。然而,我的情况略有不同,因为骰子的位置和方向不固定。此外,我不能使用与不同彩色点子相同的骰子。 – 2010-04-08 05:45:55

2

图像识别不是微不足道的。你将不得不以某种方式限制输入数据,看起来你已经给了这个想法。

您的问题让我想起了blog post by the author of SudokuGrab,这是一款iPhone应用程序,可让您在报纸上拍摄数独谜题的照片,并让它为您解决难题。在这篇文章中,他讨论了在解决问题时你将面临的几个问题,以及他如何克服它们。

+1

我完全同意这绝对不平凡,尽管这个概念本身看起来很简单。我对它可能会如何完成有一些想法,但我完全在如何开始时留下一个空白。然而,对于每天使用这个工具的专业人士来说,我认为我设定了一个非常理想的条件,也许它不会带来很多挑战 - 如果你只是知道如何去做。 :)我浏览了你链接的文章,看起来非常有趣,今天晚些时候我会详细阅读。非常感谢你。 – 2010-04-08 04:10:09

9

虽然图像训练是“非平凡的”@Brian说,这实际上是一个非常简单的程序来编写。你需要做的是开发骰子的哈尔分类器。总共需要6个分类器。分类器是良好图像识别的关键,哈尔分类器是目前最好的分类器。他们需要很长时间才能制作出来。这里有让你用哈尔级联熟悉一些很好的链接:

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(非HMM)非常有用。如果你想要我修改后的版本,我会把它给你。

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

3

好的,

算法用于执行图像识别以高的抽象级别(如必要,以产生可靠的手写识别软件或面部识别软件抽象的类型)持续为一体的当今计算机科学中最困难的问题。然而,良好受限应用程序的模式识别,就像您所描述的应用程序一样,是一个可解且非常有趣的算法问题。

我建议两种可能的策略执行你的任务:

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

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

这将需要一点猜测和检查,以找到正确的容错能力,以便抓住每一个点,而不是测试正点的事物不是点子。

+0

第二种方法非常耗时,并且对于旋转的骰子和投影变换不稳健。 – Temak 2015-06-04 10:52:04

1

另一种可能性是首先使用更通用的图像处理/识别算法来固定骰子位置,然后将图像旋转和缩放成某种形式的标准(例如,已经旋转到骰子的512x512像素灰度图像笔直)。然后尝试训练6个不同的神经网络来识别屏幕上不同数量的骰子。 AForge.Net是一个很好的固体人工智能(包括神经网络)库,应该让你有一个相当的方式。

2

这是对Object Recognition from Templates的一个简单问题,我提供了一个我认为可能有用的答案。

虽然不同类型的分类器可能会工作得很好,但我可能会尝试先概述的方法。分类器通常很难实施,尤其是要进行适当的培训。 此外,当事情不起作用时,很难知道问题出在哪里:它是否在你的分类器的实现中,你选择了错误的方法,参数是否错误,你没有正确地训练它,或者是否你只是不幸?如果问题可以(很容易)用simlpe图像处理方法和一些数学方法解决,那么不要远离分类器,模板匹配和神经网络。

1

this video你可以看到你想要的行为,我想。作者使用多个白色骰子,但他提供的代码(python/opencv),也许你可以建立你的项目。

+0

尽管这个链接可能回答这个问题,但最好在这里包含答案的基本部分,并提供供参考的链接。如果链接页面更改,则仅链接答案可能会失效。 - [来自评论](/ review/low-quality-posts/18960777) – 2018-02-28 11:24:30