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

时间:2015-10-29 23:39:42

标签: android image artoolkit

我刚刚开始在Android上查看ARToolkit,我见过的示例依赖于识别来自设备摄像头的视频流中的标记。

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

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

3 个答案:

答案 0 :(得分:3)

Android之外的所有平台上,您都可以使用“图片”视频输入模块。这是另一种视频捕获模块,它只循环一个或多个JPEG图像。您可以通过将视频配置字符串更改为以下内容来请求此视频模块:

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

在Android上,如果您正在为Android应用程序构建Java ARToolKit,一种可能的替代方法是在Java环境中自己加载图像并将该图像推送到本机跟踪例程,而不是从相机流中推送图像。拦截图像推送的最简单的地方是ARBaseLib / src / org / artoolkit / ar / base / ARToolKit.java的convertAndDetect()方法。 arwAcceptVideoImage的'frame'参数是指向NV12编码视频帧的指针。

如果你在Android上使用ARToolKit for Unity,同样的建议适用,只有arwAcceptVideoImage调用的位置不同。相反,它位于onPreviewFrame方法的文件org / artoolkit / ar / unity / CameraSurface中的UnityARPlayer类中。

抱歉,我不能建议一个更简单的方法... ARToolKit for Android的结构并不是为了在视频流源中提供很大的灵活性。

答案 1 :(得分:1)

是的,我已经做到了。

如果您将看到它的流动,相机框架将作为字节数组被抓取,该数组将被发送到渲染器类(显示为背景图像)和标记检测部分,它将检测标记并生成变换矩阵。

因此,您可以做的是将图像读取为位图并将其更改为相同的格式数组(作为抓取的帧),并为渲染和检测部分输入此数组。

如果您想在一帧暂停视频,您只需复制输入图像阵列的那个实例,然后连续只将该数组提供给渲染和检测部分。

答案 2 :(得分:0)

or intercept the cameraPreviewFrame(final byte[] data) and load the data array with your bitmap in the correct format.