当前位置: 华文星空 > 知识

讲解和展示视频:FPGA

2021-06-25知识

讲解和展示视频:FPGA-HPS-用于制造业且基于视觉处理的实时目标识别和跟踪

测试和结果

我们以交互和模块化的方式进行设计。我们的设计可以很容易地分解为几个不同的部分:颜色阈值、图像处理、图像分析、伺服控制和用户界面。因此,在将不同的组件组装在一起形成最终设计之前,我们能够通过实施和单元测试每个模块来处理我们的设计。对于我们的每个模块,我们首先决定要实现的算法。在我们的系统上实现它们之前,我们用高级语言评估了不同的算法。然后,我们将更高级别的设计转换为 C 或 Verilog。最后,我们对每个实现进行了单元测试以确保其有效。一旦我们完成了一个模块,我们就将它集成到我们的系统中,并集成测试了整个系统以确保功能。

颜色阈值和处理

我们最初通过在 OpenCV 和 MATLAB 中运行测试来开始我们的设计。我们的第一个目标是确定一个合适的色彩空间来运行我们的检测算法。从 OpenCV 结果中,我们确定 HSV 有效工作。然而,一旦我们尝试在 Verilog 中实现它,我们发现在输入 RGB 到 HSV 进行处理和返回到 RGB 进行输出之间的转换给我们的系统带来了开销和复杂性。因此,我们使用 RGB 进行阈值处理。但是,我们确实修改了 Qsys 子系统,以便使用 16 位 RGB 而不是 8 位 RGB,从而为我们提供更大的色彩动态范围。

一旦我们为 RGB 颜色空间找到了合适的阈值,我们就需要找到合适的处理算法来对我们的图像进行去噪并填充 Sprees 中的任何漏洞。我们还想删除相邻 Sprees 之间的任何连接。我们在 MATLAB 中对样本图像评估了多种算法,包括霍夫变换和侵蚀,然后决定将 open 作为我们使用的算法。下图显示了我们在 MATLAB 中使用 Opening 的测试结果,表明对于我们的目的而言,opening 是一种有效的算法。

原始 MATLAB 输入
MATLAB 打开输出

在移植到 Verilog 之前,我们还在 HPS 上用 C 语言实现了开放。侵蚀和膨胀的函数可以在 HPS的 vision.c 代码中找到。仅使用 HPS,我们最多只能获得每秒 1 帧的视频处理。然而,一旦我们在 Verilog 中成功地在 FPGA 上实现了颜色保留和开放,我们就可以实现相同的像素完美输出,但每秒高达 10 帧。因此,我们在 FPGA 上运行的算法在我们的最终结果中显示了 5 到 10 倍的加速。

下图由 FPGA 生成,显示了阈值图像以及相应的打开图像。如图所示,我们能够确定五种不同颜色的 Sprees 的颜色,并执行产生五个连接对象的处理。图像开放的必要性可能在绿色和红色 Sprees 上最为明显。在开场前的图像中,绿色的 Spree 大部分是相连的,但有几个浮动像素,红色的 Spree 有一小部分橙色。打开图像消除了这两个问题。

顶部:阈值图像,底部:打开的图像

预开图像中存在的不准确可能是由于我们的颜色阈值算法太简单而无法解释我们系统中存在的所有变化。实施颜色阈值是我们工作时间表的第一步,因此我们选择了一种简单的方法。我们没有意识到准确的颜色阈值可以说是我们系统中最重要的步骤,因为它必须能够处理最大的变化。我们发现,无论我们如何尝试校准某些颜色并调整它们的阈值,我们都无法在各种条件下获得始终如一的良好结果。我们怀疑如果我们选择使用不同的颜色空间,例如 HSV,并开发了一种更复杂的算法来处理整个表面的颜色变化,我们可能会取得更好的结果。

对象跟踪和计数

我们首先开始研究如何计算框架中的连接组件。我们使用 MATLAB 来测试要使用的不同算法。我们的第一个成功是在二进制图像上使用称为 bwlabel 的 MATLAB 算法,它以与我们使用 DFS 相同的方式标记图像。查看源代码,我们看到 bwlabel 使用两遍算法。但是,我们也测试了 DFS,它是一种简单且易于实现的一次性算法。我们决定使用 DFS,因为它更容易实现并且可以说更快,因为它只需要一次通过图像。

