3

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

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

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

4

3 回答 3

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 调用的位置不同。相反,它位于文件 org/artoolkit/ar/unity/CameraSurface 的方法 onPreviewFrame 中的 UnityARPlayer 类中。

抱歉,我无法推荐更简单的方法... Android 的 ARToolKit 并没有真正为视频流源提供很大的灵活性。

于 2015-10-31T11:55:18.580 回答
1

是的,我已经做到了。

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

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

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

于 2016-05-14T07:21:42.637 回答
0

或拦截 cameraPreviewFrame(final byte[] data) 并使用正确格式的位图加载数据数组。

于 2017-04-10T01:11:22.960 回答