【问题标题】:How to use the onCameraFrame function efficiently by not processing every single frame to increase the fps如何通过不处理每一帧来提高 fps 来有效地使用 onCameraFrame 函数
【发布时间】:2014-01-08 13:10:41
【问题描述】:

我正在开发增强现实 Android 应用程序。当我没有进行任何处理时,我得到了大约 20 帧的 fps,而当我运行我的 ARFilter(设备:ASUS TRANSFORMER PAD TF700T)时,我得到了大约 3 帧的 fps。我分别使用 ORB、FREAK 和 BRUTEFORCE HAMMING 进行检测、描述和匹配。我试图通过 setMaxFrameSize(640, 480); 设置分辨率但我只能增加 1fps。我应该使用计数器吗?当计数器通过“onCameraFrame”函数运行时实际发生了什么。

@Override
    public Mat onCameraFrame(final CvCameraViewFrame inputFrame) {
        final Mat rgba = inputFrame.rgba();

        if (ARFil != null) {
            // if (counter % 10 == 0) {
            ARFil[ARFilInd].apply(rgba, rgba);
            // }

            // addCounter();
        }

        return rgba;
    }


// Added method addCounter()
    /*
     * private void addCounter() { if (counter > 20) { counter = 0;
     * 
     * } counter++;
     * 
     * }
     */

提前致谢:)

【问题讨论】:

  • 我从之前的帖子“并行图像检测和摄像头预览 OpenCV Android”中找到了一个有趣的答案来解决我在上面发布的问题
  • Waqas 我很想看看您从使用 15799487 后得到什么结果。我希望有一些示例代码。
  • 当然,瑞恩。如果我得到任何积极的结果,我会与你分享。

标签: android opencv computer-vision


【解决方案1】:

我知道已经晚了,但如果它可以帮助我有一些假设:

  • 您可能需要进一步减小图片大小;
  • 您可能需要将匹配的特征数量限制在一个较低的阈值;
  • 您可能需要将一些代码转换为 NEON 以实时运行,或者转换为 GPU;
  • 您可能需要更改正在使用的算法,以降低圈复杂度;
  • FREAK 对于实时移动来说不够快,所以我会选择 DAISY 之类的东西;
  • 不知道您是否在构建应用程序时激活了编译器优化,但肯定需要它们(如果您至少使用 C++)。

【讨论】:

  • 非常感谢您的评论。信息量很大。去年,我按照您上面提到的一些步骤设法提高了帧速率。但是,让我将此标记为答案。
最近更新 更多