使用OpenCV-android-sdk中默认的predict方法出现问题

使用OpenCV-android-sdk中默认的predict方法出现问题,显示未定义,导入的项目是https://blog.csdn.net/sm16111/article/details/82951631
case FISHER:
        return ffModel->predict(faceUMat);

img

../../../../src/main/cpp/Recognizer.cpp:129: error: undefined reference to 'cv::face::FaceRecognizer::predict(cv::_InputArray const&) const'
我的解答思路和尝试过的方法
请问如何解决此问题

追加图片

img


Execution failed for task ':app:externalNativeBuildDebug'.
> Build command failed.
  Error while executing process F:\java\sdk\cmake\3.10.2.4988404\bin\ninja.exe with arguments {-C F:\work\Jnitest (1)\Jnitest\app\.cxx\cmake\debug\armeabi-v7a native-lib}
  ninja: Entering directory `F:\work\Jnitest (1)\Jnitest\app\.cxx\cmake\debug\armeabi-v7a'
  [1/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/Recognizer.cpp.o
  [2/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/DetectionBasedTracker_jni.cpp.o
  [3/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/Train.cpp.o
  [4/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/test.cpp.o
  [5/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/native-lib.cpp.o
  [6/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/ImageUtil.cpp.o
  [7/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/FaceDetect.cpp.o
  [8/9] Building CXX object CMakeFiles/native-lib.dir/src/main/cpp/FileUtil.cpp.o
  [9/9] Linking CXX shared library ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so
  FAILED: ../../../../build/intermediates/cmake/debug/obj/armeabi-v7a/libnative-lib.so 
  cmd.exe /C "cd . && F:\java\sdk\ndk\20.0.5594570\toolchains\llvm\prebuilt\windows-x86_64\bin\clang++.exe --target=armv7-none-linux-androideabi19 --gcc-toolchain=F:/java/sdk/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64 --sysroot=F:/java/sdk/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/sysroot -fPIC -g -DANDROID -fdata-sections -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -fno-addrsig -march=armv7-a -mthumb -Wa,--noexecstack -Wformat -Werror=format-security  -std=c++11 -frtti -fexceptions -O0 -fno-limit-debug-info  -Wl,--exclude-libs,libgcc.a -Wl,--exclude-libs,libatomic.a -static-libstdc++ -Wl,--build-id -Wl,--warn-shared-textrel -Wl,--fatal-warnings -Wl,--exclude-libs,libunwind.a -Wl,--no-undefined -Qunused-arguments -Wl,-z,noexecstack  -Wl,--exclude-libs,libippicv.a -Wl,--exclude-libs,libippiw.a -shared -Wl,-soname,libnative-lib.so -o ..\..\..\..\build\intermediates\cmake\debug\obj\armeabi-v7a\libnative-lib.so @CMakeFiles/native-lib.rsp  && cd ."
  ../../../../src/main/cpp/DetectionBasedTracker_jni.cpp:36: error: undefined reference to 'cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::__ndk1::vector<cv::Rect_<int>, std::__ndk1::allocator<cv::Rect_<int> > >&, double, int, int, cv::Size_<int>, cv::Size_<int>)'
  ../../../../src/main/cpp/FaceDetect.cpp:100: error: undefined reference to 'cv::CascadeClassifier::detectMultiScale(cv::_InputArray const&, std::__ndk1::vector<cv::Rect_<int>, std::__ndk1::allocator<cv::Rect_<int> > >&, double, int, int, cv::Size_<int>, cv::Size_<int>)'
  ../../../../src/main/cpp/FaceDetect.cpp:189: error: undefined reference to 'cv::face::LBPHFaceRecognizer::create(int, int, int, int, double)'
  ../../../../src/main/cpp/FaceDetect.cpp:193: error: undefined reference to 'cv::face::EigenFaceRecognizer::create(int, double)'
  ../../../../src/main/cpp/FaceDetect.cpp:197: error: undefined reference to 'cv::face::FisherFaceRecognizer::create(int, double)'
  ../../../../src/main/cpp/FaceDetect.cpp:201: error: undefined reference to 'cv::face::LBPHFaceRecognizer::create(int, int, int, int, double)'
  ../../../../src/main/cpp/Train.cpp:25: error: undefined reference to 'cv::face::EigenFaceRecognizer::create(int, double)'
  ../../../../src/main/cpp/Train.cpp:53: error: undefined reference to 'cv::face::FaceRecognizer::predict(cv::_InputArray const&) const'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function std::vector<void*, std::allocator<void*> >::_M_fill_insert(__gnu_cxx::__normal_iterator<void**, std::vector<void*, std::allocator<void*> > >, unsigned int, void* const&): error: undefined reference to 'std::__throw_length_error(char const*)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function _GLOBAL__sub_I_system.cpp: error: undefined reference to 'std::ios_base::Init::Init()'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(system.cpp.o):system.cpp:function _GLOBAL__sub_I_system.cpp: error: undefined reference to 'std::ios_base::Init::~Init()'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'std::locale::~locale()'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'std::string::_Rep::_M_destroy(std::allocator<char> const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'std::string::_Rep::_S_empty_rep_storage'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'vtable for std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >'
  F:/java/sdk/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: the vtable symbol may be undefined because the class is missing its key function
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'vtable for std::basic_streambuf<char, std::char_traits<char> >'
  F:/java/sdk/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: the vtable symbol may be undefined because the class is missing its key function
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'std::locale::~locale()'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'std::string::_Rep::_M_destroy(std::allocator<char> const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'std::string::_Rep::_S_empty_rep_storage'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'vtable for std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >'
  F:/java/sdk/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: the vtable symbol may be undefined because the class is missing its key function
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::~basic_stringbuf(): error: undefined reference to 'vtable for std::basic_streambuf<char, std::char_traits<char> >'
  F:/java/sdk/ndk/20.0.5594570/toolchains/llvm/prebuilt/windows-x86_64/lib/gcc/arm-linux-androideabi/4.9.x/../../../../arm-linux-androideabi/bin\ld: the vtable symbol may be undefined because the class is missing its key function
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::string::assign(std::string const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(char const*, std::allocator<char> const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::basic_string<char, std::char_traits<char>, std::allocator<char> >::basic_string(std::string const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::string::_Rep::_M_destroy(std::allocator<char> const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::string::_Rep::_M_dispose(std::allocator<char> const&)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function cv::read(cv::FileNode const&, std::string&, std::string const&): error: undefined reference to 'std::string::_Rep::_S_empty_rep_storage'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function base64::make_base64_header(char const*): error: undefined reference to 'std::basic_ostringstream<char, std::char_traits<char>, std::allocator<char> >::basic_ostringstream(std::_Ios_Openmode)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function base64::make_base64_header(char const*): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function base64::make_base64_header(char const*): error: undefined reference to 'std::basic_ostream<char, std::char_traits<char> >& std::__ostream_insert<char, std::char_traits<char> >(std::basic_ostream<char, std::char_traits<char> >&, char const*, int)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function base64::make_base64_header(char const*): error: undefined reference to 'std::basic_stringbuf<char, std::char_traits<char>, std::allocator<char> >::str() const'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function base64::make_base64_header(char const*): error: undefined reference to 'std::string::reserve(unsigned int)'
  E:/Users/Administrator/Downloads/OpenCV-android-sdk/sdk/native/libs/armeabi-v7a/libopencv_core.a(persistence.cpp.o):persistence.cpp:function base64::make_base64_header(char const*): error: undefined reference to 'std::string::reserve(unsigned int)'

一堆显示未定义,本人以前纯java,这是没引入什么的问题吗

版本问题

如果是JAVA的话可以:
一、下载OpenCV Sdk
前往OpenCv官网下载对应的Android v4.1.0版本的sdk。
二、Android Studio 集成OpenCV Sdk
1、Android Studio 下载cmake和ndk
2、Android Studio 新建ndk项目
3、Android Studio 导入OpenCv Sdk
将下载后的OpenCv Sdk进行解压。
将解压后的OpenCv Sdk目录下的sdk目录里面的java包通过Moudule的方式导入到Studio中。
修改导入opencv的build.gradle
修改opencv的build.gradle的对应的compileSdkVersion等信息。只需复制app下的build.gradle文件中的即可。记住两点:
apply plugin: 'com.android.library'一定要改成library;
去掉applicationId "com.xx.xx"
导入so库
在项目app/src/main目录下新建jniLibs,并将解压后的OpenCv Sdk 目录下对应的路径 sdk/native/libs 中的 文件复制到jniLibs。

目测是 NDK 版本与 OpenCV 版本兼容性问题。


可以私信我帮你看下

NDK 版本与 OpenCV 版本不兼容导致的我原先也遇到过后来更换低版本就可以了

导入引用不成功,检查一下

跟换版本

使用OpenCV-android-sdk中默认的predict方法出现问题,显示未定义,导入的项目是https://blog.csdn.net/sm16111/article/details/82951631
case FISHER:

相关头文件是否有引入

https://blog.csdn.net/Android725/article/details/105301542/

你的用的opencv版本号和编译用的NDK版本号发一下吧

检查配置,或者重新导入