首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从性能上讲,完全通过NDK而不是通过Java来做OpenGL+OpenCV值得吗?

从性能上讲,完全通过NDK而不是通过Java来做OpenGL+OpenCV值得吗?
EN

Stack Overflow用户
提问于 2015-04-21 23:19:43
回答 1查看 909关注 0票数 0

我即将开始一个增强现实项目,将涉及使用爱普生莫维奥AR眼镜或类似的。假设我们使用这些眼镜,它们将运行在Android4.0.4-API 15上。该应用程序将涉及视频(来自眼镜摄像机的帧)的几乎实时分析,以便使用标记进行特征检测/跟踪,并在“真实世界”中根据标记覆盖3d对象。

到目前为止,在技术方面,看起来我们要处理的是:

  1. API 15
  2. OpenCV
  3. OpenGLES2

考虑到上述情况,我想知道是否值得通过NDK使用一个带有NativeActivity代码的android_native_app_glue来完成这些工作。当我说“值得”的时候,我的意思是表现明智。

当然,在C/C++方面这样做具有这样的优势,即代码可以通过最小的修改移植到其他环境中。但是OpenCV确实有用于安卓的Java绑定,而且GL也可以在一定程度上从Java中使用。因此,我只是在想,从性能上看,这是否值得,或者它将与使用GLSurfaceView的情况大致相同。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-22 01:02:35

我在增强现实领域工作。我看到的绝大多数应用程序都是本地的。谷歌建议避免使用原生应用程序,除非收益是绝对必要的。我认为AR是少数几个有必要的案例之一。我知道的好处是:

  1. 本机相机访问将允许您获得更高的捕获框架。将数据传递给Java层会大大减慢速度。即使是OpenCV的非本地捕获在Java中也可能更慢,因为OpenCV主要维护本机对象中的数据。捕获帧是限制您能够为对象更新姿态信息的速度的一个限制因素。不过,请注意,OpenCV的本机相机将无法在运行高通MSM优化的android分叉的设备上工作 -这包括许多Snap巨龙设备。
  2. 在Java中,对OpenGL方法的每一次调用都需要花费大量的成本,而且它们还会执行相当多的额外检查。查看GLES20.cpp,它包含GLES20类的方法的本机实现。您将看到通过使用本机调用可以绕过相当多的逻辑。在大多数移动应用程序中,这是很好的,但是3D渲染通常从绕过这些检查和JNI开销中获得显著的好处。这是更重要的在AR,因为你将已经与简历处理系统淹没。
  3. 您很可能希望在本机中使用与检测相关的代码。如果您希望看到本机检测性能与OpenCV检测性能之间的差异,则可以使用OpenCV示例。前者将使用较少的资源,并更加一致。使用本机应用程序意味着您可以调用您的本机函数,而无需支付将大量数据从Java传递给本机的成本。
  4. 本机传感器访问效率更高,而且由于缺少垃圾收集和JNI,本机的访问速度更一致。这是相关的,如果您将使用IMU数据有趣的方式。

您可能能够构建一个非本机应用程序,它的大部分代码都是本机代码,并且尽管基于Java运行良好,但它要困难得多。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29784894

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档