【问题标题】:Trouble using OpenCV in Android在 Android 中使用 OpenCV 时遇到问题
【发布时间】:2019-08-22 11:12:33
【问题描述】:

我使用A Beginner’s Guide to Setting up OpenCV Android Library on Android Studio 作为在 Android Studio 项目中设置 OpenCV 的指南。我已经在我的手机上构建和安装了该项目,但我没有从摄像头获得视频源(即JavaCameraView 为空)。

主要问题似乎是 OpenCV Manager 已从 google play 商店中删除。 :,(

我已经尝试了this SO question 中的解决方案来尝试使用 opencv 而无需将其从 Play 商店中删除,但这也无济于事。

我拥有在我的应用上使用相机所需的所有权限。

我的代码与初学者指南教程中的代码非常相似,但如果您需要查看我的更多代码,请告诉我。

我的简历:

public override fun onResume() {
    super.onResume()
    if (!OpenCVLoader.initDebug()) {
        OpenCVLoader.initDebug()
    }
    loaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS)
}

BaseLoadCallback:

private val loaderCallback = object : BaseLoaderCallback(this) {
    override fun onManagerConnected(status: Int) {
        when (status) {
            LoaderCallbackInterface.SUCCESS -> {
                Log.i(TAG, "OpenCV loaded successfully")
                opencv_camera_view.enableView()
                opencv_camera_view.setOnTouchListener(this@MainActivity)
            }
            else -> {
                super.onManagerConnected(status)
            }
        }
    }
}

【问题讨论】:

  • 您使用的是哪个版本的 OpenCv?
  • 我正在使用 Android 包的 4.1.1 版本:opencv.org/releases
  • 我在设置 OpenCv 4.1.1 Android 版本时也遇到了麻烦,说明在 4.1.0 版本上工作。您是否设法使其适用于 4.1.0?
  • 是的,我已经添加了我为使其工作而采取的步骤作为下面的答案。祝你好运:)
  • @vSomers 你也可以看看我的问题,也许你可以帮助question

标签: android opencv kotlin


【解决方案1】:

这些是对我有用的步骤。

  1. 进入 OpenCV 发布页面并点击当前版本部分的 Android 包链接 (https://opencv.org/releases.html)。我用的是 4.1.1
  2. 解压名为 opencv--android-sdk 的文件
  3. 在 Android Studio 中,转到 File > New > Import Module... 并选择 /sdk 并等待同步完成。
  4. 包含 open-cv 作为模块依赖项。文件 -> 项目结构。
  5. 选择项目模块(不是我们在步骤3中添加的open-cv模块)
  6. 将 opencv 添加为模块依赖项。
  7. 检查 build.gradle 文件是否已添加为依赖项。
  8. 清理并构建项目。

注意事项

  • 不要像大多数教程建议的那样导入 /sdk/java。
  • 您不必像大多数教程建议的那样将本机库复制到您的项目中。

导入 OpenCV 后,使用 this 教程获取预览以填充预览窗口。

然后使用this 版本的JavaCamera2View。 JavaCamera2View 使用 camera2 api。

这些是对我有用的步骤,如果我做错了什么,很高兴得到纠正。

祝你好运:)

【讨论】:

  • 我确实做到了,OpenCVLoader.initDebug(); 向我展示了成功。但在 JavaCameraView 中没有加载图像。 System.loadLibrary("native-lib"); 也显示找不到“libnative-lib.so”。你能帮忙吗?
  • 您需要使用 camera2 api,我已链接到适用于我的 JavaCamera2View 类版本。让我知道是否为您工作。
  • 不走运。您可以分享您的代码或查看我的代码吗?顺便说一句,我使用的是 4.5.0。我会尝试 4.1.1
  • 很高兴看到您的代码,但我认为我无法提供帮助,因为我已经一年多没有在 Android 或 Java 上工作了。这些天我使用 Flutter 来满足我所有的前端需求。
  • 我已将问题添加到堆栈中,请检查并提出建议。 Question
【解决方案2】:

我用这个方法设置opencv 4.1.0。这也应该适用于 4.1.1。

  1. 下载opencv并解压
  2. 从android studio,file -> new module -> gradle project,选择包含build.gradle文件的sdk目录
  3. 添加它作为我们“app”模块的依赖模块
  4. 在调用 opencv api 的片段/活动上,添加

if (!OpenCVLoader.initDebug()) {
    OpenCVLoader.initDebug()
}

在 onResume 或 onCreateView 生命周期钩子上(示例使用 onResume 但我在onCreateView 上使用它没有遇到任何问题)

更新1.如何检查opencv是否安装正确

  1. 解压库后,我们有两个文件夹,sdksamples
  2. 转到samples 文件夹并将其.java 和.xml 文件从color-blob-detection(此示例实现JavaCameraView)文件夹复制到我们的空白项目。我认为这比完全导入样本要快。
  3. 不要忘记复制清单文件。它添加了相机权限。该示例没有实现运行时权限,因此现在只需从设置 -> 应用程序 -> 权限手动切换它。

注意:阅读build.gradle 文件以获取更多设置配置。例如。拆分apk、ndk支持等

【讨论】:

  • 嗨,这就是我所做的。你能想到我可能错过的任何事情吗?
  • 也许可以尝试做一些简单的事情,比如灰度化并将其显示给 imageview,以确保 opencv 已正确设置
  • 我以前从未在安卓上使用过 OpenCV,你有一个教程链接,该教程显示了如何在安卓中使用 OpenCV 进行灰度化?
猜你喜欢
  • 2015-01-14
  • 2017-04-24
  • 1970-01-01
  • 1970-01-01
  • 2014-11-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多