产品标识#

为什么需要产品标识?#

通常不同的下游产品可能对 VisionFlow 工程中的数据做出了不同的额外的约束和假设(例如 AIDI 总是假设每一个算法工具前有 一个视图转换工具),这导致你并不一定总是能正确打开并使用由其他产品创建的工程。因此你会需要一种方法,能够区分一个 VisionFlow 工程是否是自己当前的产品能够识别的(也即是否是可以兼容,正常打开使用的)。

产品标识和可兼容的产品标识列表#

在 VisionFlow 的初始化配置参数中,我们提供了两个字段 product_markcompatible_product_marks

  • product_mark :产品标识,正如其名,其被用于标识不同的 VisionFlow 下游产品。在创建新工程时,产品标识符会被写 入工程的 .vfpro 文件,用于标识该工程是由当前产品创建的。在打开一个工程时将会进行标识字段的匹配检查,通常只有 当工程内的产品标识与当前产品的标识一致时才会被允许打开(这通常意味着这是当前产品所创建的工程)。如果被打开的是 一个旧版本工程(即 0.4.12及以前版本的库创建的工程, .vfpro 文件中并没有产品标识字段),则此工程默认是被当 前产品所兼容的,并将在工程被成功打开后写入当前产品的标识符。 最后,建议不要将该字段留空(除非你并不担心可能会打 开非自己产品所创建的工程)。

  • compatible_product_marks :可兼容的产品标识列表,有时你可能会需要打开由其他产品创建的工程(也即你确信是能够正常 打开使用目标产品创建的工程的),你可以通过将目标产品的标识写入此列表中来实现此目的。当 product_mark 的值不为空时, 其将会被默认添加到此列表中(你无需手动添加)。如果你并不希望进行标识字段的检查(通常,我们不建议这样做),则将 product_markcompatible_product_marks 均留空即可。如果你希望打开产品标识为空的工程(也即其 .vfpro 文件内存在 product_mark 字段,但是其值为空),则你需要在此列表中明确的添加空标识符,也即 “”。

Note

大部分情况下,你可能都只需设置一下 product_mark 的值即可,除非你明确希望兼容一些其他产品创建的工程, 那么将其产品标识写入 compatible_product_marks 中即可。

下面通过一个具体的代码示例,为你展示具体的使用流程:

// visionflow 初始化
visionflow::InitOptions opts;

// InitOptions 的其他初始化参数这里就不再一一展示了

// 设置当前产品的标识,例如:SmartCamera(建议最好不要留空)
opts.product_mark = "SmartCamera";
// 设置可兼容的其他产品的标识,例如:AIDI(留空则默认只兼容 SmartCamera 创建的工程)
opts.compatible_product_marks = {"AIDI", "Other"};

visionflow::initialize(opts);


如何查看工程的产品标识#

通过 visionflow::ProjectDescriptor 中的 product_mark 字段即可获取到产品标识信息

如何在不打开工程的情况查看工程内的产品标识#

有两种方式可以做到在不打开工程的前提下查看工程内的产品标识:

  • 通过 visionflow::Project::ReadProjectDescriptor() 接口获取到工程描述信息,通过其中的 product_mark 字段获取产品标识信息

  • 直接通过打开 .vfpro 文件查看,找到 ‘product_mark’ 字段查看其值即可