IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 移动开发 -> 关于Android端引入OpenCVSDK并运行face-detection示例步骤 -> 正文阅读

[移动开发]关于Android端引入OpenCVSDK并运行face-detection示例步骤

由于要做一个Android端人脸检测的功能需要用到OpenCV
通过安装相应版本的SDK后,里面刚好有一个face-detection的示例程序,通过新建项目并将该示例项目下文件移入app/src/main目录下
在这里插入图片描述

目录结构如下:
在这里插入图片描述

再将OpenCVSDK包中的sdk文件夹复制粘贴到项目根目录下并重命名为opencv,在这里插入图片描述
然后在项目根目录下的settings.gradle文件中加入opencv,
在这里插入图片描述
而后再点击gradle出现如下问题,将下述错误提示92行处注释即可在这里插入图片描述
此时再gradle后会显示build成功在这里插入图片描述
但是app/src/main/java目录下之前复制过来的java文件却提示报错,原因是因为虽然opencv的SDK已经引入到项目中,但是当前app中尚未引入OpenCV,引入方式如下

点击右上角project structure(也可点击左上角File-project structure)
在这里插入图片描述
project structure内容如下在这里插入图片描述
ps:没有第三个Module Dependency选项是因为上步settings.gradle文件中没有加入include ‘:opencv’

上述第四步点击完后会出现如下弹框
在这里插入图片描述
点击完OK后当前弹框关闭并重新回到Project Structure界面,点击Apply稍等后点击OK关闭当前窗口,关闭后会自动gradle,此时依然是成功状态
在这里插入图片描述
与此同时上述java文件中的报错也已消息,说明此时SDK引入到app成功
在这里插入图片描述
而后再来尝试运行face-detection示例,
在这里插入图片描述
此时在项目中打开该文件会出现如下问题在这里插入图片描述
这是因为上述文件中第三行package的值并非当前项目,进行如下更改
在这里插入图片描述
更改完成后点击run按钮尝试将当前app发布到设备端,出现如下错误

Manifest merger failed : android:exported needs to be explicitly specified for <activity>. Apps targeting Android 12 and higher are required to specify an explicit value for `android:exported` when the corresponding component has an intent filter defined. See https://developer.android.com/guide/topics/manifest/activity-element#exported for details.

在这里插入图片描述
再回到上述AndroidManifest.xml文件中,在activity中添加exported=“true”配置在这里插入图片描述
此时再点击右上角run按钮后成功发布到设备端,但是打开会有闪退现象
在这里插入图片描述
在运行状态下多次点击设备端已安装的app会出现如下错误,提示libdetection_based_tracker.so没找到
在这里插入图片描述
后通过查找资料,有文章说是因为当前调试设备的cpu与配置文件内的cpu型号不一致,导致该so文件找不到,于是通过调试找到当前设备的cpu型号
打开cmd命令窗口,输入adb shell getprop ro.product.cpu.abi命令查看当前调试设备的cpu类型
在这里插入图片描述
然后回到项目中更改jni目录下的Application.mk文件
在这里插入图片描述
更改完成后依然存在上述报错,偶然通过查看Android.mk文件后发现有些配置对于引入的OpenCVSDK文件命名为sdk而非opencv
在这里插入图片描述
ps:此处有两点需要更改,除了更改sdk为opencv外对于第二处路径也需调整,改完后如下
在这里插入图片描述
更改完成后再次gradle后出现如下错误在这里插入图片描述
点击最上方标题,查看完整报错信息
在这里插入图片描述
发现虽然已经将Android.mk文件里的sdk替换为opencv但还是有一些看不见的配置文件中路径为sdk而非自己命名的opencv,于是将引入的SDK包名称改为sdk并将Android.mk中相关配置也改为sdk
在这里插入图片描述
同时将app/build.gradle文件中加入如下配置在这里插入图片描述

