ARToolkit for Android能否识别图像中的标记,而不是视频?

3

我刚开始研究ARToolkit在Android上的应用,我看到的示例都依赖于从设备相机捕获视频流中的标记。

是否有任何示例可以使用图像(例如包含2D条形码标记的普通JPG文件)?或者是否有办法在标记出现时暂停视频流或抓取单个帧?

我意识到这听起来可能很奇怪,但我对特定的用例感兴趣。


3个回答

3

除了Android平台,您可以使用“image”视频输入模块。这是一种替代的视频捕获模块,它只循环播放一个或多个JPEG图像。您可以通过将视频配置字符串更改为以下内容来请求此视频模块:

-device=Image -image="/path/to/image0.jpeg" -image="/path/to/image1.jpeg"

在Android平台上,如果你正在构建一个Java ARToolKit for Android应用程序,那么一种可能的替代方法是在Java环境中自己加载图像,并将该图像推送到本地跟踪例程,而不是从相机流中推送图像。拦截推送图像的最简单位置是在ARBaseLib/src/org/artoolkit/ar/base/ARToolKit.java的convertAndDetect()方法中。arwAcceptVideoImage的“frame”参数是指向NV12编码视频帧的指针。
如果你在Android上使用ARToolKit for Unity,则同样适用相同的建议,只是arwAcceptVideoImage调用的位置不同。相反,它位于UnityARPlayer类中的文件org/artoolkit/ar/unity/CameraSurface的onPreviewFrame方法中。
很抱歉我无法提供更简单的方法... ARToolKit for Android实际上没有为视频流的来源提供太多灵活性的结构。

1

是的,我做到了。

如果您看到它的流程,相机帧被抓取为字节数组,该数组被发送到呈现器类,该类显示为背景图像,并且标记检测部分检测标记并生成转换矩阵。

因此,您可以将图像读取为位图,并将其更改为与抓取帧相同格式的数组(作为输入),然后将此数组输入用于呈现和检测部分。

如果您想在一个帧上暂停视频,您只需复制该输入图像数组的实例,然后仅将该数组连续馈送到呈现和检测部分即可。


0
或者拦截 cameraPreviewFrame(final byte[] data) 方法,并以正确的格式将数据数组加载为位图。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接