2

我正在 Android 手机上开发一个图像处理应用程序,预计将 24/7 运行。我设法做到了以下几点:

  • 使用 Camera2 接口获得更好的 fps。
  • 抓取原始帧,使用渲染脚本转换为 rgb,并在后台服务中使用 opencv 进行图像处理(无预览)。在 LG G4 上以 1280x960 转换为 rgb 后,我得到了大约 20fps。

所以我的问题是:

  • 我还需要优化什么以最小化内存和 CPU 使用率吗?
  • 该应用程序是否有可能 24/7 全天候运行?将所有相机操作和处理委派给后台服务是否足以让它 24/7 运行?当我让它运行时,我仍然能感觉到来自相机及其周围区域的热量。

任何建议将不胜感激。谢谢。

更新 1

该应用程序使用 Camera2 界面在 LG G4 上运行,并在屏幕关闭的情况下在后台进行图像处理,过热并且手机在几个小时后自行关闭。我能做些什么来克服这个问题?

4

3 回答 3

1

关于第二个问题。我认为该应用程序无法 24/7 运行,因为手机会因发热而自行关闭。

于 2017-03-21T16:52:01.503 回答
1

在回答您的问题之前,我必须说我也是 android 图像处理的新手(但不是图像处理领域)。

对于问题一:
可能是的。因为图像处理任务需要大量内存,您可能需要优化您的应用程序以避免内存泄漏(即使 android 运行时执行例行垃圾收集)。检查以下链接

链接一

可能有用

当涉及到像素级操作时(当您避免使用 opencv 的内置函数或您正在使用的任何库并手动访问和处理像素时)它会太慢。我是根据我在笔记本电脑上的经验这么说的。希望您将 opencv 用于您的应用程序,只需查看以下 opencv 站点(它适用于 python,但您可以理解)

从中汲取灵感

还有这个答案:所以答案

我记得的一个提示:尽量减少 Mat 变量复制(将 Mat 对象复制到其他 Mat 对象)

问题二:
我将使用 user7746903 给出的答案。该答案还与您的后台应用程序将消耗的内存相关联。将有更多的内存密集型应用程序在后台运行,所以这取决于。谢谢你。

于 2017-03-22T06:12:51.537 回答
0

对于第一个问题:我觉得值得一提的是,你应该尽可能地绕过java。IE。使用 Java 作为界面层,然后使用 JNI C 作为调用循环。

例如:从 camera2 获取纹理 > 为 C 函数提供纹理 > 从 C 和其他处理函数调用渲染脚本/计算着色器 > 调用 java 函数以渲染到屏幕。

这可以提高 CPU 性能并减少内存警告(尤其是在快速分配和释放内存时)。

于 2018-05-24T01:50:18.770 回答