android {
    compileSdk 32
    buildToolsVersion "33.0.0"

    defaultConfig {
        ...
        externalNativeBuild {
            cmake {
                arguments "-DOpenCV_DIR=" + project(':sdk').projectDir + "/native/jni",
                        "-DANDROID_TOOLCHAIN=clang",
                        "-DANDROID_STL=c++_shared"
                targets "detection_based_tracker"
            }
        }
    }

    ...
    
    externalNativeBuild {
        cmake {
            path 'src/main/jni/CMakeLists.txt'
        }
    }
}

更改完成后点击gradle后编译成功
在这里插入图片描述
再次点击run按钮将APP发布到设备端,又出现了闪退的问题,同样在运行状态下多次点击后控制台出现错误提示
在这里插入图片描述
进入到jni目录下更改如下文件
在这里插入图片描述
在这里插入图片描述

如下即为上述需要替换的词的由来
在这里插入图片描述
替换前:在这里插入图片描述
替换后:
在这里插入图片描述
以同样方式替换DetectionBasedTracker_jni.h文件,全部替换完成后在点击run按钮将APP重新发布到设备端

在这里插入图片描述
设备端成功打开并检测到人脸信息。

总结:
1、首次使用时由于不熟悉曾查找运行face-detection的相关文章,如下,但是时间都比较久了,因此出现许多(包含AS编辑器、OpenCV、ndk、gradle等)版本语音导致的运行错误
https://www.cnblogs.com/grufield/p/7082130.html#!comments

https://blog.csdn.net/zengxyuyu/article/details/52303659
这是相对操作较完整的两篇文章,但是由于时间太久现在按步骤操作后出现许多问题
如:

java.lang.UnsatisfiedLinkError: dlopen failed: library "libdetection_based_tracker.so" not found

face datection java.lang.UnsatisfiedLinkError: dlopen failed: library "libde

Unable to determine application id: com.android.tools.idea.run.ApkProvisionE...

Cannot resolve external dependency androidx.appcompat:appcompat:1.2.0 becaus...

app\build\intermediates\compile_and_runtime_not_namespaced_r_class_jar\debug...

opencv has leaked window DecorView@c4a9fa4[OpenCV is not ready] that was ori...

Minimum supported Gradle version is 7.0.2. Current version is 6.8.3....

Manifest merger failed : android:exported needs to be explicitly specified f...

Process 'command 'C:\Users\Administrator\Android\ASDK\SDK\ndk\16.1.4479499\ndk-build.cmd'' finished with non-zero exit value 2

face datection java.lang.UnsatisfiedLinkError: dlopen failed: library "libde

OpenCV error: Cannot load info library for OpenCV

java.nio.file.FileSystemException...

face detection error "OpenCV 4.x+ requires enabled C++11 support...

以及安装到设备端后提示缺少OpenCVManager无法打开问题

ps:有些问题是因为运行中版本原因造成的错误,有些问题是因为进行ndk编译时引起的错误。

2、可能在之前OpenCV版本中引入SDK后需要再进行ndk编译才能正常使用,但是目前(OpenCV4.5.4)引入后无需进行ndk编译;

3、由于版本问题造成一大堆问题,本篇文章中使用的AS版本为北极狐版本,OpenCV版本为4.5.4(最开始使用4.6.0版本按其他文章进行ndk编译引出"OpenCV 4.x+ requires enabled C++11 support...错误,于是下载2.x以及3.x均由于各种问题无法正常运行);

4、推荐查看自己AS版本发布日期,再去OpenCV官网下载AS版本发布后一段时间的版本,也需不同AS版本可以兼容多个OpenCV版本,但是选择与其发布时间相近的可以避免很多不必要的问题。

  移动开发 最新文章
Vue3装载axios和element-ui
android adb cmd
【xcode】Xcode常用快捷键与技巧
Android开发中的线程池使用
Java 和 Android 的 Base64
Android 测试文字编码格式
微信小程序支付
安卓权限记录
知乎之自动养号
【Android Jetpack】DataStore
上一篇文章      下一篇文章      查看所有文章
加:2022-07-21 21:40:09  更:2022-07-21 21:41:55 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 4:53:06-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码