我想在Android上用OpenCV实现人脸识别功能,即事先有一个我提供的人脸训练库,然后检测出人脸后,识别他和训练库中的哪类人最像。
我已在windows平台实现了该功能,并将训练好的FaceRecognizer通过save的方式存储成了xml。我将xml文件放入了Android手机某目录下,然后想利用JNI的方式在Android app中使用OpenCV载入该数据库,但运行到这一行就会报错:
Fatal Signal 11 (SIGSEGV) at 0x42ff0000 (code=2), thread 8703...
这是我的相关代码:
JNIEXPORT jlong JNICALL Java_org_opencv_samples_facedetect_DetectionBasedTracker_nativeCreateObject
(JNIEnv * jenv, jclass, jstring jFileName, jint faceSize)
{
//解析文件目录
const char* jnamestr = jenv->GetStringUTFChars(jFileName, NULL);
string stdFileName(jnamestr);
FaceRecognizer model = (FaceRecognizer)createEigenFaceRecognizer(100,10000.0);
try
{
model->load(stdFileName);
}
望朋友们出谋划策!十分感谢!
"Fatal signal 11" 错误通常是由于应用程序在运行时发生了编程错误或内存错误,导致系统终止应用程序的运行。
在 Android 上调用 JNI 接口调用 OpenCV 函数时,如果遇到 "Fatal signal 11" 错误,可以尝试以下方法来解决这个问题:
在应用程序代码中添加调试信息,尝试找出错误的源头。可以使用 Log 函数输出调试信息,并在 logcat 中查看调试信息。
在调用 JNI 函数之前,检查传入的参数是否有误。如果参数错误,可能会导致 JNI 函数运行时出现 "Fatal signal 11" 错误。
在调用 JNI 函数之前,检查手机的内存使用情况。如果内存不足,可能会导致 "Fatal signal 11" 错误。
尝试使用较新版本的 OpenCV 库,看看能否解决问题。
如果以上方法都无法解决问题,可以尝试在网上搜索相关信息,或者在 OpenCV 官方论坛寻求帮助。