【问题标题】:How to integrate OpenCV Manager in Android App如何在 Android App 中集成 OpenCV Manager
【发布时间】:2013-12-14 02:08:04
【问题描述】:

我在我的 Android 应用程序中使用 OpenCV2.4.7 库。当应用程序启动时,它会转到名为 OpenCV Manager 的应用程序的 Google Play 商店。有没有办法将此应用程序集成到我的 Android apk 中,因为 我们已经在使用 OpenCV 库,所以为什么应用程序需要再次使用 OpenCV 引擎? 他们有什么方法可以集成这个引擎吗?

【问题讨论】:

  • 谢谢老兄。它有效!
  • 嘿,您找到适用于生产版本的解决方案了吗?在已接受答案的链接中,声明“它主要是为开发目的而设计的。生产代码不推荐使用这种方法,建议发布包通过...与 OpenCV 管理器通信”
  • 这里是一步一步的,用插图说明你应该得到什么:stackoverflow.com/a/35135495/5611377

标签: android opencv


【解决方案1】:

是的。要将 OpenCV 集成到您的应用程序中,并避免显式安装 OpenCV 管理器,您需要先阅读 OpenCV 提供的以下文档。

初读 -> Static Initialization of OpenCV

成功执行步骤后,在调用 OpenCV API 之前,您需要在应用程序初始化代码中编写以下代码以启用 OpenCV。例如,可以在 Activity 类的静态部分中完成:

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}

参考资料:

  1. http://answers.opencv.org/question/2033/use-opencv-on-android-without-manager/
  2. Static Initialization on OpenCV Android

编辑

根据 Document 中的新场景,感谢 @rozhok 提供新信息,initDebug() 方法不能用于生产构建

注意此方法已被生产代码弃用。它仅用于实验和本地开发目的。如果您想通过异步初始化发布您的应用使用方法。

您需要使用以下方法

语法

static boolean initAsync(String Version, Context AppContext, LoaderCallbackInterface Callback)

示例

public class Sample1Java extends Activity implements CvCameraViewListener {

    private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
        @Override
        public void onManagerConnected(int status) {
            switch (status) {
                case LoaderCallbackInterface.SUCCESS:
                {
                    Log.i(TAG, "OpenCV loaded successfully");
                    mOpenCvCameraView.enableView();
                } break;
                default:
                {
                    super.onManagerConnected(status);
                } break;
            }
        }
    };

    @Override
    public void onResume()
    {
        super.onResume();
        OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_6, this, mLoaderCallback);
    }

    ...
}

参考文献

  1. http://docs.opencv.org/doc/tutorials/introduction/android_binary_package/dev_with_OCV_on_Android.html

【讨论】:

  • 为什么不建议将此方法用于生产用途(根据文档)?
  • 你试过了吗?我试过了,它要求我下载 OpenCV 管理器,这对我来说是不可接受的。
  • @ChintanRathod:这种方法(使用异步初始化)专门用于在设备上找不到 OpenCV 管理器时调用它。所以这不是“将opencv捆绑到应用程序中”的解决方案。我已经尝试过旧的已弃用方式,效果很好。
  • 那么这是否适用于使用 initDebug 方法而不是 initAsync 的生产应用程序?我在这方面发现了相互矛盾的信息。我不希望我的用户在运行应用程序时被提示安装 OpenCV 管理器,并且希望为应用程序提供所有需要的库和东西。 initDebug 是否适用于生产环境?
【解决方案2】:

这是文档中关于 OpenCV Manager 安装的说明:

apk 文件夹包含应安装在目标 Android 设备上的 Android 软件包,以通过 OpenCV Manager API 启用 OpenCV 库访问(请参阅下面的详细信息)。

在可以访问 Google Play Market(和 Internet)的生产设备上,这些包将在使用 OpenCV Manager API 的应用程序首次启动时从 Market 安装。

...

注意:最好从 Internet 安装,因为 OpenCV 团队可能会在市场上发布此软件包的更新版本。

您可以在此处阅读更多信息:https://docs.opencv.org/3.0-beta/doc/tutorials/introduction/android_binary_package/O4A_SDK.html#general-info

【讨论】:

    【解决方案3】:
    1. 在 OpenCV.mk 文件中的 include $ (CLEAR_VARS) 之后插入此行
      OPENCV_CAMERA_MODULES:=on
      OPENCV_INSTALL_MODULES:=on
      include D:/opencv_with/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
      
    2. 在当前项目目录的 libs 文件夹中,复制 OpenCV 库中的所有文件夹。

    3. 添加到您的活动中

      if (!OpenCVLoader.initDebug()) {
                  Log.d("ERROR", "Unable to load OpenCV");
              } else {
                  mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
              }
      
      private BaseLoaderCallback mLoaderCallback = new BaseLoaderCallback(this) {
      
              @Override
              public void onManagerConnected(int status) {
                  switch (status) {
                  case LoaderCallbackInterface.SUCCESS: {
      
                      //Your opencv Operation code
      
                  }
                  }
              }
          };
      

    【讨论】:

      【解决方案4】:

      只需评论以下代码中的行

      @Override
      public void onResume()
      {
          super.onResume();
          //OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
      
      }
      

      【讨论】:

        猜你喜欢
        • 2012-09-05
        • 2017-12-09
        • 1970-01-01
        • 2015-02-18
        • 2023-03-14
        • 1970-01-01
        • 2021-08-02
        • 2023-03-10
        相关资源
        最近更新 更多