对象跟踪可以说是 HPS 代码中最困难的方面,因为没有可供我们使用的参考算法,因为我们的系统具有独特的设置。因此,如我们的设计部分所述,我们最初开始考虑我们可以获得的不同案例框架。然后我们添加代码来处理每种情况,直到我们能够可靠地跟踪 Sprees。

整体系统

总体而言,我们能够以高可靠性跟踪和计数狂欢,如下图所示。然而,我们的可靠性因我们的传送带上下移动与我们的初始校准不匹配而导致的颜色变化而有所不同。在缓慢移动的轨道上,我们可以生成完美的组件并对其进行跟踪。然而,随着传送带移动得更快,Sprees 开始更多地「弹跳」到它们身上,导致它们离相机越来越近,以及远离相机的角度。这些变化导致我们在完美条件下校准的原始校准值错过了一些更敏感的特定颜色,例如橙色。因此,在理想条件下,我们能够跟踪通过我们框架的每一个 Spree。然而,由于我们的结构造成的变化,我们的可靠性降低了。我们相信,如果我们构建更一致和更坚固的传送带,我们可以实现近乎完美的系统,检测率超过 99%。虽然很难给出精确的准确度,因为准确度因我们前面提到的许多不同因素而异,但在当前条件下,我们可以实现高达 90% 的准确度。这表明我们的系统是在制造环境中执行库存跟踪或质量控制的有效架构,我们相信可以通过在我们的装配线建设中进行一些改进来改进它。我们在下面链接的视频中展示了我们的系统正在运行。如果我们构建一个更加一致和刚性的传送带。虽然很难给出精确的准确度,因为准确度因我们前面提到的许多不同因素而异,但在当前条件下,我们可以实现高达 90% 的准确度。这表明我们的系统是在制造环境中执行库存跟踪或质量控制的有效架构,我们相信可以通过在我们的装配线建设中进行一些改进来改进它。我们在下面链接的视频中展示了我们的系统正在运行。如果我们构建一个更加一致和刚性的传送带。虽然很难给出精确的准确度,因为准确度因我们前面提到的许多不同因素而异,但在当前条件下,我们可以实现高达 90% 的准确度。这表明我们的系统是在制造环境中执行库存跟踪或质量控制的有效架构,我们相信可以通过在我们的装配线建设中进行一些改进来改进它。我们在下面链接的视频中展示了我们的系统正在运行。这表明我们的系统是在制造环境中执行库存跟踪或质量控制的有效架构,我们相信可以通过在我们的装配线建设中进行一些改进来改进它。我们在下面链接的视频中展示了我们的系统正在运行。这表明我们的系统是在制造环境中执行库存跟踪或质量控制的有效架构,我们相信可以通过在我们的装配线建设中进行一些改进来改进它。我们在下面链接的视频中展示了我们的系统正在运行。

跟踪和计数结果

结论

总的来说,我们的项目符合我们的预期,因为我们可以以高可靠性计算和跟踪在我们的视频帧中移动的 Sprees。我们实现了我们设定的所有目标,包括视频输入、颜色检测、颜色分割/图像处理、对象计数和对象跟踪。我们甚至实现了一些目标,例如构建移动传送带。但是,我们确实承认,需要对跟踪算法和施工质量进行改进,才能将该项目带入实际制造应用中。此外,虽然我们可以以每秒 5-10 帧的速度运行,但要使用快速移动的传送带运行,则需要更大的帧速率增加。最后,我们为仅用几周时间和两个人完成的工作感到自豪。

我们这个项目的基础是建立在由 Bruce Land 编写并在 5760 网站上链接的视频输入项目的基础上。该项目包括多个 Altera IP 内核,例如 VGA 子系统和视频输入内核,它们通过 Qsys 实例化。但是,我们大量修改了此基本代码以添加到我们的项目组件中。我们还为我们的项目使用了 Sprees 品牌。为了进一步扩展我们的产品,我们需要删除对 Sprees 的任何引用或与制造商合作以许可他们的产品。

附录 B:代码

  • Verilog
  • 顶层模块
  • 颜色阈值模块
  • 双端口 RAM 模块
  • 颜色解码器模块
  • HPS 的 C 代码
  • 主文件
  • 视觉.c
  • 视觉.h
  • 图形.c
  • 图形.h
  • address_map.h
  • Resources

    Optoisolator datasheet: 4N35 DFS Docmentation: Blog
    Connected Component Analysis: Website
    Connected Component Analysis: Wikipedia
    Morphological Opening: Wikipedia
    Altera/Quartus/DE1-SoC Resources: 5760 Webpage