跳转到内容

SwisTrack/开发者/实施新组件

维基教科书,开放世界中的开放书籍

SwisTrack 是基于组件的,也就是说,处理图像就是按照特定顺序调用一系列(配置良好的)组件。如果您有一个需要特殊图像处理的应用程序,欢迎编写您自己的组件。为 SwisTrack 编写组件比编写您自己的程序有许多优点

  • 您可以使用现有组件来完成所有不特定于您的应用程序的任务。即使您需要实施非常特殊的算法,您也可以最有可能使用相机组件来获取图像。
  • SwisTrack 为您提供了一个 GUI,使您可以轻松地可视化处理结果(甚至中间步骤)。
  • SwisTrack 允许您通过测量组件消耗了多少时间以及允许您设置圈速来测量算法的性能。
  • 最后但并非最不重要的一点是,您可以轻松地与其他 SwisTrack 用户共享您的组件。


实施组件之前

[编辑 | 编辑源代码]

在实施组件之前,请考虑算法的各个步骤。如果您能将图像处理算法分成不同的部分,那么现有组件可能已经实现了某些任务。有时将算法分成两个或多个组件是有意义的。这可以简化配置并提供对算法结构的更好洞察。但是,对于第一个实现,最简单的方法是从一个组件开始。因此,本页将重点介绍一个组件的实施。

核心数据结构

[编辑 | 编辑源代码]

数据使用 SwisTrackCore 类在组件之间传递。它具有用于保存轨迹、粒子、图像的数据结构。管道中的每个组件都会直接更新这些数据结构,通常是通过重置指针以使用其自身类实例中的指针。

轨迹存储在两个数据结构中:SwisTrackCore::mDataStructureTracks 和 SwisTrackCore::mDataStructureParticles。mDataStructureTracks 存储轨迹最后 50 个点的窗口,用于绘图和计算。mDataStructureParticles 是 blob 查找器的输出,并存储当前帧的粒子及其轨迹关联,以及它们在现实世界中的位置。

创建新组件

[编辑 | 编辑源代码]

我们在此描述如何创建一个名为“MyFavoriteAlgorithm”的新组件。当然,您可以自由地为您的组件选择另一个名称(我们甚至建议这样做)。我们将分三个步骤来创建新组件:创建和注册新组件类、实施算法,以及创建配置文件。

1. 创建和注册新组件类

[编辑 | 编辑源代码]
  1. 复制文件 code/core/ComponentTemplate.cppcode/core/ComponentTemplate.h。将新文件命名为 ComponentMyFavoriteAlgorithm.cppComponentMyFavoriteAlgorithm.h。(注意,如果现有组件执行的操作与您要实施的操作类似,您也可以复制该现有组件,而不是复制更通用的模板组件。)
  2. 打开这两个文件,将“Template”(区分大小写)替换为“MyFavoriteAlgorithm”。
  3. 确保您还更改了在构造函数中初始化的组件名称。
  4. 打开文件 SwisTrackCore.cpp,将您的组件添加到包含文件,即
#include "ComponentMyFavoriteAlgorithm.h"

以及在构造函数中添加到可用组件列表

mAvailableComponents.push_back(new ComponentMyFavoriteAlgorithm(this));

最后,在 SwisTrack GUI 所在的“components”目录中生成一个 XML 文件,该文件描述您的组件及其参数。使用现有的组件作为模板。

如果您现在编译并运行 SwisTrack,您应该能够将新组件添加到处理管道中。

2. 实施算法

[编辑 | 编辑源代码]
  1. 构造函数:数据结构关系。
  1. 实施 OnStart() 方法。
  2. 实施 OnReloadConfiguration() 方法。
  3. 实施 OnStep() 方法。
  4. 实施 OnStepCleanup() 方法。
  5. 实施 OnStop() 方法。


3. 创建配置文件

[编辑 | 编辑源代码]
  1. 复制文件 SwisTrackEnvironment/Components/Template.xml,并将新文件命名为 MyNewComponent.xml
  2. 在文本编辑器(最好是支持 XML 的编辑器)中打开此文件,并替换组件的标题、描述和 URL。

更多内容即将发布…

华夏公益教科书