产品标识#
为什么需要产品标识?#
通常不同的下游产品可能对 VisionFlow 工程中的数据做出了不同的额外的约束和假设(例如 AIDI 总是假设每一个算法工具前有一个视图转换工具),这导致你并不一定总是能正确打开并使用由其他产品创建的工程。
因此你会需要一种方法,能够区分一个 VisionFlow 工程是否是自己当前的产品能够识别的(也即是否是可以兼容,正常打开使用的)。
产品标识和可兼容的产品标识列表#
在 VisionFlow 的初始化配置参数中,我们提供了两个字段 ‘product_mark’ 和 ‘compatible_product_marks’:
product_mark:产品标识,正如其名,其被用于标识不同的 VisionFlow 下游产品。在创建新工程时,产品标识符会被写入工程的 .vfpro 文件,用于标识该工程是由当前产品创建的。 在打开一个工程时将会进行标识字段的匹配检查,通常只有当工程内的产品标识与当前产品的标识一致时才会被允许打开(这通常意味着这是当前产品所创建的工程)。 如果被打开的是一个旧版本工程(即 .vfpro 文件中并没有产品标识字段),则此工程默认是被当前产品所兼容的,并将在工程被成功打开后写入当前产品的标识符。 最后,建议不要将该字段留空(除非你并不担心可能会打开非自己产品所创建的工程)。
compatible_product_marks:可兼容的产品标识列表,有时你可能会需要打开由其他产品创建的工程(也即你确信是能够正常打开使用目标产品创建的工程的),你可以通过将目标产品的标识写入此列表中来实现此目的。 当 ‘product_mark’ 的值不为空时,其将会被默认添加到此列表中(你无需手动添加)。如果你并不希望进行标识字段的检查(通常,我们不建议这样做),则将 ‘product_mark’ 和 ‘compatible_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";
visionflow::initialize(opts);
如何查看工程的产品标识#
通过 visionflow::ProjectDescriptor
中的 ‘product_mark’ 字段即可获取到产品标识信息
如何在不打开工程的情况查看工程内的产品标识#
有两种方式可以做到在不打开工程的前提下查看工程内的产品标识:
通过
visionflow::Project::ReadProjectDescriptor()
接口获取到工程描述信息,通过其中的 ‘product_mark’ 字段获取产品标识信息直接通过打开 .vfpro 文件查看,找到 ‘product_mark’ 字段查看其值即可