package com.example.datalibrary.manager; import android.graphics.Bitmap; import com.baidu.idl.main.facesdk.model.BDFaceImageInstance; import com.example.datalibrary.model.BDLiveConfig; import com.example.datalibrary.model.LivenessModel; import com.example.datalibrary.utils.BitmapUtils; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.Future; public class SaveImageManager { private static class HolderClass { private static final SaveImageManager SAVE_IMAGE_MANAGER = new SaveImageManager(); } public static SaveImageManager getInstance() { return SaveImageManager.HolderClass.SAVE_IMAGE_MANAGER; } private ExecutorService es3 = Executors.newSingleThreadExecutor(); private Future future3; public void saveImage(final LivenessModel livenessModel , final BDLiveConfig bdLiveConfig){ // 检测结果输出 if (future3 != null && !future3.isDone()) { return; } future3 = es3.submit(new Runnable() { @Override public void run() { String currentTime = System.currentTimeMillis() + ""; BDFaceImageInstance rgbImage = livenessModel.getBdFaceImageInstance(); BDFaceImageInstance nirImage = livenessModel.getBdNirFaceImageInstance(); BDFaceImageInstance depthImage = livenessModel.getBdDepthFaceImageInstance(); if (rgbImage != null){ Bitmap bitmap = BitmapUtils.getInstaceBmp(rgbImage); if (livenessModel.getRgbLivenessScore() > bdLiveConfig.rgbLiveScore){ saveImage(bitmap, "Save-Image" + "/" + currentTime, currentTime + "_RGB_Feature"); }else { saveImage(bitmap, "Save-Image" + "/" + currentTime, currentTime + "_RGB_Live"); } if (!bitmap.isRecycled()){ bitmap.recycle(); } rgbImage.destory(); } if (nirImage != null){ Bitmap bitmap = BitmapUtils.getInstaceBmp(nirImage); if (livenessModel.getIrLivenessScore() > bdLiveConfig.nirLiveScore){ saveImage(bitmap, "Save-Image" + "/" + currentTime, currentTime + "_NIR_Feature"); }else { saveImage(bitmap, "Save-Image" + "/" + currentTime, currentTime + "_NIR_Live"); } if (!bitmap.isRecycled()){ bitmap.recycle(); } nirImage.destory(); } if (depthImage != null){ Bitmap bitmap = BitmapUtils.getInstaceBmp(depthImage); if (livenessModel.getDepthLivenessScore() > bdLiveConfig.depthLiveScore){ saveImage(bitmap, "Save-Image" + "/" + currentTime, currentTime + "_Depth_Feature"); }else { saveImage(bitmap, "Save-Image" + "/" + currentTime, currentTime + "_Depth_Live"); } if (!bitmap.isRecycled()){ bitmap.recycle(); } depthImage.destory(); } } }); } private void saveImage(Bitmap bitmap, String url, String name) { BitmapUtils.saveRgbBitmap(bitmap, url, name); } }