本文介绍了使用多目标的基本配置和生命周期概念。
有关Vuforia引擎API关键概念的一般介绍,请参阅Vuforia发动机10 API.
多目标表示图像的几何组成。您需要使用目标经理并将其保存在设备数据库中,您可以从中加载并创建多目标观测器。下面介绍了从设备数据库中使用多目标的一般设置。
常规设置
请参阅Vuforia发动机生命周期了解Vuforia引擎生命周期的一般介绍。引擎是创建和使用观察程序所必需的。
创建多目标观测器
要跟踪多目标,可以从设备数据库创建多目标观测器。在启动引擎之前,您应该配置并创建您的观察者。
创建多目标观测器
//创建多目标观测器配置VuMultiTargetConfig多目标配置=vuMultiTargetConfigDefault();multiTargetConfig.databasePath=“box.xml”;multiTargetConfig.targetName=“flakes”;//创建多目标观测器VuObserver*multiTargetObserver={NULL};vuEngineCreateMultiTargetObserver(引擎,&multiTargetOperator,multiTargetConfig,NULL);
上述示例使用默认值创建多目标观测器。这个数据库路径
和目标名称
必须与目标和数据库匹配。创建多目标观测器时,默认情况下会将其激活。
配置和创建具有非默认附加可选参数的观测器时,应同时停用同一数据库中的其他观测器,以避免性能限制。
观察
每个多目标观测器生成在州内收集的观测值。从引擎获取状态并将其解析为多目标观测目标信息
。请参阅观察员和观察文章获取有关目标信息和状态信息的更多信息。
//创建观察列表VuObservationList*obsList={NULL};vuObserverationListCreate(&obsList);//获取并解析多目标观测列表vuStateGetMultiTargetObserverations(状态,obsList);int32_t列表大小=0;vuObservationListGetSize(obsList,&listSize);
然后,解析观察列表以获取有关目标的信息。
//分析多目标列表for(int i=0;i<listSize;i++){VuObservation*obs={NULL};vuObservationListGetElement(obsList,i,&obs);VuPoseInfo poseInfo;vuObservationGetPoseInfo(obs,&poseInfo);VuMultiTargetObservation目标信息目标信息;vuMultiTargetObservation获取目标信息(obs,&targetInfo);if(poseInfo.poseStatus!=观测值_POSE_STATUS_NO_POSE) {//使用poseInfo和targetInfo执行操作 }}
摧毁观察员和观察
使用后销毁对象和进程以释放内存。
请参阅发动机生命周期有关及时结束Vuforia进程的更多信息。对于多目标,您可以调用以下命令来销毁多目标观测和多目标观测器:
销毁观察结果列表
//销毁观察列表vuObserveration List销毁(obsList);
销毁观察员
//摧毁观察员vuObserverDestroy(多目标观察者);
从零件创建多目标
除了为使用目标管理器创建的多目标创建多目标观测器之外,您还可以使用本机API从部件列表创建多目标。零件是一个独立的图像目标,可以相互定位在几何图形中。可以在运行时使用从部件创建多目标vuEngineCreateMultiTargetObserverFromPartsConfiguration()
通过使用和提供VuMultiTargetPartsConfigVuMulti目标部件配置列表
。还可以使用vuMultiTargetObserverAddPart()
和vuMultiTargetObserverRemovePart()
.
多目标观察器零件需要一个图像目标作为从零件创建多目标的输入。向现有多目标添加或从中删除图像目标需要从与创建多目标观测器相同的数据库中加载图像目标。
注:部件的多目标仅在本机C API中可用,在Unity中不可用。 要创建目标管理器支持的更复杂的多目标,在数据集XML中配置多目标.
创建多目标观测器
//从部件配置创建多目标观察器VuMultiTargetPartConfigList部件=nullptr;vuMultiTargetPartConfigListCreate(&parts);VuMultiTargetPartsConfig多目标部件配置=vuMultitargetPartsConfiguration默认();multiTargetPartsConfig.databasePath=“box.xml”;multiTargetPartsConfig.targetName=“newMultiTargetName”;multiTargetPartsConfig.parts=“Image_Target_from_same_database”;//从零件创建多目标观察者VuObserver*multiTargetFromPartsObserver=NULL;vuEngineCreateMultiTargetObserverFromPartsConfiguration(引擎,&multiTargetFromParts观测器,multiTargetPartsConfig,空);
类似地,可以将零件添加到现有的多目标中。必须将零件指定给目标的一侧。将新零件添加到多目标的一侧会覆盖现有图像。
//创建多目标零件配置VuMultiTargetPartConfig partConfig=vuMultiTargetPartConfigDefault();partConfig.targetName=“图像_目标_源_名称_数据库”;//将零件添加到多目标观测器vuMultiTargetObserverAddPart(multiTargetFromPartsObserver,partConfig);
使用指向目标名称
零件的。
vuMultiTargetObserverRemovePart(multiTargetFromPartsObserver,targetName);
观察
从零件创建的多目标获取观测值的执行方式与使用多目标配置
第节。但是,如果您愿意,可以通过API调用将观察值指定为多目标获取部件()
,部件列表获取大小()
、和部件列表获取元素()
.
销毁部件列表和部件
记住在使用后销毁列表和ConfigList。
销毁观察结果列表
//销毁观察列表vuMultiTargetPartListDestroy(obsPartsList);
销毁配置列表
//销毁部件列表vuMultiTargetPartConfigListDestroy(部件);
配置多目标
本节介绍了多目标观测器的其他常见配置选项。
大小
获取多目标的大小、高度、长度和宽度(以米为单位)。
vuMultiTargetObserverGetTargetSize(const VuObserver*观察者,VuVector3F*大小);
比例
不支持在多目标上设置比例。
边界框
使用此函数可以从多目标各自的观测器中获取相对于目标参考帧的轴对齐边界框。
vuMultiTargetObserver GetAABB(const VuObserver*observer,VuAABB*bbox);
要配置您希望同时跟踪的目标数量,请参阅同时检测和跟踪多个目标