#java #android #opencv #javacv
#java #Android #opencv #javacv
Вопрос:
Хорошо, я понятия не имею, что здесь происходит, я прочитал много тем об этом случае и следил за обзорами, но, к сожалению, я понятия не имею.
Я уже прочитал документацию OpenCV о статической инициализации. Итак, я скопировал собственные библиотеки OpenCV в свою libs
папку.
Затем я добавил эту строку в свой код:
static {
if (!OpenCVLoader.initDebug()) {
// Handle initialization error
}
}
и, наконец, я добавил эту строку:
mLoaderCallback.onManagerConnected(LoaderCallbackInterface.SUCCESS);
внутри onCreate
метода.
Теперь, когда я запускаю свое приложение, я получаю эти ошибки:
07-05 10:34:44.926: E/AndroidRuntime(9548): FATAL EXCEPTION: main
07-05 10:34:44.926: E/AndroidRuntime(9548): Process: org.opencv.javacv.facerecognition, PID: 9548
07-05 10:34:44.926: E/AndroidRuntime(9548): java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_calib3d
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:455)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacv.cpp.opencv_contrib.<clinit>(opencv_contrib.java:104)
07-05 10:34:44.926: E/AndroidRuntime(9548): at org.opencv.javacv.facerecognition.PersonRecognizer.<init>(PersonRecognizer.java:42)
07-05 10:34:44.926: E/AndroidRuntime(9548): at org.opencv.javacv.facerecognition.FdActivity$1.onManagerConnected(FdActivity.java:153)
07-05 10:34:44.926: E/AndroidRuntime(9548): at org.opencv.javacv.facerecognition.FdActivity.onCreate(FdActivity.java:232)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.Activity.performCreate(Activity.java:5451)07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1093)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2359)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2453)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.ActivityThread.access$900(ActivityThread.java:173)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.os.Handler.dispatchMessage(Handler.java:102)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.os.Looper.loop(Looper.java:136)
07-05 10:34:44.926: E/AndroidRuntime(9548): at android.app.ActivityThread.main(ActivityThread.java:5579)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.reflect.Method.invokeNative(Native Method)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.reflect.Method.invoke(Method.java:515)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1268)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1084)
07-05 10:34:44.926: E/AndroidRuntime(9548): at dalvik.system.NativeStart.main(Native Method)
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_calib3d
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.classForName(Native Method)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.forName(Class.java:251)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:453)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 18 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_highgui
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:455)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacv.cpp.opencv_calib3d.<clinit>(opencv_calib3d.java:94)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 21 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_highgui
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.classForName(Native Method)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.forName(Class.java:251)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:453)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 22 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_imgproc
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:455)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacv.cpp.opencv_highgui.<clinit>(opencv_highgui.java:85)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 25 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_imgproc
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.classForName(Native Method)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.forName(Class.java:251)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:453)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 26 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.NoClassDefFoundError: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_core
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:455)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacv.cpp.opencv_imgproc.<clinit>(opencv_imgproc.java:97)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 29 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.ClassNotFoundException: com.googlecode.javacv.cpp.opencv_core
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.classForName(Native Method)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Class.forName(Class.java:251)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:453)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 30 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load jniopencv_core from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.opencv.javacv.facerecognition-32.apk,libraryPath=/data/app-lib/org.opencv.javacv.facerecognition-32]: findLibrary returned null
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.Runtime.loadLibrary(Runtime.java:358)
07-05 10:34:44.926: E/AndroidRuntime(9548): at java.lang.System.loadLibrary(System.java:526)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.loadLibrary(Loader.java:593)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:489)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacpp.Loader.load(Loader.java:431)
07-05 10:34:44.926: E/AndroidRuntime(9548): at com.googlecode.javacv.cpp.opencv_core.<clinit>(opencv_core.java:136)
07-05 10:34:44.926: E/AndroidRuntime(9548): ... 33 more
07-05 10:34:44.926: E/AndroidRuntime(9548): Caused by: java.lang.UnsatisfiedLinkError: Couldn't load tbb from loader dalvik.system.PathClassLoader[dexPath=/data/app/org.opencv.javacv.facerecognition-32.apk,library
У меня также есть javacpp.jar
и javacv.jar
в моей libs
папке.
РЕДАКТИРОВАТЬ1— После того, как я поискал информацию об этой ошибке, я выяснил, что у меня должна быть openCV
библиотека (не Android SDK, библиотека OpenCV для Windows) в моей системе, и у меня также должна быть ее bin
папка внутри моей переменной окружения PATH
. Это имеет смысл, поскольку javacv
это необходимо для разрешения объектов.
Теперь у меня нет никаких ошибок при запуске моего приложения на моем устройстве, но мое приложение не запускается. Каждый раз, когда я открываю его, просто всплывает сообщение об ошибке с надписью Unfortunately your app has stopped!!
. Я думаю, возможно, это из-за проблемы с версией несовместимости между openCV
и JavaCV
библиотеками. Правда ли это?
Комментарии:
1. он жалуется на com.googlecode.javacv.cpp.opencv_calib3d. это другой пакет, а не собственный Android sdk opencv. к сожалению, обе привязки полностью несовместимы, пересмотрите, если вам действительно нужен javacv.
2. @berak Я не понял твою точку зрения. Когда я проверил внутри библиотек целевой папки (например, armeabi-v7a), которая находится в моей папке libs, я могу найти, например, ‘libopencv_calib3d.a’. Но почему у меня возникли ошибки в этой ссылке, что я должен сделать, чтобы это сработало?
3. опять же, оболочки opencv, похоже, находят свои библиотеки (часть ‘static linking’ предназначена только для них), javacv — нет
4. @berak вы имеете в виду, что я должен установить javacv в свою ОС? Я подумал, что если я добавлю jar-файлы javacv в библиотеки, зависящие от моего проекта, все будет в порядке
5. по крайней мере, вам придется строго придерживаться того или иного api. если вы хотите статическое связывание на Android, вы привязаны к opencv, поскольку он не будет связываться с javacv (ваша первоначальная проблема)