图像识别——图像中的骰子

Image recognition - dice in an image

我正在开发一个 WPF 应用程序,我需要从图像文件(例如,由我的网络摄像头拍摄)/BitmapSource "find" / "read" 骰子。

所以我需要知道找到的骰子数量(1、2、3、4、5 或 6?)以及它们的数字...

我已经在 google 上进行了搜索,但我无法找到一种方法...目前我唯一能找到的是 EmGu(英特尔 OpenCV 图像的 .NET 包装器-处理库)。但是,这似乎很广泛。

一些进一步的信息/想法/经验会有所帮助。

我对图像识别一窍不通,我认为使用掷骰子程序可能会更简单。
我知道人工智能很难。很辛苦。
在这里使用 AI 的最简单方法可能是教 AI 点数和骰子数。

假设你有网络摄像头,并安排图片中唯一的白色东西是斑点。
您可以拍照,然后 "just" 遍历它,使用图片中的 xy 坐标检查图像中的白色。 当你找到一个时,任何连接的白色仍然是那个点。
任何未连接的白色都是另一个点。
您将需要调整此过程,以便闪亮的位或任何不会被拾取的东西。 如果骰子不是绿色的,而你在绿色粗呢上滚动,那么同样当你击中非绿色时,那就是一个骰子。

首先:要完成这个任务你需要一个视觉库(比如OpenCV),没有办法。否则你将不得不自己实现所需的图像处理。

其次:根据捕获图像的环境,机器可能真的很难完成这项任务。对于机器视觉,建议图像符合以下条件:

  • 灰度值
  • 平滑和深色背景
  • 前景中的对象很少
  • 与背景形成鲜明对比的待识别对象

第三:这里使用机器视觉来完成任务是一个小指南。一如既往,有多种方法可以做到这一点。

a) 使用二值化

  1. 过滤:应用过滤器,例如中值滤波器
  2. 二值化:二值化图像和select骰子的区域
  3. 形态学:应用形态学操作(例如开运算)去除select已编辑但不需要的背景部分
  4. 计数:像骰子一样计算具有相似特征(宽度,..)的区域
  5. 计数:计算先前 selected 骰子区域中的洞数

b) 机器学习

如果你敢,你也可以尝试机器学习方法,例如使用来自 Google 的 TensorFlow。在这种情况下,您没有上面提到的大部分限制,而是需要用数百张图像来教授算法。图片需要 sorted/tagged 正确 ("no.1",..)。如果正确教导,它也能识别不同的骰子类型(大小、颜色、..),这很难用方法 a) 来做到。