1

首先:感谢您花时间帮助我解决我的问题。非常感谢:)

我正在构建一个自然的用户界面。我希望该界面能够检测其上的多个(最多 40 个)对象。界面应该检测对象是否在画布上移动。表面上的实际物体是什么并不重要

前“瓶子”图 1

或者它有什么颜色——只有物体的形状和位置是有意义的

前“圈子” 图 2

到目前为止,我正在使用连接到我的计算机的网络摄像头和Processing的 blob 功能来检测界面表面上的对象(见图 1)。这对我要完成的工作有一些主要缺点:

  1. 我不希望用户看到相机或任何替代设备,因为这会分散用户的注意力。实际上表面应该是完全黑暗的。

  2. 每当我用手伸手重新排列界面上的对象时,斑点检测就会变得非常繁忙,并且正在识别没有直接接触画布的对象(我的手)。使用 Kinect 很难解决这个问题,因为深度功能无法通过玻璃/丙烯酸玻璃工作——如果我错了,请纠正我。

  3. 在 Arduino 控制的画布上安装几个 LED 会很好。不幸的是,LED 的光会干扰斑点检测。
  4. 由于相机的焦距,桌子需要过高(60 厘米/23 英寸)。

您对检测物体的替代设备/技术有任何想法吗?如果该设备能与 Processing 和 Arduino 一起工作,那就太好了。

提前致谢!:)

4

4 回答 4

2

可能性:

  • 使用反光有色玻璃,使表面变暗或反光
  • 用红外 LED 阵列照亮放置网络摄像头的区域。
  • 我建议对对象进行基于颜色的检测和轮廓处理。
  • 如果您使用基于颜色的检测,请将​​帧转换为 HSV 和 CrCb 颜色空间。在使用基于颜色的检测时,这些对于所需区域的分割要好得多。
  • 我建议您查看https://github.com/atduskgreg/opencv-processing。这将 Open-CV 与处理接口连接起来,您将在处理中获得 Open-CV 的许多功能。
于 2017-03-14T05:05:05.870 回答
0

一种可能:

  • 使用具有红外功能的网络摄像头(例如具有内置红外照明的安全摄像头)。显然,一些普通的网络摄像头可以通过移除过滤器来转换为红外使用,我不知道这有多普遍。
  • 用一些对红外线透明但对可见光不透明或几乎不透明的材料制作桌面。(以大多数红外遥控器上的镜头为例。)

不幸的是,这对#2 没有多大帮助。也许您可以对您识别为对象的斑点的大小/形状更加挑剔?

如果您只需要#3 的几个不同的照明点,您可以将激光二极管放在桌子下方,远离相机的路径 - 如果桌面材料不是完全不透明的,那应该在顶部形成一个可见点。如果您需要任意定位灯 - 可能是天花板上的投影仪,指向下方?

于 2017-03-13T18:52:56.140 回答
0

除了现有的想法(很棒),我想建议尝试TUIO Processing

TUIO图

一旦您设置好相机(根据您的物理限制使用正确的视野/镜头/等),您可能会通过将TUIO标记粘贴到对象底部而摆脱困境。

该软件将检测标记,您将通过 ID 区分对象,还可以获得位置/旋转/等。你的手不会参与其中。

于 2017-03-14T21:22:13.410 回答
0

看看OpenCV。这是一个开源的计算机视觉项目。

于 2017-03-13T20:15:29.177 回答