我在使用带有二维条形码的ArCode时遇到了一些问题。 我使用的是Android和ArToolkit。
我没有问题识别" Hiro"标记或" kanji"。 有时,artoolkit会混淆" 0"使用" hiro"条形码,但这不是问题,问题是我无论如何都无法识别2D条形码。
这是我的代码:
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");
如果我使用它,它不算数:
single_barcode; 0; 10 ... single_barcode; 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中使用此功能的任何有效示例,或任何详尽的手册...
我哪里错了?
答案 0 :(得分:4)
Android中的ARToolkit 2D条形码的使用在任何公共文档中都不可用。但是,如果直接引用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");
对于2D条形码(矩阵代码)检测,您必须将模式检测模式设置为AR_MATRIX_CODE_DETECTION
。有关不同矩阵代码类型的详细信息,请参阅官方文档。我正在使用github存储库中/ artoolkit5 / doc / patterns下提供的默认值。
单条形码检测的配置字符串使用以下格式"single_barcode;<barcode ID>;<Marker Width>"
。
其余部分应与使用模式标记相同。仅用于澄清目的,在调用通常位于您的活动中的ARToolKit.getInstance().convertAndDetect(frame)
之后,您可以像往常一样使用ARToolKit.getInstance().queryMarkerVisible(markerID)
来查询它的可见性。
<强>参考强>
答案 1 :(得分:1)
正如我在另一个问题中提到的,ARToolkit缓存了资产文件夹中的所有内容,当您添加新标记时,您需要增加应用程序的版本号或卸载它。
您无需重新编译NDK即可添加新标记。
此外,字符串格式非常重要:
默认值为:
_markerID = ARToolKit.getInstance().addMarker("single;Data/patt.hiro;10");
您正在使用的标记:
_markerID = ARToolKit.getInstance().addMarker("single_barcode;0;40");
定义标记的字符串应为: “单;数据/ single_barcode; 40”
其中(如本页http://www.artoolkit.org/documentation/doku.php?id=4_Android:android_developing中所述)参数意味着:
我同意ARToolkit的文档需要改进。
答案 2 :(得分:0)
谢谢Shalafi,我已经尝试但没有任何事情发生。 我找到了一个日文页面,他们说你必须更改参数并在C ++中重新编译整个ArToolkit,以便识别2d代码。 但是ora 2d代码或Arcode就像hiro。
有人提供更详细的说明吗?
日文页面为:http://sixwish.jp/ARTK4Android/Wrapper/section03/ (我用谷歌翻译翻译了它)