作为Android NDK Caffe的新手,我想在我的 Android 项目中使用内置版本。我尝试运行这个构建的示例演示,但在运行时,它显示以下内容:
03-26 14:46:35.697 2800-3042/com.sh1r0.caffe_android_demo A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 3042 (AsyncTask #1)
(应用程序崩溃)
作为Android NDK Caffe的新手,我想在我的 Android 项目中使用内置版本。我尝试运行这个构建的示例演示,但在运行时,它显示以下内容:
03-26 14:46:35.697 2800-3042/com.sh1r0.caffe_android_demo A/libc﹕ Fatal signal 11 (SIGSEGV) at 0x00000000 (code=1), thread 3042 (AsyncTask #1)
(应用程序崩溃)
我可以看到 sigsev 信号是通过 android AsyncTask 抛出的。问题可能来自此功能。
caffeMobile.predictImage(strings[0])[0]; //line 160 of MainActivity
此信号来自 JNI,除非您可以本地调试(通过 ndk)应用程序,否则很难知道问题出在哪里。caffe-sample 未配置为在本机方法上进行调试。
试试这个问题来管理错误:
确保此 string[0] 数组中的图像路径不为空。并且存在。
确保其他 caffeMobile 函数能够正常执行,例如:
caffeMobile = new CaffeMobile();
caffeMobile.setNumThreads(4);
caffeMobile.loadModel("/sdcard/caffe_mobile/bvlc_reference_caffenet/deploy.prototxt", "/sdcard/caffe_mobile/bvlc_reference_caffenet/bvlc_reference_caffenet.caffemodel");
如果您能够执行其他功能,可能您的图像路径不正确,请检查。
如果您无法执行 loadModel 或 setNumThreads 函数,可能是 apk 未正确加载 libjni.so 库,或者 jni 桥无法定位 jni 函数。