如何在Android应用程序中集成OpenCV管理器

如何在Android应用程序中集成OpenCV管理器,android,opencv,Android,Opencv,我在Android应用程序中使用OpenCV2.4.7库。当应用程序启动时,它会转到名为OpenCV Manager的应用程序的Google Play商店。因为我们已经在使用OpenCV库,所以有没有办法将这个应用程序集成到我的Android apk中呢?为什么应用程序再次需要OpenCV引擎呢?他们有没有办法集成这个引擎?有。要在应用程序中集成OpenCV,并避免显式安装OpenCV管理器,您需要首先阅读OpenCV提供的以下文档 第一次读取-> 在成功执行步骤之后,在调用OpenCV API

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

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

第一次读取->

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

static {
    if (!OpenCVLoader.initDebug()) {
        // Handle initialization error
    }
}
参考文献:

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

    注意:对于生产代码,不推荐使用此方法。它仅为实验和本地开发目的而设计。如果您想发布应用程序,请使用异步初始化方法

    为此,您需要使用以下方法

    语法

    示例

    参考资料


  • 只需注释以下代码中的行即可

    @Override
    public void onResume()
    {
        super.onResume();
        //OpenCVLoader.initAsync(OpenCVLoader.OPENCV_VERSION_2_4_3, this, mLoaderCallback);
    
    }
    
  • 在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
    
  • 在当前项目目录libs文件夹中,复制OpenCV libs中的所有文件夹

  • 加入你的活动

    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
    
                }
                }
            }
        };
    

  • 以下是文档中关于OpenCV Manager安装的说明:

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

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

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


    你可以在这里阅读更多信息:

    谢谢你,伙计。它起作用了!嘿,你找到适合生产版本的解决方案了吗?在接受的答案中的链接中指出,“它主要是为开发目的而设计的。这种方法对于生产代码是不推荐的,建议发布包通过…”与OpenCV Manager通信。”这里是一种逐步的方式,用插图说明你应该得到什么:为什么不推荐这种方法用于生产(根据文档)?你试过了吗?我已经试过了,但它要求我下载OpenCV管理器,这对我来说是不可接受的。@ChintanRathod:这种方法(使用async init)用于在设备上找不到OpenCV管理器时调用它。因此,它不是“将opencv捆绑到应用程序”的解决方案。我已经尝试了一种很好的旧的不推荐的方法,它工作得很好。那个么使用initDebug方法而不是initAsync在生产应用程序上工作吗?我在这方面发现了相互矛盾的信息。我不想让我的用户在运行应用程序时被提示安装OpenCV Manager,我想在应用程序中附带所有需要的库和内容。initDebug在生产环境中工作吗?
    OPENCV_CAMERA_MODULES:=on
    OPENCV_INSTALL_MODULES:=on
    include D:/opencv_with/OpenCV-2.4.10-android-sdk/sdk/native/jni/OpenCV.mk
    
    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
    
                }
                }
            }
        };