ArToolkit、Android和2D标记
我在使用带有二维条形码的ArCode时遇到了一些问题。 我正在使用Android和ArToolkit 我识别“Hiro”标记或“kanji”没有问题。 有时,artoolkit会将“0”条形码与“hiro”混淆,但这不是问题所在,问题在于我无法以我尝试过的任何方式识别二维条形码 这是我的代码:ArToolkit、Android和2D标记,android,android-studio,java-native-interface,artoolkit,Android,Android Studio,Java Native Interface,Artoolkit,我在使用带有二维条形码的ArCode时遇到了一些问题。 我正在使用Android和ArToolkit 我识别“Hiro”标记或“kanji”没有问题。 有时,artoolkit会将“0”条形码与“hiro”混淆,但这不是问题所在,问题在于我无法以我尝试过的任何方式识别二维条形码 这是我的代码: if (!ARToolKit.getInstance().initialiseNative(this.getCacheDir().getAbsolutePath()) || !ARTool
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;八十
显然,与之相反:
_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");
同样,如果我使用:
单一的;数据/代码.dat;10
..
单一的;数据/代码.dat;八十
但还是什么都没有
我在android中找不到任何有效的例子,也找不到任何有说服力的手册
我错在哪里 正如我在另一个问题中提到的,资产文件夹中的所有内容都由ARToolkit缓存,当您添加新标记时,您需要增加应用程序的版本号或卸载它 您不需要重新编译NDK来添加新标记 此外,字符串格式非常重要: 默认值为:
_markerID = ARToolKit.getInstance().addMarker("single;Data/patt.hiro;10");
对于您正在使用的标记:
_markerID = ARToolKit.getInstance().addMarker("single_barcode;0;40");
定义标记的字符串应为:
“单个;数据/单个条形码;40”
其中(如本页所述)参数指:
- single表示它是一个标记
- Data/single_barcode是资产文件夹中文件的路径(假设您将其与hiro和kanji文件放在同一目录中)
- 40是现实世界中标记的大小,单位为毫米
我同意ARToolkit的文档需要改进。正如我在另一个问题中提到的,资产文件夹中的所有内容都由ARToolkit缓存,当您添加新标记时,您需要增加应用程序的版本号或卸载它 您不需要重新编译NDK来添加新标记 此外,字符串格式非常重要: 默认值为:
_markerID = ARToolKit.getInstance().addMarker("single;Data/patt.hiro;10");
对于您正在使用的标记:
_markerID = ARToolKit.getInstance().addMarker("single_barcode;0;40");
定义标记的字符串应为:
“单个;数据/单个条形码;40”
其中(如本页所述)参数指:
- single表示它是一个标记
- Data/single_barcode是资产文件夹中文件的路径(假设您将其与hiro和kanji文件放在同一目录中)
- 40是现实世界中标记的大小,单位为毫米
我同意ARToolkit的文档需要改进。谢谢Shalafi,我已经尝试过了,但没有任何效果。 我发现了一个日文页面,他们说你必须改变一个参数并重新编译C++中的整个ArToolkit,以便让它识别2D代码。 但是像hiro这样的ora 2d代码或Arcode 有人有更详细的说明吗 日文版如下:
(我已经用谷歌翻译工具翻译过了)谢谢沙拉菲,我已经试过了,但什么也没发生。 我发现了一个日文页面,他们说你必须改变一个参数并重新编译C++中的整个ArToolkit,以便让它识别2D代码。 但是像hiro这样的ora 2d代码或Arcode 有人有更详细的说明吗 日文版如下:
(我已经用google translator翻译过了)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");
对于二维条码(矩阵代码)检测,必须将模式检测模式设置为AR\u Matrix\u code\u detection
。有关不同矩阵代码类型的详细信息,请参阅官方文档。我使用的是github存储库中/artoolkit5/doc/patterns下提供的默认值
单个条形码检测的配置字符串使用以下格式,“single_barcode;;”
其余部分应与使用模式标记相同。为了澄清起见,在调用从ARActivity继承的活动中的ARToolKit.getInstance().convertAndDetect(frame)
之后,您可以像往常一样使用ARToolKit.getInstance().queryMarkerVisible(markerID)
查询它的可见性
参考资料
在任何公共文档中都没有关于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");
对于二维条码(矩阵代码)检测,必须将模式检测模式设置为AR\u Matrix\u code\u detection
。有关不同矩阵代码类型的详细信息,请参阅官方文档。我使用的是github存储库中/artoolkit5/doc/patterns下提供的默认值
单个条形码检测的配置字符串使用以下格式,“single_barcode;;”
其余部分应与使用模式标记相同。为了澄清起见,在调用从ARActivity继承的活动中的ARToolKit.getInstance().convertAndDetect(frame)
之后,您可以像往常一样使用ARToolKit.getInstance().queryMarkerVisible(markerID)
查询它的可见性
参考资料
我个人赞成让NDK单独行动。我已经成功地将jPCT AE链接到ARToolkit,但在编写deta之前,我仍然需要解决一些偏移问题