如何在 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 中集成 PayU 货币网关? [关闭]
如何在 Android 应用程序中集成 Google Analytics