我使用的百度人脸识别,在识别过程中出现内存问题,下面是我的代码
// 创建检测结果存储数据
LivenessModel livenessModel = new LivenessModel();
// 创建检测对象,如果原始数据YUV,转为算法检测的图片BGR
BDFaceImageInstance instanceRGB = new BDFaceImageInstance(rgbData, rgbHeight, rgbWidth,
BDFaceSDKCommon.BDFaceImageType.BDFACE_IMAGE_TYPE_YUV_NV21,
SingleBaseConfig.getBaseConfig().getDetectDirection(),
0);//0:RGB无镜像,1:有镜像
BDFaceImageInstance instanceNIR = new BDFaceImageInstance(nirData, nirHeight, nirWidth,
BDFaceSDKCommon.BDFaceImageType.BDFACE_IMAGE_TYPE_YUV_NV21,
SingleBaseConfig.getBaseConfig().getDetectDirection(),
0);//0:RGB无镜像,1:有镜像
// getImage() 获取送检图片,如果检测数据有问题,可以通过image view 展示送检图片
livenessModel.setBdFaceImageInstance(instanceRGB.getImage());
FaceInfo[] faceInfosRGBFastTrack = faceDetect.track(
BDFaceSDKCommon.DetectType.DETECT_VIS,
BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_FAST,
instanceRGB);
FaceInfo[] faceInfosNIR = faceDetectNir.detect(
BDFaceSDKCommon.DetectType.DETECT_NIR,
BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_NIR_ACCURATE,
instanceNIR, faceInfosRGBFastTrack, bdFaceDetectListConfig);
if (faceInfosRGBFastTrack != null && faceInfosRGBFastTrack.length > 0 &&
faceInfosNIR != null && faceInfosNIR.length > 0) {//可见光、近红外均检测到人脸
FaceInfo[] faceInfosRGB = faceDetect.detect(BDFaceSDKCommon.DetectType.DETECT_VIS,
BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE, instanceRGB,
faceInfosRGBFastTrack, bdFaceDetectListConfig);
FaceInfo faceInfo = faceInfosRGB[0];
//脸超出屏幕
//中心点小于1/4大于3/4 不管脸是否超出
if ((faceInfo.centerX - faceInfo.width / 2) < 0
|| (faceInfo.centerY - faceInfo.height / 2) < 0
|| (faceInfo.centerX + faceInfo.width / 2) > 1f * rgbWidth * widthPixels / heightPixel
|| (faceInfo.centerY + faceInfo.height / 2) > rgbWidth) {
instanceRGB.destory();
instanceNIR.destory();
//在边缘
if (faceDetectCallBack != null) {
faceDetectCallBack.onTip(CODE_FACE_ERROR, "请移动到屏幕中间");
}
Log.i("程序崩溃日志--","13");
return;
}
livenessModel.setTrackFaceInfo(faceInfosRGB);
livenessModel.setFaceInfo(faceInfo);
livenessModel.setLandmarks(faceInfo.landmarks);
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
}
//质量检测
if (!onQualityCheck(faceInfo, faceDetectCallBack)) {
// 流程结束销毁图片,开始下一帧图片检测,否则内存泄露
instanceRGB.destory();
instanceNIR.destory();
return;
}
// 活体检测
onLivenessCheck(instanceRGB, instanceNIR,
faceInfosRGB[0].landmarks, faceInfosNIR[0].landmarks,
livenessModel, faceDetectCallBack);}
会在faceDetect.detect 和fceDetect.track这里发生错误
出现heap corruption detected by dlfree
Fatal signal 6 (SIGABRT), code -6 in tid 4274 (RxCachedThreadS), status: 90错误,请问这个改怎么解决,已经排查了半个月了
内存泄漏:检查代码中是否有未释放的资源,比如像instanceRGB和instanceNIR这样的BDFaceImageInstance对象,确保在使用后进行了释放。
内存溢出:检查是否有大量的内存分配操作,建议优化代码,减少内存分配,例如可以尝试减少变量的创建次数,减少不必要的对象创建等。
设备内存不足:如果设备内存不足,可能会导致内存问题,建议尝试关闭一些其他应用程序,释放一些内存空间。