系列文章目录
提示:这里可以添加系列文章的所有文章的目录,目录需要自己手动添加
第一章 Android Studio通过JNI配置Opencv 使用opencv进行人脸识别
https://blog.csdn.net/weixin_43911199/article/details/124073247
第二章 Android Studio配置OpenCV中遇到的问题以及解决
第三章 Android Studio使用OpenCV 进行人脸识别
前言
第一章写了Android Studio通过JNI配置opencv,这篇主要写我在配置opencv的过程中遇到的问题以及解决方式。
一、遇到的第一个问题
No signature of method: build_27zg39k22lfw8qu4nm9ijpiyl.android() is applicable for argument types: (build_27zg39k22lfw8qu4nm9ijpiyl r u n c l o s u r e 1 ) v a l u e s : [ b u i l d 2 7 z g 39 k 22 l f w 8 q u 4 n m 9 i j p i y l _run_closure1) values: [build_27zg39k22lfw8qu4nm9ijpiyl runclosure1)values:[build27zg39k22lfw8qu4nm9ijpiyl_run_closure1@ad3449c]
原因:在build.gradle中,我把abiFilters 'armeabi-v7a’写在了错误的地方
解决方式:有两个externalNativeBuild,写在有cppFlags的那个exterlnativeBuild里面。
二、遇到的第二个问题
java.lang.UnsatisfiedLinkError: dlopen failed: library “libc++_shared.so” not found
问题:没有这个libc++_shared.so库
解决方式:在build.gradle中加入如下两句话,即可以进行远程下载
配置过程中最容易出现问题就是build.gradle配置,现附上build.gradle
plugins {
id ‘com.android.application’
}
android {
compileSdk 32
defaultConfig {
applicationId "com.example.facedetectionopencv"
minSdk 21
targetSdk 32
versionCode 1
versionName "1.0"
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
externalNativeBuild {
cmake {
//cppFlags ''
abiFilters 'armeabi-v7a'
//远程下载
arguments "-DANDROID_STL=c++_shared"
cppFlags "-std=c++11 -Wno-nonportable-include-path -Wno-deprecated-register -Wno-writable-strings"
}
}
ndk{
abiFilters 'armeabi-v7a'
}
}
externalNativeBuild {
cmake {
path file('src/main/cpp/CMakeLists.txt')
version '3.18.1'
}
}
sourceSets{
main {
jniLibs.srcDirs=['src/main/cpp/libs']
}
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
}
}
compileOptions {
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
buildFeatures {
viewBinding true
}
}
dependencies {
implementation 'androidx.appcompat:appcompat:1.3.0'
implementation 'com.google.android.material:material:1.4.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.13.2'
androidTestImplementation 'androidx.test.ext:junit:1.1.3'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
}
另再附上CMakeLists.txt配置:
cmake_minimum_required(VERSION 3.18.1)
Declares and names the project.
project(“facedetectionopencv”)
include_directories(include)
set(CMAKE_CXX_FLAGS “ C M A K E C X X F L A G S − L {CMAKE_CXX_FLAGS} -L CMAKECXXFLAGS−L{CMAKE_SOURCE_DIR}/libs/${ANDROID_ABI}”)
add_library( # Sets the name of the library.
facedetectionopencv
SHARED
native-lib.cpp)
find_library(
log-lib
log)
target_link_libraries( # Specifies the target library.
facedetectionopencv
${log-lib}
opencv_java4)
其中set(CMAKE_CXX_FLAGS "
C
M
A
K
E
C
X
X
F
L
A
G
S
−
L
{CMAKE_CXX_FLAGS} -L
CMAKECXXFLAGS−L{CMAKE_SOURCE_DIR}/libs/
A
N
D
R
O
I
D
A
B
I
"
)
是
环
境
变
量
设
置
,
想
查
看
下
{ANDROID_ABI}")是环境变量设置,想查看下
ANDROIDABI")是环境变量设置,想查看下{CMAKE_CXX_FLAGS} ${CMAKE_SOURCE_DIR}
A
N
D
R
O
I
D
A
B
I
具
体
表
示
什
么
,
可
以
在
其
中
打
印
出
来
:
m
e
s
s
a
g
e
(
−
−
−
−
−
−
−
−
−
−
−
−
−
−
)
m
e
s
s
a
g
e
(
{ANDROID_ABI} 具体表示什么,可以在其中打印出来: message(--------------) message(
ANDROIDABI具体表示什么,可以在其中打印出来:message(−−−−−−−−−−−−−−)message({CMAKE_SOURCE_DIR})
总结
Android Studio配置好OpenCV,解决好其中遇到的问题,就可以使用opencv啦,可以利用opencv进行图像处理以及脸部检测。下一篇将写怎样利用opencv进行人脸检测。