GRIP简介

GRIP是一种用于交互式开发计算机视觉算法的工具,而不是通过反复试验来开发。开发算法之后,您可以在roboRIO,Driver Station Laptop或连接到机器人网络的协处理器上以headless模式运行GRIP。使用Grip,您可以选择视觉操作来创建一个图形线程,该线程代表完成视觉算法所执行的操作顺序。

GRIP基于OpenCV,OpenCV是最流行的计算机视觉软件库之一,用于研究,机器人技术和视觉算法实现。如果您使用某种基于文本的编程语言对同一算法进行手工编码,则GRIP中可用的操作几乎与可用的操作一对一匹配。

GRIP用户界面

../../../../_images/the-grip-user-interface.png

GRIP用户界面包括4个部分:

  • **图像来源**是将图像导入GRIP线程的方法。您可以通过连接的相机或文件来提供图像。来源几乎总是图像处理算法的开始。

  • ** Operation Palette **包含OpenCV库中的图像处理步骤,您可以在线程中将它们链接在一起以形成算法。单击调色板中的一个操作会将其添加到线程的末尾。然后,您可以使用左右箭头在线程中移动操作。

  • “线程”是构成算法的步骤序列。流水线中的每个步骤(操作)都连接到从一个步骤的输出到下一个步骤的输入的上一步。数据通常通过您创建的连接从左到右流动。

  • **“图像预览 **显示已按下预览按钮的每个步骤的结果预览。通过预览每个中间步骤的输出,可以轻松调试算法。

寻找黄色方块

../../../../_images/finding-the-yellow-square.png

在此应用程序中,我们将尝试在图像中找到黄色方块并显示其位置。设置非常简单,只需将USB网络摄像头连接到计算机,即可向下看一些五颜六色的物体。黄色的塑料方块是我们感兴趣的位于图像中的东西。

启用图片来源

../../../../_images/enable-the-image-source.png

第一步是获取图像。要使用信号源,请单击“添加网络摄像头”按钮,然后选择摄像头编号。在这种情况下,Logitech USB摄像头显示为Webcam 0,而计算机监控摄像头为Webcam1。在这种情况下,选择Web摄像头以捕获计算机后面的图像,如设置所示。然后选择图像预览按钮,摄像机流的实时显示将显示在预览区域中。

调整图像大小

../../../../_images/resize-the-image.png

在这种情况下,相机分辨率对于我们的目的来说太高了,实际上,整个图像甚至都无法在预览窗口中查看。从“操作面板”中单击“调整大小”操作,以将其添加到线程的末尾。为了帮助找到“调整大小”操作,请在面板顶部的搜索框中键入“调整大小”。这些步骤是:

  1. 在面板上的搜索框中输入“调整大小”

  2. 单击调色板中的“调整大小”操作。它将出现在线程中。

  3. 在线程的调整大小操作中输入x和y调整大小比例因子。在这种情况下,两者均选择0.25。

  4. 从网络摄像头图像输出垫插槽中拖动到调整图像源垫插槽。将显示一个连接,指示摄像头输出正在发送到调整大小输入。

  5. 单击线程中“调整大小”操作上的目标预览按钮。较小的图像将与较大的原始图像一起显示。您可能需要水平滚动才能看到两者,如图所示。

  6. 最后,单击Webcam源预览按钮,因为没有理由同时查看大图像和小图像。

仅查找图像的黄色部分

../../../../_images/find-only-the-yellow-parts-of-the-image.png

下一步是从图像中删除与被检测物体塑料片的黄色不匹配的所有东西。为此,选择HSV阈值操作以设置HSV值的上限和下限,以指示在最终的二进制图像中应包含哪些像素。请注意,目标区域为白色,而未超出阈值的所有区域均显示为黑色。再次,和以前一样:

  1. 在搜索框中键入HSV以查找HSV阈值操作。

  2. 单击面板中的操作,它将出现在线程的结尾。

  3. 将调整大小操作上的dst(输出)插座连接到HSV阈值的输入。

  4. 启用“ HSV阈值”操作的预览,以便操作结果显示在预览窗口中。

  5. 调整“色相”,“饱和度”和“值”参数,只有目标对象显示在预览窗口中。

摆脱噪音和无关紧要的干扰

../../../../_images/get-rid-of-the-noise.png

到目前为止,这看起来还不错,但有时会出现其他无法完全滤除的噪声。为了说明减少某些偶然像素的一种可能的技术,选择了腐蚀操作。侵蚀会去除不属于关注区域的一小组像素。

仅遮盖原始图像的黄色区域

../../../../_images/mask-just-the-yellow-area.png

Here a new image is generated by taking the original image and masking (and operation) it with the results of the erosion. This leaves just the yellow card as seen in the original image with nothing else shown. And it makes it easy to visualize exactly what was being found through the series of filters.

查找黄色区域(斑点)

../../../../_images/find-the-yellow-area.png

最后一步实际上是使用斑点检测器检测黄牌。此操作将查找具有最小面积的一组像素。在这种情况下,过滤完成后,唯一的非黑色像素来自黄卡。您可以看到在检测到的图像部分周围绘制了一个圆圈。在GRIP的发行版本中(请注意从现在到启动之间的更多更新),您将能够使用NetworkTables将有关检测到的Blob的参数发送到您的机器人程序。

GRIP的状态

从该示例中可以看到,使用GRIP进行简单的对象识别非常简单快捷。尽管这是一个非常简单的示例,但它说明了使用GRIP和特征提取的基本原理。在接下来的几周中,随着更多功能的添加,项目团队将向GRIP发布更新。当前,它支持摄像机(Axis以太网摄像机和网络摄像机)和图像输入。尽管计划了NetworkTables和ROS(机器人操作系统),但仍未提供输出。

您可以从GitHub页面“发布”部分(https://github.com/WPIRoboticsProjects/GRIP)下载代码的预构建版本,也可以克隆源存储库并自行构建。有关构建GRIP的说明,请参见项目页面。项目Wiki上还有其他文档。

因此,请与GRIP一起玩,并在论坛上向我们提供反馈。如果发现错误,则可以在此处发布它们,也可以在项目页面上将其发布为GitHub项目。