ObjectTracker Class

Description

ObjectTracker实现了3D object target的检测和跟踪。

ObjectTracker占用(1 + SimultaneousNum)个camera的buffer。应使用camera的setBufferCapacity设置不少于所有组件占用的camera的buffer数量。参考 概览

创建之后,可以调用start/stop来开始和停止运行,start/stop是非常轻量的调用。

当不再需要该组件时,可以调用close对其进行关闭。close之后不应继续使用。

ObjectTracker通过feedbackFrameSink输入 FeedbackFrame ,应将 FeedbackFrameSource 连接到feedbackFrameSink上进行使用。参考 概览

Target 可以被ObjectTracker跟踪之前,你需要通过loadTarget/unloadTarget将它载入。可以通过传入接口的回调来获取load/unload的结果。

isAvailable

返回true。

C

bool easyar_ObjectTracker_isAvailable(void)

C++

static bool isAvailable()

Java

public static boolean isAvailable()

Kotlin

companion object fun isAvailable(): Boolean

Objective-C

+ (bool)isAvailable

Swift

public static func isAvailable() -> Bool

C#

public static bool isAvailable()

feedbackFrameSink

FeedbackFrame 输入端口。FeedbackFrame中的InputFrame成员要求必须拥有图像、时间戳和camera参数,camera支持针孔和鱼眼相机。

C

void easyar_ObjectTracker_feedbackFrameSink(easyar_ObjectTracker * This, easyar_FeedbackFrameSink * * Return)

C++

std::shared_ptr<FeedbackFrameSink> feedbackFrameSink()

Java

public @Nonnull FeedbackFrameSink feedbackFrameSink()

Kotlin

fun feedbackFrameSink(): FeedbackFrameSink

Objective-C

- (easyar_FeedbackFrameSink *)feedbackFrameSink

Swift

public func feedbackFrameSink() -> FeedbackFrameSink

C#

public virtual FeedbackFrameSink feedbackFrameSink()

bufferRequirement

当前组件占用camera buffer的数量。

C

int easyar_ObjectTracker_bufferRequirement(easyar_ObjectTracker * This)

C++

int bufferRequirement()

Java

public int bufferRequirement()

Kotlin

fun bufferRequirement(): Int

Objective-C

- (int)bufferRequirement

Swift

public func bufferRequirement() -> Int32

C#

public virtual int bufferRequirement()

outputFrameSource

OutputFrame 输出端口。

C

void easyar_ObjectTracker_outputFrameSource(easyar_ObjectTracker * This, easyar_OutputFrameSource * * Return)

C++

std::shared_ptr<OutputFrameSource> outputFrameSource()

Java

public @Nonnull OutputFrameSource outputFrameSource()

Kotlin

fun outputFrameSource(): OutputFrameSource

Objective-C

- (easyar_OutputFrameSource *)outputFrameSource

Swift

public func outputFrameSource() -> OutputFrameSource

C#

public virtual OutputFrameSource outputFrameSource()

create

创建。

C

void easyar_ObjectTracker_create(easyar_ObjectTracker * * Return)

C++

static std::shared_ptr<ObjectTracker> create()

Java

public static @Nonnull ObjectTracker create()

Kotlin

companion object fun create(): ObjectTracker

Objective-C

+ (easyar_ObjectTracker *)create

Swift

public static func create() -> ObjectTracker

C#

public static ObjectTracker create()

setResultPostProcessing

设置结果后处理。

enablePersistentTargetInstance默认为false,开启时,如果 InputFrame 数据中包含空间信息,则 ImageTrackerResult 中的targetInstances会包含所有识别到的instance(包括当前未跟踪的)。

enableRtct默认为false,开启时,如果 InputFrame 数据中包含时间信息和空间信息,则 ImageTrackerResult 中的 targetInstances 的 pose 会使用 RealTimeCoordinateTransform 进行处理。

C

void easyar_ObjectTracker_setResultPostProcessing(easyar_ObjectTracker * This, bool enablePersistentTargetInstance, bool enableMotionFusion)

C++

void setResultPostProcessing(bool enablePersistentTargetInstance, bool enableMotionFusion)

Java

public void setResultPostProcessing(boolean enablePersistentTargetInstance, boolean enableMotionFusion)

Kotlin

fun setResultPostProcessing(enablePersistentTargetInstance: Boolean, enableMotionFusion: Boolean): Unit

