如何在 Android App 中集成 OpenCV Manager

Posted

技术标签:

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

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

【问题讨论】:

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

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

初读 -> Static Initialization of OpenCV

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

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

参考资料:

    http://answers.opencv.org/question/2033/use-opencv-on-android-without-manager/ 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);
    

    ...

参考文献

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

【讨论】:

docs.opencv.org/doc/tutorials/introduction/… 为什么不建议将此方法用于生产用途(根据文档)? 你试过了吗?我试过了,它要求我下载 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】:
    在 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 库中的所有文件夹。

    添加到您的活动中

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


【讨论】:

以上是关于如何在 Android App 中集成 OpenCV Manager的主要内容,如果未能解决你的问题,请参考以下文章

如何在 android 4.3 中集成 paypal?

Android:如何在应用程序中集成admob?

如何在 Android 中集成 PayU 货币网关? [关闭]

如何在 Android 应用程序中集成 Google Analytics

如何在我的 Android 应用程序中集成 Quick Blox 视频聊天服务?

如何在 Android 应用程序中集成 BHIM 应用程序支付网关?