1

我在使用带有二维条码的 ArCode 时遇到了一些问题。我正在使用 Android 和 ArToolkit。

我识别“Hiro”标记或“汉字”没有问题。有时,artoolkit 会将“0”条形码与“hiro”混淆,但这不是问题,问题是我无法以任何方式识别二维条形码。

这是我的代码:

if (!ARToolKit.getInstance().initialiseNative(this.getCacheDir().getAbsolutePath()) ||
        !ARToolKit.getInstance().initialiseAR(640, 480, "Data/camera_para.dat", 0, false)) {
    Log.e("MainActivity", "errore di inizializzazione");
    return;
}
_markerID = ARToolKit.getInstance().addMarker("single_barcode;0;40");

如果我使用它不算数:

单条码;0;10 ... 单条码;0;80

显然是:

   _markerID = ARToolKit.getInstance().addMarker("single;Data/patt.hiro;10");

有用。

我试过 aldo 来创建一个类似 hiro (patt.hiro) 和 kanji (patt.kanji) 的文件。所以,我创建了一个 code.dat

1

00
40.0
1.0000  0.0000  0.0000    0.0000
0.0000  1.0000  0.0000    0.0000
0.0000  0.0000  1.0000    0.0000

对于“0”条码。

_markerID = ARToolKit.getInstance().addMarker("single;Data/code.dat;40");

同样,如果我使用它也不算数:

单个;数据/code.dat;10 .. 单个;数据/code.dat;80

但又一无所获。

我在android中找不到任何有效的例子,或者任何详尽的手册......

我哪里错了?

4

3 回答 3

4

Android 中 ARToolkit 的 2D Barcode 的使用在任何公共文档中均不可用。但是,如果您直接参考 ARWrapper 源代码。我发现它可以通过 NativeInterface 和 ARToolkit 获得。

这是我在我的 Android 应用程序中使用的一个工作示例

首先,在你的检测初始化中做这样的事情

NativeInterface.arwSetPatternDetectionMode(NativeInterface.AR_MATRIX_CODE_DETECTION);
NativeInterface.arwSetMatrixCodeType(NativeInterface.AR_MATRIX_CODE_3x3_PARITY65);
markerID = ARToolKit.getInstance().addMarker("single_barcode;0;80");

对于二维条码(矩阵码)检测,您必须将图案检测模式设置为AR_MATRIX_CODE_DETECTION。不同矩阵码类型的详细信息,可以参考官方文档。我正在使用来自 github 存储库的 /artoolkit5/doc/patterns 下提供的默认值。

单个条码检测的配置字符串使用以下格式,"single_barcode;<barcode ID>;<Marker Width>".

其余的应该与使用模式标记相同。只是为了澄清目的,在调用ARToolKit.getInstance().convertAndDetect(frame)通常在继承自 ARActivity 的 Activity 之后,您可以ARToolKit.getInstance().queryMarkerVisible(markerID)像往常一样使用它来查询它的可见性。

参考

https://github.com/artoolkit/artoolkit5

于 2015-11-03T07:20:16.213 回答
1

正如我在另一个问题中提到的,资产文件夹中的所有内容都由 ARToolkit 缓存,当您添加新标记时,您需要增加应用程序的版本号或卸载它。

您无需重新编译 NDK 即可添加新标记。

此外,字符串格式非常重要:

默认值为:

_markerID = ARToolKit.getInstance().addMarker("single;Data/patt.hiro;10");

对于您正在使用的标记:

_markerID = ARToolKit.getInstance().addMarker("single_barcode;0;40");

定义标记的字符串应该是:“single;Data/single_barcode;40”

其中(如本页http://www.artoolkit.org/documentation/doku.php?id=4_Android:android_developing中所述)参数的含义是:

  • single 表示它是单个标记
  • Data/single_barcode 是 assets 文件夹中文件的路径(假设你把它放在与 hiro 和 kanji 相同的目录中)
  • 40 是现实世界中标记的大小,以毫米为单位。

我同意 ARToolkit 的文档需要改进。

于 2015-07-30T10:04:19.457 回答
0

谢谢沙拉菲,我试过了,但没有任何反应。我找到了一个日文页面,他们说您必须更改参数并用 C++ 重新编译整个 ArToolkit 才能使其识别二维代码。但是像hiro这样的二维码或Arcode。

有人有更详细的说明吗?

日文页面是这样的:http ://sixwish.jp/ARTK4Android/Wrapper/section03/ (我已经用谷歌翻译器翻译了它)

于 2015-07-31T11:09:35.703 回答