Objective-C

- (void)setResultPostProcessing:(bool)enablePersistentTargetInstance enableMotionFusion:(bool)enableMotionFusion

Swift

public func setResultPostProcessing(_ enablePersistentTargetInstance: Bool, _ enableMotionFusion: Bool) -> Void

C#

public virtual void setResultPostProcessing(bool enablePersistentTargetInstance, bool enableMotionFusion)

setResultAsyncMode

设置结果异步模式。如果结果通过outputFrameSource输出,则应设置位true,如果结果通过getSyncResult获取,则应设置为false。默认enableAsync为true。同步模式仅在输入帧包含空间信息且使用XR License时可生效。

C

bool easyar_ObjectTracker_setResultAsyncMode(easyar_ObjectTracker * This, bool enableAsync)

C++

bool setResultAsyncMode(bool enableAsync)

Java

public boolean setResultAsyncMode(boolean enableAsync)

Kotlin

fun setResultAsyncMode(enableAsync: Boolean): Boolean

Objective-C

- (bool)setResultAsyncMode:(bool)enableAsync

Swift

public func setResultAsyncMode(_ enableAsync: Bool) -> Bool

C#

public virtual bool setResultAsyncMode(bool enableAsync)

start

开始跟踪算法。

C

bool easyar_ObjectTracker_start(easyar_ObjectTracker * This)

C++

bool start()

Java

public boolean start()

Kotlin

fun start(): Boolean

Objective-C

- (bool)start

Swift

public func start() -> Bool

C#

public virtual bool start()

stop

暂停跟踪算法。调用start来重新启动跟踪。

C

void easyar_ObjectTracker_stop(easyar_ObjectTracker * This)

C++

void stop()

Java

public void stop()

Kotlin

fun stop(): Unit

Objective-C

- (void)stop

Swift

public func stop() -> Void

C#

public virtual void stop()

close

关闭。close之后不应继续使用。

C

void easyar_ObjectTracker_close(easyar_ObjectTracker * This)

C++

void close()

Java

public void close()

Kotlin

fun close(): Unit

Objective-C

- (void)close

Swift

public func close() -> Void

C#

public virtual void close()

loadTarget

加载一个 Target 进入tracker。 Target 只有在成功加载进入tracker之后才能被识别和跟踪。

这个方法是异步方法。加载过程可能会需要一些时间来完成,这段时间内新的和丢失的target的检测可能会花比平时更多的时间,但是检测到之后的跟踪不受影响。如果你希望知道加载的结果,需要处理callback数据。callback将会在 CallbackScheduler 所指定的线程上被调用。跟踪线程和除了其它加载/卸载之外的操作都不会被阻塞。

C

void easyar_ObjectTracker_loadTarget(easyar_ObjectTracker * This, easyar_Target * target, easyar_CallbackScheduler * callbackScheduler, easyar_FunctorOfVoidFromTargetAndBool callback)

C++

void loadTarget(std::shared_ptr<Target> target, std::shared_ptr<CallbackScheduler> callbackScheduler, std::function<void(std::shared_ptr<Target>, bool)> callback)

Java

public void loadTarget(@Nonnull Target target, @Nonnull CallbackScheduler callbackScheduler, @Nonnull FunctorOfVoidFromTargetAndBool callback)

Kotlin

fun loadTarget(target: Target, callbackScheduler: CallbackScheduler, callback: FunctorOfVoidFromTargetAndBool): Unit

Objective-C

- (void)loadTarget:(easyar_Target *)target callbackScheduler:(easyar_CallbackScheduler *)callbackScheduler callback:(void (^)(easyar_Target * target, bool status))callback

Swift

public func loadTarget(_ target: Target, _ callbackScheduler: CallbackScheduler, _ callback: @escaping (Target, Bool) -> Void) -> Void

C#

public virtual void loadTarget(Target target, CallbackScheduler callbackScheduler, Action<Target, bool> callback)

unloadTarget

从tracker中卸载 Target

这个方法是异步方法。卸载过程可能会需要一些时间来完成,这段时间内新的和丢失的target的检测可能会花比平时更多的时间,但是检测到之后的跟踪不受影响。如果你希望知道卸载的结果,需要处理callback数据。callback将会在 CallbackScheduler 所指定的线程上被调用。跟踪线程和除了其它加载/卸载之外的操作都不会被阻塞。

C

