ImageTracker Class

Description

ImageTracker实现了平面卡片的检测和跟踪。

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

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

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

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

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

isAvailable

返回true。

C: bool easyar_ImageTracker_isAvailable(void)
C++17: static bool isAvailable()
Traditional 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参数。

C: void easyar_ImageTracker_feedbackFrameSink(easyar_ImageTracker * This, easyar_FeedbackFrameSink * * Return)
C++17: std::shared_ptr<FeedbackFrameSink> feedbackFrameSink()
Traditional C++: void feedbackFrameSink(FeedbackFrameSink * * Return)
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_ImageTracker_bufferRequirement(easyar_ImageTracker * This)
C++17: int bufferRequirement()
Traditional 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_ImageTracker_outputFrameSource(easyar_ImageTracker * This, easyar_OutputFrameSource * * Return)
C++17: std::shared_ptr<OutputFrameSource> outputFrameSource()
Traditional C++: void outputFrameSource(OutputFrameSource * * Return)
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

创建。默认的跟踪模式是 ImageTrackerMode.PreferQuality

C: void easyar_ImageTracker_create(easyar_ImageTracker * * Return)
C++17: static std::shared_ptr<ImageTracker> create()
Traditional C++: static void create(ImageTracker * * Return)
Java: public static @Nonnull ImageTracker create()
Kotlin: companion object fun create(): ImageTracker
Objective-C: + (easyar_ImageTracker *)create
Swift: public static func create() -> ImageTracker
C#: public static ImageTracker create()

createWithMode

以特定跟踪模式创建。在低端手机上,可以使用 ImageTrackerMode.PreferPerformance 来获得更好的性能,但是跟踪效果会有些许损失。

C: void easyar_ImageTracker_createWithMode(easyar_ImageTrackerMode trackMode, easyar_ImageTracker * * Return)
C++17: static std::shared_ptr<ImageTracker> createWithMode(ImageTrackerMode trackMode)
Traditional C++: static void createWithMode(ImageTrackerMode trackMode, ImageTracker * * Return)
Java: public static @Nonnull ImageTracker createWithMode(int trackMode)
Kotlin: companion object fun createWithMode(trackMode: Int): ImageTracker
Objective-C: + (easyar_ImageTracker *)createWithMode:(easyar_ImageTrackerMode)trackMode
Swift: public static func createWithMode(_ trackMode: ImageTrackerMode) -> ImageTracker
C#: public static ImageTracker createWithMode(ImageTrackerMode trackMode)

start

开始跟踪算法。

C: bool easyar_ImageTracker_start(easyar_ImageTracker * This)
C++17: bool start()
Traditional 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_ImageTracker_stop(easyar_ImageTracker * This)
C++17: void stop()
Traditional 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_ImageTracker_close(easyar_ImageTracker * This)
C++17: void close()
Traditional 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_ImageTracker_loadTarget(easyar_ImageTracker * This, easyar_Target * target, easyar_CallbackScheduler * callbackScheduler, easyar_FunctorOfVoidFromTargetAndBool callback)
C++17: void loadTarget(std::shared_ptr<Target> target, std::shared_ptr<CallbackScheduler> callbackScheduler, std::function<void(std::shared_ptr<Target>, bool)> callback)
Traditional C++: void loadTarget(Target * target, CallbackScheduler * callbackScheduler, FunctorOfVoidFromTargetAndBool 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_ImageTracker_unloadTarget(easyar_ImageTracker * This, easyar_Target * target, easyar_CallbackScheduler * callbackScheduler, easyar_FunctorOfVoidFromTargetAndBool callback)
C++17: void unloadTarget(std::shared_ptr<Target> target, std::shared_ptr<CallbackScheduler> callbackScheduler, std::function<void(std::shared_ptr<Target>, bool)> callback)
Traditional C++: void unloadTarget(Target * target, CallbackScheduler * callbackScheduler, FunctorOfVoidFromTargetAndBool 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_ImageTracker_targets(const easyar_ImageTracker * This, easyar_ListOfTarget * * Return)
C++17: std::vector<std::shared_ptr<Target>> targets()
Traditional C++: void targets(ListOfTarget * * Return)
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_ImageTracker_setSimultaneousNum(easyar_ImageTracker * This, int num)
C++17: bool setSimultaneousNum(int num)
Traditional 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_ImageTracker_simultaneousNum(const easyar_ImageTracker * This)
C++17: int simultaneousNum()
Traditional 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()