首页 文章

如何在也使用OpenCV的项目中使用Wikitude?

提问于
浏览
6

我们无法让Wikitude在Xamarin跨平台项目(Android和iOS)中工作,该项目也使用OpenCV .

安装程序

Xamarin跨平台项目使用MvvmCross进行以下设置:

  • 核心项目,PCL提供视图模型,业务逻辑和平台无关的逻辑 .

  • OpenCV.Droid,绑定项目,为Android部分提供OpenCV .

  • Android库(AAR),由官方OpenCV SDK for Android创建 .

  • OpenCV.iOS,绑定项目使用P / Invoke将OpenCV提供给iOS部件 .

  • 拥有静态库项目 .

  • 包括官方OpenCV SDK for iOS的静态库,它只是一个Apple Framework(结合了静态库和头文件) .

  • 通过自己的API公开OpenCV功能,以最大限度地减少编组代码的数量 .

  • UI.Droid,提供视图和平台特定逻辑的Android平台项目 .

  • UI.iOS,提供视图和平台特定逻辑的iOS平台项目 .

我们的ARchitectWorld使用对象跟踪,并且可以在Android和iOS的Xamarin组件中包含的Wikitude示例中成功进行测试 .

问题

在我们的iOS项目中启动ARchitectWorld时,世界已加载,我们在创建 TargetCollectionResource 时收到 onLoaded -callback,在创建 ObjectTracker 时收到 onTargetsLoaded -callback . 到目前为止,Wikitude的示例项目以及我们的项目中的行为是相同的 .

问题是,使用相同WTO文件的同一对象在我们的项目中没有被识别,而它在示例项目中工作得很好 .

调查

当问题发生时,我们简化了处理ARchitectWorld的ViewController中的逻辑,以排除我们代码中的问题 .

然后我们通过将ARchitectWorld添加到我们repo历史中的不同提交中来调查我们的项目,我们认为这些提交是关键更改并且发现了提交,对象跟踪正在进行中 .

为了找到关键的变化,我们使用了git-bisect并确定了引入问题的提交 . 通过该提交,我们的OpenCV绑定项目的静态库已更新,因为它缺少设备架构 - 它只有模拟器拱,基本上是x86_64 .

在那之后,我们假设,Wikitude可能会在内部使用OpenCV,我们可能会发生符号冲突,即使链接器没有抱怨重复的符号 . 虽然,Wikitude不使用OpenCV,但搜索Wikitude和OpenCV的组合使用会带来一些没有解决方案的结果:

然后我们发现,Wikitude和OpenCV都包含部分相同的第三方代码 .

问题

在链接的帖子中,Wikitude支持非常公开地回答,建议进行内部讨论并回到OP . 虽然线程中没有进一步的答案,但表明没有答案或信息已通过另一个渠道进行交换 .

在其他帖子中,我们看到了将OpenCV与Wikitude一起使用的建议,即准备可视化数据并将其提供给输入插件 . 这表明,OpenCV和Wikitude可以一起使用 .

  • 可以,如果,如何在我所描述的Xamarin项目中实现这一目标?

  • 是否需要特定版本的OpenCV? (我们目前正在使用v3.3.1 . )

也许社区也实现了这一点,我非常期待有关这方面的答案 . 我们还联系了Wikitude支持,如果我们收到任何有助于回答问题的信息,我们会在这里提供反馈信息 .

1 回答

  • 1

    我们终于有了一个使用Wikitude和OpenCV的工作应用程序 . 虽然我们无法清楚地确定根本原因 . 导致工作解决方案的步骤如下:

    • 使用构建脚本 build_framework.py--without 参数,仅使用我们需要的模块从源构建OpenCV,以减少可能的冲突量 . 无论如何,这是错误的,因为在本机链接期间二进制文件被剥离并且没有出现错误 .

    • 使用可下载的v3.3.1源代码执行此操作,我们一直在使用的OpenCV版本,在编译Xamarin项目时,在本机链接期间遇到了符号问题 .

    • 这导致了OpenCV中的一个问题,刚刚修复了这个问题(2018-01-10):https://github.com/opencv/opencv/issues/10565
      (我们没有使用 --dyanmic 构建,在本机链接期间仍然遇到错误在编译Xamarin项目时 . )

    • 从GitHub上的当前主服务器构建OpenCV(提交 17233c687e2d51010dab2587f2532a460ccdb4b6 ,超出v3.4.0的内容)结果是工作而不是破坏Wikitude:https://github.com/opencv/opencv

    • 使用可下载的OpenCV Framework for iOS(v3.4.0)在本机链接期间导致了同样的问题 .

    TL; DR

    从GitHub上的源代码构建OpenCV,至少提交 17233c687e2d51010dab2587f2532a460ccdb4b6 结果不会破坏Wikitude .

    我们将看看OpenCV下一版本的可下载iOS框架,看看它是否有效并返回使用它,而不是自己构建OpenCV .

相关问题