void easyar_ObjectTracker_unloadTarget(easyar_ObjectTracker * This, easyar_Target * target, easyar_CallbackScheduler * callbackScheduler, easyar_FunctorOfVoidFromTargetAndBool callback)

C++

void unloadTarget(std::shared_ptr<Target> target, std::shared_ptr<CallbackScheduler> callbackScheduler, std::function<void(std::shared_ptr<Target>, bool)> callback)

Java

public void unloadTarget(@Nonnull Target target, @Nonnull CallbackScheduler callbackScheduler, @Nonnull FunctorOfVoidFromTargetAndBool callback)

Kotlin

fun unloadTarget(target: Target, callbackScheduler: CallbackScheduler, callback: FunctorOfVoidFromTargetAndBool): Unit

Objective-C

- (void)unloadTarget:(easyar_Target *)target callbackScheduler:(easyar_CallbackScheduler *)callbackScheduler callback:(void (^)(easyar_Target * target, bool status))callback

Swift

public func unloadTarget(_ target: Target, _ callbackScheduler: CallbackScheduler, _ callback: @escaping (Target, Bool) -> Void) -> Void

C#

public virtual void unloadTarget(Target target, CallbackScheduler callbackScheduler, Action<Target, bool> callback)

targets

返回当前已经被加载进入tracker的target。如果异步的加载/卸载正在执行,在加载/卸载完成之前的返回值将不会反映这些加载/卸载的结果。

C

void easyar_ObjectTracker_targets(const easyar_ObjectTracker * This, easyar_ListOfTarget * * Return)

C++

std::vector<std::shared_ptr<Target>> targets()

Java

public java.util.@Nonnull ArrayList<@Nonnull Target> targets()

Kotlin

fun targets(): ArrayList<Target>

Objective-C

- (NSArray<easyar_Target *> *)targets

Swift

public func targets() -> [Target]

C#

public virtual List<Target> targets()

setSimultaneousNum

设置最大可被tracker跟踪的目标个数。默认值为1。

C

bool easyar_ObjectTracker_setSimultaneousNum(easyar_ObjectTracker * This, int num)

C++

bool setSimultaneousNum(int num)

Java

public boolean setSimultaneousNum(int num)

Kotlin

fun setSimultaneousNum(num: Int): Boolean

Objective-C

- (bool)setSimultaneousNum:(int)num

Swift

public func setSimultaneousNum(_ num: Int32) -> Bool

C#

public virtual bool setSimultaneousNum(int num)

simultaneousNum

获取最大可被tracker跟踪的目标个数。默认值为1。

C

int easyar_ObjectTracker_simultaneousNum(const easyar_ObjectTracker * This)

C++

int simultaneousNum()

Java

public int simultaneousNum()

Kotlin

fun simultaneousNum(): Int

Objective-C

- (int)simultaneousNum

Swift

public func simultaneousNum() -> Int32

C#

public virtual int simultaneousNum()

getSyncResult

获得同步输出结果。如果ObjectTracker已暂停,或者未通过setResultAsyncMode将结果异步模式设为false,则返回值为空。

C

void easyar_ObjectTracker_getSyncResult(easyar_ObjectTracker * This, double timestamp, easyar_Matrix44F cameraTransform, easyar_MotionTrackingStatus trackingStatus, easyar_OptionalOfObjectTrackerResult * Return)

C++

std::optional<std::shared_ptr<ObjectTrackerResult>> getSyncResult(double timestamp, Matrix44F cameraTransform, MotionTrackingStatus trackingStatus)

Java

public @Nullable ObjectTrackerResult getSyncResult(double timestamp, @Nonnull Matrix44F cameraTransform, int trackingStatus)

Kotlin

fun getSyncResult(timestamp: Double, cameraTransform: Matrix44F, trackingStatus: Int): ObjectTrackerResult?

Objective-C

- (easyar_ObjectTrackerResult *)getSyncResult:(double)timestamp cameraTransform:(easyar_Matrix44F *)cameraTransform trackingStatus:(easyar_MotionTrackingStatus)trackingStatus

Swift

public func getSyncResult(_ timestamp: Double, _ cameraTransform: Matrix44F, _ trackingStatus: MotionTrackingStatus) -> ObjectTrackerResult?

C#

public virtual Optional<ObjectTrackerResult> getSyncResult(double timestamp, Matrix44F cameraTransform, MotionTrackingStatus trackingStatus)