From ba92b976c7fb9f8bbe4a1bf9d06fa8468d26be58 Mon Sep 17 00:00:00 2001
From: weimingfei <fei_gaming@sina.com>
Date: 星期一, 15 十二月 2025 18:01:13 +0800
Subject: [PATCH] 指纹钥匙柜人脸报错
---
keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java | 906 +++++++++++++++++++++++++++++--------------------------
1 files changed, 479 insertions(+), 427 deletions(-)
diff --git a/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java b/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
index 3470c05..21befa4 100644
--- a/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
+++ b/keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
@@ -55,6 +55,7 @@
private int mLastFaceId;
private float threholdScore;
+ private String groupId;
public static volatile int initStatus = SDK_UNACTIVATION;
public static volatile boolean initModelSuccess = false;
@@ -87,6 +88,14 @@
faceAuth.setCoreConfigure(BDFaceSDKCommon.BDFaceCoreRunMode.BDFACE_LITE_POWER_NO_BIND, 2);
}
+ public String getGroupId() {
+ return groupId;
+ }
+
+ public void setGroupId(String groupId) {
+ this.groupId = groupId;
+ }
+
public void setActiveLog(boolean isLog) {
if (faceAuth != null) {
if (isLog) {
@@ -96,7 +105,11 @@
}
}
}
-
+ public void destroy(){
+ /*if(rgbInstance!=null){
+ rgbInstance = null;
+ }*/
+ }
public void setCheckMouthMask(boolean checkMouthMask) {
this.checkMouthMask = checkMouthMask;
}
@@ -118,7 +131,7 @@
}
public void initModel(
- final Context context, BDFaceSDKConfig config, boolean isLog, final SdkInitListener listener) {
+ final Context context, BDFaceSDKConfig config, boolean isLog, final SdkInitListener listener) {
setActiveLog(isLog);
initModel(context, config, listener);
}
@@ -144,12 +157,6 @@
startInitModelTime = System.currentTimeMillis();
}
- public void destroy(){
- if(rgbInstance!=null){
- rgbInstance = null;
- }
- }
-
public FaceCrop getFaceCrop() {
return faceModel.getFaceCrop();
}
@@ -168,7 +175,7 @@
public void initDataBases(Context context) {
if (FaceApi.getInstance().getmUserNum() != 0) {
- //ToastUtils.toast(context, "浜鸿劯搴撳姞杞戒腑");
+ ToastUtils.toast(context, "浜鸿劯搴撳姞杞戒腑");
}
emptyFrame();
// 鍒濆鍖栨暟鎹簱
@@ -187,23 +194,23 @@
}
future3 =
- es3.submit(
- new Runnable() {
- @Override
- public void run() {
- faceModel.getFaceSearch().featureClear();
- synchronized (faceModel.getFaceSearch()) {
- List<User> users = FaceApi.getInstance().getAllUserList();
- for (int i = 0; i < users.size(); i++) {
- User user = users.get(i);
- faceModel.getFaceSearch().pushPersonById(user.getId(), user.getFeature());
+ es3.submit(
+ new Runnable() {
+ @Override
+ public void run() {
+ faceModel.getFaceSearch().featureClear();
+ synchronized (faceModel.getFaceSearch()) {
+ List<User> users = FaceApi.getInstance().getAllUserList();
+ for (int i = 0; i < users.size(); i++) {
+ User user = users.get(i);
+ faceModel.getFaceSearch().pushPersonById(user.getId(), user.getFeature());
+ }
+ if (FaceApi.getInstance().getmUserNum() != 0) {
+ ToastUtils.toast(context, "浜鸿劯搴撳姞杞芥垚鍔�");
+ }
+ }
}
- if (FaceApi.getInstance().getmUserNum() != 0) {
- //ToastUtils.toast(context, "浜鸿劯搴撳姞杞芥垚鍔�");
- }
- }
- }
- });
+ });
}
private void setFail(LivenessModel livenessModel) {
@@ -235,12 +242,12 @@
// 蹇�熸娴嬭幏鍙栦汉鑴镐俊鎭紝浠呯敤浜庣粯鍒朵汉鑴告锛岃缁嗕汉鑴告暟鎹悗缁幏鍙�
FaceInfo[] faceInfos =
- faceModel
- .getFaceTrack()
- .track(
- BDFaceSDKCommon.DetectType.DETECT_VIS,
- BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_FAST,
- rgbInstance);
+ faceModel
+ .getFaceTrack()
+ .track(
+ BDFaceSDKCommon.DetectType.DETECT_VIS,
+ BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_FAST,
+ rgbInstance);
return faceInfos;
}
@@ -254,18 +261,18 @@
private BDFaceImageInstance getBdImage(BDFaceImageConfig bdFaceImageConfig, boolean darkEnhance) {
BDFaceImageInstance rgbInstance =
- new BDFaceImageInstance(
- bdFaceImageConfig.data,
- bdFaceImageConfig.srcHeight,
- bdFaceImageConfig.srcWidth,
- bdFaceImageConfig.bdFaceImageType,
- bdFaceImageConfig.direction,
- bdFaceImageConfig.mirror);
+ new BDFaceImageInstance(
+ bdFaceImageConfig.data,
+ bdFaceImageConfig.srcHeight,
+ bdFaceImageConfig.srcWidth,
+ bdFaceImageConfig.bdFaceImageType,
+ bdFaceImageConfig.direction,
+ bdFaceImageConfig.mirror);
BDFaceImageInstance rgbInstanceOne;
// 鍒ゆ柇鏆楀厜鎭㈠
if (darkEnhance) {
rgbInstanceOne = faceModel.getDark().faceDarkEnhance(rgbInstance);
-
+ rgbInstance.destory();
} else {
rgbInstanceOne = rgbInstance;
}
@@ -303,21 +310,10 @@
}
AtomicInteger isOutoBoundary = new AtomicInteger();
BDFaceImageInstance cropInstance =
- faceModel.getFaceCrop().cropFaceByLandmark(imageInstance, landmarks, 2.0f, false, isOutoBoundary);
+ faceModel.getFaceCrop().cropFaceByLandmark(imageInstance, landmarks, 2.0f, false, isOutoBoundary);
return cropInstance;
}
- private static BDFaceImageInstance rgbInstance =null;
- private LivenessModel livenessModel;
- private String groupId;
-
- /**
- * 0:绠$悊鍛橈紝1锛氱敤鎴�
- * @param groupId
- */
- public void setGroupId(String groupId){
- this.groupId = groupId;
- }
/**
* 妫�娴�-娲讳綋-鐗瑰緛-浜鸿劯妫�绱㈡祦绋�
*
@@ -328,101 +324,98 @@
* @param faceDetectCallBack
*/
public void onDetectCheck(
- final BDFaceImageConfig bdFaceImageConfig,
- final BDFaceImageConfig bdNirFaceImageConfig,
- final BDFaceImageConfig bdDepthFaceImageConfig,
- final BDFaceCheckConfig bdFaceCheckConfig,
- final FaceDetectCallBack faceDetectCallBack) {
+ final BDFaceImageConfig bdFaceImageConfig,
+ final BDFaceImageConfig bdNirFaceImageConfig,
+ final BDFaceImageConfig bdDepthFaceImageConfig,
+ final BDFaceCheckConfig bdFaceCheckConfig,
+ final FaceDetectCallBack faceDetectCallBack) {
if (!FaceSDKManager.initModelSuccess) {
return;
}
long startTime = System.currentTimeMillis();
// 鍒涘缓妫�娴嬬粨鏋滃瓨鍌ㄦ暟鎹�
- livenessModel = new LivenessModel();
+ LivenessModel livenessModel = new LivenessModel();
// 鍒涘缓妫�娴嬪璞★紝濡傛灉鍘熷鏁版嵁YUV锛岃浆涓虹畻娉曟娴嬬殑鍥剧墖BGR
// TODO: 鐢ㄦ埛璋冩暣鏃嬭浆瑙掑害鍜屾槸鍚﹂暅鍍忥紝鎵嬫満鍜屽紑鍙戠増闇�瑕佸姩鎬侀�傞厤
- //System.out.println("==rgbInstance==>鍒濆鍖�");
- if(rgbInstance!=null){
- rgbInstance.destory();
- }
- rgbInstance = getBdImage(bdFaceImageConfig, bdFaceCheckConfig.darkEnhance);
+ BDFaceImageInstance rgbInstance = getBdImage(bdFaceImageConfig, bdFaceCheckConfig.darkEnhance);
livenessModel.setTestBDFaceImageInstanceDuration(System.currentTimeMillis() - startTime);
onTrack(
- rgbInstance,
- livenessModel,
- new DetectListener() {
- @Override
- public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
- // 澶氬抚鍒ゆ柇
- if (!frameSelect(faceInfos[0])) {
- livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
- if (faceDetectCallBack != null && faceAdoptModel != null) {
- //System.out.println("==isOk==>澶氬抚鍒ゆ柇");
- faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
- faceDetectCallBack.onFaceDetectCallback(faceAdoptModel);
- }
+ rgbInstance,
+ livenessModel,
+ new DetectListener() {
+ @Override
+ public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
+ // 澶氬抚鍒ゆ柇
+ if (!frameSelect(faceInfos[0])) {
+ livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
+ if (faceDetectCallBack != null && faceAdoptModel != null) {
+ faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+ faceDetectCallBack.onFaceDetectCallback(faceAdoptModel);
+ }
+ rgbInstance.destory();
- return;
- }
- // 淇濆瓨浜鸿劯鐗瑰緛鐐�
- livenessModel.setLandmarks(faceInfos[0].landmarks);
- // 淇濆瓨浜鸿劯鍥剧墖
- livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
- // 鍙g僵妫�娴嬫暟鎹�
- if (checkMouthMask) {
- FaceMouthMask mouthMask = getFaceMouthMask();
- if (mouthMask != null) {
- float[] maskScores = mouthMask.checkMask(rgbInstance, faceInfos);
- if (maskScores != null && maskScores.length > 0) {
- float maskResult = maskScores[0];
- Log.d("mouth_mask", "mask_score:" + maskResult);
- if (livenessModel != null) {
- livenessModel.setMouthMaskArray(maskScores);
+ return;
+ }
+ // 淇濆瓨浜鸿劯鐗瑰緛鐐�
+ livenessModel.setLandmarks(faceInfos[0].landmarks);
+ // 淇濆瓨浜鸿劯鍥剧墖
+ livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
+ // 鍙g僵妫�娴嬫暟鎹�
+ if (checkMouthMask) {
+ FaceMouthMask mouthMask = getFaceMouthMask();
+ if (mouthMask != null) {
+ float[] maskScores = mouthMask.checkMask(rgbInstance, faceInfos);
+ if (maskScores != null && maskScores.length > 0) {
+ float maskResult = maskScores[0];
+ Log.d("mouth_mask", "mask_score:" + maskResult);
+ if (livenessModel != null) {
+ livenessModel.setMouthMaskArray(maskScores);
+ }
}
}
}
+
+ // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
+ if (faceDetectCallBack != null) {
+ faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+ }
+
+ // 閫佹璇嗗埆
+ onLivenessCheck(
+ rgbInstance,
+ bdNirFaceImageConfig,
+ bdDepthFaceImageConfig,
+ bdFaceCheckConfig,
+ livenessModel,
+ startTime,
+ faceDetectCallBack,
+ faceInfos);
}
- // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
- if (faceDetectCallBack != null) {
- faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
- }
+ @Override
+ public void onDetectFail() {
- // 閫佹璇嗗埆
- onLivenessCheck(
- rgbInstance,
- bdNirFaceImageConfig,
- bdDepthFaceImageConfig,
- bdFaceCheckConfig,
- livenessModel,
- startTime,
- faceDetectCallBack,
- faceInfos);
- }
+ emptyFrame();
+ // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
+ if (faceDetectCallBack != null) {
+ faceDetectCallBack.onFaceDetectCallback(null);
+ livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
- @Override
- public void onDetectFail() {
-
- emptyFrame();
- // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
- if (faceDetectCallBack != null) {
- faceDetectCallBack.onFaceDetectCallback(null);
- livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
- //System.out.println("==isOk==>娴佺▼缁撴潫");
// SaveImageManager.getInstance().saveImage(livenessModel, bdFaceCheckConfig.bdLiveConfig);
- faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
- faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+ faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+ faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+ }
+ rgbInstance.destory();
}
- }
- });
+ });
}
private float silentLive(
- BDFaceImageInstance rgbInstance,
- BDFaceSDKCommon.LiveType type,
- float[] landmarks,
- List<Boolean> list,
- float liveScore) {
+ BDFaceImageInstance rgbInstance,
+ BDFaceSDKCommon.LiveType type,
+ float[] landmarks,
+ List<Boolean> list,
+ float liveScore) {
float score = 0;
if (landmarks != null) {
synchronized (faceModel.getFaceLive()) {
@@ -465,11 +458,11 @@
* @return
*/
private float[] silentLives(
- BDFaceImageInstance rgbInstance,
- BDFaceSDKCommon.LiveType type,
- FaceInfo[] faceInfos,
- List<Boolean> list,
- float liveScore) {
+ BDFaceImageInstance rgbInstance,
+ BDFaceSDKCommon.LiveType type,
+ FaceInfo[] faceInfos,
+ List<Boolean> list,
+ float liveScore) {
float[] scores = {0, 0, 0}; // 鏈�澶氭娴�3涓汉鑴�
if (faceInfos != null) {
synchronized (faceModel.getFaceLive()) {
@@ -478,7 +471,7 @@
for (int i = 0; i < size; i++) {
scores[i] =
- faceModel.getFaceLive().silentLive(type, rgbInstance, faceInfos[i].landmarks, liveScore);
+ faceModel.getFaceLive().silentLive(type, rgbInstance, faceInfos[i].landmarks, liveScore);
}
}
}
@@ -486,11 +479,11 @@
}
private void onDetect(
- BDFaceCheckConfig bdFaceCheckConfig,
- BDFaceImageInstance rgbInstance,
- FaceInfo[] fastFaceInfos,
- LivenessModel livenessModel,
- DetectListener detectListener) {
+ BDFaceCheckConfig bdFaceCheckConfig,
+ BDFaceImageInstance rgbInstance,
+ FaceInfo[] fastFaceInfos,
+ LivenessModel livenessModel,
+ DetectListener detectListener) {
long accurateTime = System.currentTimeMillis();
FaceInfo[] faceInfos;
@@ -498,14 +491,14 @@
if (bdFaceCheckConfig != null) {
bdFaceCheckConfig.bdFaceDetectListConfig.usingQuality = true;
faceInfos =
- faceModel
- .getFaceDetect()
- .detect(
- BDFaceSDKCommon.DetectType.DETECT_VIS,
- BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
- rgbInstance,
- fastFaceInfos,
- bdFaceCheckConfig.bdFaceDetectListConfig);
+ faceModel
+ .getFaceDetect()
+ .detect(
+ BDFaceSDKCommon.DetectType.DETECT_VIS,
+ BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
+ rgbInstance,
+ fastFaceInfos,
+ bdFaceCheckConfig.bdFaceDetectListConfig);
} else {
faceInfos = faceModel.getFaceDetect().detect(BDFaceSDKCommon.DetectType.DETECT_VIS, rgbInstance);
@@ -514,7 +507,7 @@
livenessModel.setAccurateTime(System.currentTimeMillis() - accurateTime);
if (faceInfos == null || faceInfos.length <= 0) {
-
+ rgbInstance.destory();
detectListener.onDetectFail();
return;
}
@@ -543,45 +536,43 @@
* @param faceDetectCallBack
*/
public void onLivenessCheck(
- final BDFaceImageInstance rgbInstance,
- final BDFaceImageConfig nirBDFaceImageConfig,
- final BDFaceImageConfig depthBDFaceImageConfig,
- final BDFaceCheckConfig bdFaceCheckConfig,
- final LivenessModel livenessModel,
- final long startTime,
- final FaceDetectCallBack faceDetectCallBack,
- final FaceInfo[] fastFaceInfos) {
+ final BDFaceImageInstance rgbInstance,
+ final BDFaceImageConfig nirBDFaceImageConfig,
+ final BDFaceImageConfig depthBDFaceImageConfig,
+ final BDFaceCheckConfig bdFaceCheckConfig,
+ final LivenessModel livenessModel,
+ final long startTime,
+ final FaceDetectCallBack faceDetectCallBack,
+ final FaceInfo[] fastFaceInfos) {
+
if (future2 != null && !future2.isDone()) {
// 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
- //future2.cancel(true);
-
- //System.out.println("==isOk==>涔嬪墠娌$粨鏉�");
+ rgbInstance.destory();
return;
}
future2 =
- es2.submit(
- new Runnable() {
+ es2.submit(
+ new Runnable() {
- @Override
- public void run() {
- try {
- // 鑾峰彇BDFaceCheckConfig閰嶇疆淇℃伅
- if (bdFaceCheckConfig == null) {
+ @Override
+ public void run() {
- return;
- }
- onDetect(
- bdFaceCheckConfig,
- rgbInstance,
- fastFaceInfos,
- livenessModel,
- new DetectListener() {
+ // 鑾峰彇BDFaceCheckConfig閰嶇疆淇℃伅
+ if (bdFaceCheckConfig == null) {
+ rgbInstance.destory();
- @Override
- public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
+ return;
+ }
+ onDetect(
+ bdFaceCheckConfig,
+ rgbInstance,
+ fastFaceInfos,
+ livenessModel,
+ new DetectListener() {
- try {
+ @Override
+ public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
// 浜鸿劯id璧嬪��
if (mLastFaceId != fastFaceInfos[0].faceID) {
@@ -591,7 +582,7 @@
}
if (bdFaceCheckConfig == null) {
-
+ rgbInstance.destory();
livenessModel.clearIdentifyResults();
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
@@ -603,7 +594,7 @@
if (!onBestImageCheck(livenessModel, bdFaceCheckConfig, faceDetectCallBack)) {
livenessModel.setQualityCheck(true);
livenessModel.clearIdentifyResults();
-
+ rgbInstance.destory();
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
}
@@ -616,10 +607,11 @@
faceInfos, bdFaceCheckConfig.bdQualityConfig, faceDetectCallBack)) {
livenessModel.setQualityCheck(true);
livenessModel.clearIdentifyResults();
-
+ rgbInstance.destory();
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
}
+
return;
}
@@ -756,7 +748,7 @@
// 濡傛灉璁剧疆涓轰笉杩涜娲讳綋妫�娴�
int liveCheckMode = livenessModel.getLiveType();
- if (liveCheckMode == 0) {
+ if (liveCheckMode == 0){
isRgbScoreCheck = true;
}
// TODO 鐗瑰緛鎻愬彇+浜鸿劯妫�绱�
@@ -804,7 +796,7 @@
chin));
}
- if (bdLiveConfig != null) {
+ if (bdLiveConfig != null){
onFeatureChecks(
i,
rgbInstance,
@@ -818,7 +810,8 @@
bdFaceCheckConfig.activeModel,
rgbScores,
bdLiveConfig.rgbLiveScore);
- } else {
+ }
+ else{
onFeatureChecks(
i,
rgbInstance,
@@ -843,7 +836,7 @@
livenessModel.setAllDetectDuration(System.currentTimeMillis() - startTime);
// LogUtils.e(TIME_TAG, "all process time = " + livenessModel.getAllDetectDuration());
// 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-
+ rgbInstance.destory();
if (nirInstance != null) {
nirInstance.destory();
}
@@ -851,28 +844,18 @@
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
}
- }catch (RuntimeException e){
- faceDetectCallBack.onTip(1,e.getMessage());
- }catch (Exception e){
- faceDetectCallBack.onTip(1,e.getMessage());
}
- }
- @Override
- public void onDetectFail() {
+ @Override
+ public void onDetectFail() {
- if (faceDetectCallBack != null) {
- faceDetectCallBack.onFaceDetectCallback(livenessModel);
+ if (faceDetectCallBack != null) {
+ faceDetectCallBack.onFaceDetectCallback(livenessModel);
+ }
}
- }
- });
- }catch (RuntimeException e){
- faceDetectCallBack.onTip(1,e.getMessage());
- }catch (Exception e){
- faceDetectCallBack.onTip(1,e.getMessage());
- }
- }
- });
+ });
+ }
+ });
}
/**
@@ -883,7 +866,7 @@
* @return
*/
public boolean onBestImageCheck(
- LivenessModel livenessModel, BDFaceCheckConfig bdFaceCheckConfig, FaceDetectCallBack faceDetectCallBack) {
+ LivenessModel livenessModel, BDFaceCheckConfig bdFaceCheckConfig, FaceDetectCallBack faceDetectCallBack) {
boolean isBestImageCheck = false;
if (livenessModel != null && livenessModel.getFaceInfos() != null) {
FaceInfo[] faceInfos = livenessModel.getFaceInfos();
@@ -902,6 +885,82 @@
* 鐗瑰緛鎻愬彇-浜鸿劯璇嗗埆姣斿
*
* @param rgbInstance 鍙鍏夊簳灞傞�佹瀵硅薄
+ * @param landmark 妫�娴嬬溂鐫涳紝鍢村反锛岄蓟瀛愶紝72涓叧閿偣
+ * @param faceInfos nir浜鸿劯鏁版嵁
+ * @param nirInstance nir 鍥惧儚鍙ユ焺
+ * @param livenessModel 妫�娴嬬粨鏋滄暟鎹泦鍚�
+ * @param featureCheckMode 鐗瑰緛鎶藉彇妯″紡銆愪笉鎻愬彇鐗瑰緛锛�1銆戯紱銆愭彁鍙栫壒寰侊細2銆戯紱銆愭彁鍙栫壒寰�+1锛歂妫�绱細3銆戯紱
+ * @param featureType 鐗瑰緛鎶藉彇妯℃�佹墽琛� 銆愮敓娲荤収锛�1銆戯紱銆愯瘉浠剁収锛�2銆戯紱銆愭贩鍚堟ā鎬侊細3銆戯紱
+ */
+ private void onFeatureCheck(
+ BDFaceImageInstance rgbInstance,
+ BDFaceCheckConfig bdFaceCheckConfig,
+ float[] landmark,
+ FaceInfo[] faceInfos,
+ BDFaceImageInstance nirInstance,
+ LivenessModel livenessModel,
+ byte[] secondFeature,
+ final int featureCheckMode,
+ final int featureType) {
+ // 濡傛灉涓嶆娊鍙栫壒寰侊紝鐩存帴杩斿洖
+ if (featureCheckMode == 1) {
+ return;
+ }
+ byte[] feature = new byte[512];
+ if (featureType == 3) {
+ // todo: 娣峰悎妯℃�佷娇鐢ㄦ柟寮忔槸鏍规嵁鍥剧墖鐨勬洕鍏夋潵閫夋嫨闇�瑕佷娇鐢ㄧ殑type锛屽厜鐓х殑鍙栧�艰寖鍥翠负锛�0~1涔嬮棿
+ AtomicInteger atomicInteger = new AtomicInteger();
+ FaceSDKManager.getInstance().getImageIllum().imageIllum(rgbInstance, atomicInteger);
+ int illumScore = atomicInteger.get();
+ BDQualityConfig bdQualityConfig = bdFaceCheckConfig.bdQualityConfig;
+ boolean isIllum = bdQualityConfig != null ? illumScore < bdQualityConfig.illum : false;
+ BDFaceSDKCommon.FeatureType type =
+ isIllum
+ ? BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_NIR
+ : BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO;
+ BDFaceImageInstance bdFaceImageInstance = isIllum ? nirInstance : rgbInstance;
+ float[] landmarks = isIllum ? faceInfos[0].landmarks : landmark;
+
+ long startFeatureTime = System.currentTimeMillis();
+ float featureSize = faceModel.getFaceFeature().feature(type, bdFaceImageInstance, landmarks, feature);
+ livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
+ livenessModel.setFeature(feature);
+ // 浜鸿劯妫�绱�
+ featureSearch(
+ featureCheckMode,
+ livenessModel,
+ bdFaceCheckConfig,
+ feature,
+ secondFeature,
+ featureSize,
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+ } else {
+ // 鐢熸椿鐓ф绱�
+ long startFeatureTime = System.currentTimeMillis();
+ float featureSize =
+ faceModel
+ .getFaceFeature()
+ .feature(
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO, rgbInstance, landmark, feature);
+ livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
+ livenessModel.setFeature(feature);
+ livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
+ // 浜鸿劯妫�绱�
+ featureSearch(
+ featureCheckMode,
+ livenessModel,
+ bdFaceCheckConfig,
+ feature,
+ secondFeature,
+ featureSize,
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+ }
+ }
+
+ /**
+ * 鐗瑰緛鎻愬彇-浜鸿劯璇嗗埆姣斿
+ *
+ * @param rgbInstance 鍙鍏夊簳灞傞�佹瀵硅薄
* @param rgbFaceInfos rgb浜鸿劯鏁版嵁
* @param faceInfos nir浜鸿劯鏁版嵁
* @param nirInstance nir 鍥惧儚鍙ユ焺
@@ -912,21 +971,22 @@
* @param liveScore 鍙鍏夋椿浣撻槇鍊�
*/
private void onFeatureChecks(
- int index,
- BDFaceImageInstance rgbInstance,
- BDFaceCheckConfig bdFaceCheckConfig,
- FaceInfo[] rgbFaceInfos,
- FaceInfo[] faceInfos,
- BDFaceImageInstance nirInstance,
- LivenessModel livenessModel,
- byte[] secondFeature,
- final int featureCheckMode,
- final int featureType,
- float[] rgbScores,
- float liveScore) {
+ int index,
+ BDFaceImageInstance rgbInstance,
+ BDFaceCheckConfig bdFaceCheckConfig,
+ FaceInfo[] rgbFaceInfos,
+ FaceInfo[] faceInfos,
+ BDFaceImageInstance nirInstance,
+ LivenessModel livenessModel,
+ byte[] secondFeature,
+ final int featureCheckMode,
+ final int featureType,
+ float[] rgbScores,
+ float liveScore) {
// 濡傛灉涓嶆娊鍙栫壒寰侊紝鐩存帴杩斿洖
if (featureCheckMode == 1) {
+
return;
}
byte[] feature = new byte[512];
@@ -939,9 +999,9 @@
BDQualityConfig bdQualityConfig = bdFaceCheckConfig.bdQualityConfig;
boolean isIllum = bdQualityConfig != null ? illumScore < bdQualityConfig.illum : false;
BDFaceSDKCommon.FeatureType type =
- isIllum
- ? BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_NIR
- : BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO;
+ isIllum
+ ? BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_NIR
+ : BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO;
BDFaceImageInstance bdFaceImageInstance = isIllum ? nirInstance : rgbInstance;
if (rgbFaceInfos == null) {
@@ -968,19 +1028,20 @@
livenessModel.setFeature(feature);
// 浜鸿劯妫�绱�
featureSearchs(
- index,
- featureCheckMode,
- livenessModel,
- bdFaceCheckConfig,
- feature,
- secondFeature,
- featureSize,
- BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+ index,
+ featureCheckMode,
+ livenessModel,
+ bdFaceCheckConfig,
+ feature,
+ secondFeature,
+ featureSize,
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
} else {
// 鐢熸椿鐓ф绱�
long startFeatureTime = System.currentTimeMillis();
if (rgbFaceInfos == null) {
+
return;
}
@@ -998,27 +1059,28 @@
}
float featureSize =
- faceModel
- .getFaceFeature()
- .feature(
- BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
- rgbInstance,
- rgbFaceInfos[index].landmarks,
- feature);
+ faceModel
+ .getFaceFeature()
+ .feature(
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
+ rgbInstance,
+ rgbFaceInfos[index].landmarks,
+ feature);
livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
livenessModel.setFeature(feature);
livenessModel.setFeatureDuration(System.currentTimeMillis() - startFeatureTime);
// 浜鸿劯妫�绱�
+
featureSearchs(
- index,
- featureCheckMode,
- livenessModel,
- bdFaceCheckConfig,
- feature,
- secondFeature,
- featureSize,
- BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
+ index,
+ featureCheckMode,
+ livenessModel,
+ bdFaceCheckConfig,
+ feature,
+ secondFeature,
+ featureSize,
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO);
}
}
@@ -1033,13 +1095,13 @@
* @param type 鐗瑰緛鎻愬彇绫诲瀷
*/
private void featureSearch(
- final int featureCheckMode,
- LivenessModel livenessModel,
- BDFaceCheckConfig bdFaceCheckConfig,
- byte[] feature,
- byte[] secondFeature,
- float featureSize,
- BDFaceSDKCommon.FeatureType type) {
+ final int featureCheckMode,
+ LivenessModel livenessModel,
+ BDFaceCheckConfig bdFaceCheckConfig,
+ byte[] feature,
+ byte[] secondFeature,
+ float featureSize,
+ BDFaceSDKCommon.FeatureType type) {
// 濡傛灉鍙彁鍘荤壒寰侊紝涓嶅仛妫�绱紝姝ゅ杩斿洖
if (featureCheckMode == 2) {
@@ -1053,7 +1115,7 @@
// TODO 闃堝�煎彲浠ユ牴鎹笉鍚屾ā鍨嬭皟鏁�
if (featureCheckMode == 3) {
List<? extends Feature> featureResult =
- faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 1, feature, false);
+ faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 1, feature, false);
// TODO 杩斿洖top num = 1 涓暟鎹泦鍚堬紝姝ゅ鍙互浠绘剰璁剧疆锛屼細杩斿洖姣斿浠庡ぇ鍒板皬鎺掑簭鐨刵um 涓暟鎹泦鍚�
if (featureResult != null && featureResult.size() > 0) {
@@ -1086,13 +1148,13 @@
} else if (featureCheckMode == 4) {
// 鐩墠浠呮敮鎸�
float score =
- faceModel
- .getFaceSearch()
- .compare(
- BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
- livenessModel.getFeature(),
- secondFeature,
- true);
+ faceModel
+ .getFaceSearch()
+ .compare(
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
+ livenessModel.getFeature(),
+ secondFeature,
+ true);
livenessModel.setScore(score);
if (score > threholdScore) {
/*faceId = livenessModel.getFaceInfo().faceID;
@@ -1120,14 +1182,14 @@
* @param type 鐗瑰緛鎻愬彇绫诲瀷
*/
private void featureSearchs(
- final int index,
- final int featureCheckMode,
- LivenessModel livenessModel,
- BDFaceCheckConfig bdFaceCheckConfig,
- byte[] feature,
- byte[] secondFeature,
- float featureSize,
- BDFaceSDKCommon.FeatureType type) {
+ final int index,
+ final int featureCheckMode,
+ LivenessModel livenessModel,
+ BDFaceCheckConfig bdFaceCheckConfig,
+ byte[] feature,
+ byte[] secondFeature,
+ float featureSize,
+ BDFaceSDKCommon.FeatureType type) {
// 濡傛灉鍙彁鍘荤壒寰侊紝涓嶅仛妫�绱紝姝ゅ杩斿洖
@@ -1135,40 +1197,46 @@
livenessModel.setFeatureCode(featureSize);
return;
}
+
// 濡傛灉鎻愬彇鐗瑰緛+妫�绱紝璋冪敤search 鏂规硶
if (featureSize == FEATURE_SIZE / 4) {
long startFeature = System.currentTimeMillis();
// 鐗瑰緛鎻愬彇鎴愬姛
+
// TODO 闃堝�煎彲浠ユ牴鎹笉鍚屾ā鍨嬭皟鏁�
if (featureCheckMode == 3) {
- //System.out.println("==isOk==>44");
+
List<? extends Feature> featureResult =
- faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 5, feature, false);
- //System.out.println("==isOk==>45");
+ faceModel.getFaceSearch().search(type, bdFaceCheckConfig.scoreThreshold, 2, feature, false);
+
// TODO 杩斿洖top num = 1 涓暟鎹泦鍚堬紝姝ゅ鍙互浠绘剰璁剧疆锛屼細杩斿洖姣斿浠庡ぇ鍒板皬鎺掑簭鐨刵um 涓暟鎹泦鍚�
if (featureResult != null && featureResult.size() > 0) {
- //System.out.println("==isOk==>鍖归厤鍒版暟閲�"+featureResult.size());
- User user = null;
- Feature topFeature = null;
if(TextUtils.isEmpty(groupId)){
- //涓虹┖锛岄渶瑕佹帓搴忥紝浼樺厛鍙栦細鍛�
- for(Feature feat:featureResult) {
- threholdScore = bdFaceCheckConfig.scoreThreshold;
- if (feat != null && feat.getScore() > threholdScore) {
- User userOld = FaceApi.getInstance().getUserListById(feat.getId());
- //System.out.println("==isOk==>鍖归厤鍒扮被鍨�:"+userOld.getUserName());
- if("1".equals(userOld.getGroupId())){
- user = userOld;
- topFeature = feat;
- break;
- }else if(user==null){
- user = userOld;
- topFeature = feat;
- }
+ // 鑾峰彇绗竴涓暟鎹�
+ Feature topFeature = featureResult.get(0);
+ // 鍒ゆ柇绗竴涓槇鍊兼槸鍚﹀ぇ浜庤瀹氶槇鍊硷紝濡傛灉澶т簬锛屾绱㈡垚鍔�
+ threholdScore = bdFaceCheckConfig.scoreThreshold;
+ if (topFeature != null && topFeature.getScore() > threholdScore) {
+ // 褰撳墠featureEntity 鍙湁id+feature 绱㈠紩锛屽湪鏁版嵁搴撲腑鏌ュ埌瀹屾暣淇℃伅
+ User user = FaceApi.getInstance().getUserListById(topFeature.getId());
+ if (user != null) {
+ IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
+ // Log.d("Attend", "add user:" + user.getUserInfo() + " index:" + index);
+ livenessModel.addIdentifyResult(idResult);
+ livenessModel.setUser(user);
+ livenessModel.setFeatureScore(topFeature.getScore());
+
+ setFail(livenessModel);
+ } else {
+ setFail(livenessModel);
}
+ } else {
+ setFail(livenessModel);
}
}else {
//鍙彇璇ョ被鍨嬬敤鎴�
+ User user = null;
+ Feature topFeature = null;
for(Feature feat:featureResult) {
// 鑾峰彇鏁版嵁
// 鍒ゆ柇闃堝�兼槸鍚﹀ぇ浜庤瀹氶槇鍊硷紝濡傛灉澶т簬锛屾绱㈡垚鍔�
@@ -1184,17 +1252,16 @@
}
}
}
- }
- if (user != null) {
- //System.out.println("==isOk==>鍖归厤鍒�");
- IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
- livenessModel.addIdentifyResult(idResult);
- livenessModel.setUser(user);
- livenessModel.setFeatureScore(topFeature.getScore());
- setFail(livenessModel);
- } else {
- //IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
- setFail(livenessModel);
+ if (user != null&&topFeature!=null) {
+ //System.out.println("==isOk==>鍖归厤鍒�");
+ IdentifyResult idResult = new IdentifyResult(user, index, topFeature.getScore());
+ livenessModel.addIdentifyResult(idResult);
+ livenessModel.setUser(user);
+ livenessModel.setFeatureScore(topFeature.getScore());
+ setFail(livenessModel);
+ } else {
+ setFail(livenessModel);
+ }
}
} else {
setFail(livenessModel);
@@ -1202,13 +1269,13 @@
} else if (featureCheckMode == 4) {
// 鐩墠浠呮敮鎸�
float score =
- faceModel
- .getFaceSearch()
- .compare(
- BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
- livenessModel.getFeature(),
- secondFeature,
- true);
+ faceModel
+ .getFaceSearch()
+ .compare(
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_ID_PHOTO,
+ livenessModel.getFeature(),
+ secondFeature,
+ true);
livenessModel.setScore(score);
if (score > threholdScore) {
/*faceId = livenessModel.getFaceInfo().faceID;
@@ -1235,11 +1302,11 @@
* @param faceDetectCallBack
*/
public void onDetectSilentLiveCheck(
- final BDFaceImageConfig bdFaceImageConfig,
- final BDFaceImageConfig bdNirFaceImageConfig,
- final BDFaceImageConfig bdDepthFaceImageConfig,
- final BDFaceCheckConfig bdFaceCheckConfig,
- final FaceDetectCallBack faceDetectCallBack) {
+ final BDFaceImageConfig bdFaceImageConfig,
+ final BDFaceImageConfig bdNirFaceImageConfig,
+ final BDFaceImageConfig bdDepthFaceImageConfig,
+ final BDFaceCheckConfig bdFaceCheckConfig,
+ final FaceDetectCallBack faceDetectCallBack) {
long startTime = System.currentTimeMillis();
// 鍒涘缓妫�娴嬬粨鏋滃瓨鍌ㄦ暟鎹�
LivenessModel livenessModel = new LivenessModel();
@@ -1248,44 +1315,44 @@
BDFaceImageInstance rgbInstance = getBdImage(bdFaceImageConfig, bdFaceCheckConfig.darkEnhance);
livenessModel.setTestBDFaceImageInstanceDuration(System.currentTimeMillis() - startTime);
onTrack(
- rgbInstance,
- livenessModel,
- new DetectListener() {
- @Override
- public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
+ rgbInstance,
+ livenessModel,
+ new DetectListener() {
+ @Override
+ public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
- // 淇濆瓨浜鸿劯鐗瑰緛鐐�
- livenessModel.setLandmarks(faceInfos[0].landmarks);
- // 淇濆瓨浜鸿劯鍥剧墖
- livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
- // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
- if (faceDetectCallBack != null) {
- faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
- }
- // 閫佹璇嗗埆
- onSilentLivenessCheck(
- rgbInstance,
- bdNirFaceImageConfig,
- bdDepthFaceImageConfig,
- bdFaceCheckConfig,
- livenessModel,
- startTime,
- faceDetectCallBack,
- faceInfos);
- }
-
- @Override
- public void onDetectFail() {
- // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
- if (faceDetectCallBack != null) {
- faceDetectCallBack.onFaceDetectCallback(null);
+ // 淇濆瓨浜鸿劯鐗瑰緛鐐�
+ livenessModel.setLandmarks(faceInfos[0].landmarks);
+ // 淇濆瓨浜鸿劯鍥剧墖
livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
- faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
- faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+ // 璋冪敤缁樺埗浜鸿劯妗嗘帴鍙�
+ if (faceDetectCallBack != null) {
+ faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+ }
+ // 閫佹璇嗗埆
+ onSilentLivenessCheck(
+ rgbInstance,
+ bdNirFaceImageConfig,
+ bdDepthFaceImageConfig,
+ bdFaceCheckConfig,
+ livenessModel,
+ startTime,
+ faceDetectCallBack,
+ faceInfos);
}
- }
- });
+ @Override
+ public void onDetectFail() {
+ // 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
+ if (faceDetectCallBack != null) {
+ faceDetectCallBack.onFaceDetectCallback(null);
+ livenessModel.setBdFaceImageInstance(rgbInstance.getImage());
+ faceDetectCallBack.onFaceDetectDarwCallback(livenessModel);
+ faceDetectCallBack.onTip(0, "鏈娴嬪埌浜鸿劯");
+ }
+ rgbInstance.destory();
+ }
+ });
}
/**
@@ -1299,37 +1366,35 @@
* @param faceDetectCallBack
*/
public void onSilentLivenessCheck(
- final BDFaceImageInstance rgbInstance,
- final BDFaceImageConfig nirBDFaceImageConfig,
- final BDFaceImageConfig depthBDFaceImageConfig,
- final BDFaceCheckConfig bdFaceCheckConfig,
- final LivenessModel livenessModel,
- final long startTime,
- final FaceDetectCallBack faceDetectCallBack,
- final FaceInfo[] fastFaceInfos) {
+ final BDFaceImageInstance rgbInstance,
+ final BDFaceImageConfig nirBDFaceImageConfig,
+ final BDFaceImageConfig depthBDFaceImageConfig,
+ final BDFaceCheckConfig bdFaceCheckConfig,
+ final LivenessModel livenessModel,
+ final long startTime,
+ final FaceDetectCallBack faceDetectCallBack,
+ final FaceInfo[] fastFaceInfos) {
if (future2 != null && !future2.isDone()) {
// 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-
+ rgbInstance.destory();
return;
}
future2 =
- es2.submit(
- new Runnable() {
+ es2.submit(
+ new Runnable() {
- @Override
- public void run() {
- try {
- onDetect(
- bdFaceCheckConfig,
- rgbInstance,
- fastFaceInfos,
- livenessModel,
- new DetectListener() {
- @Override
- public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
- try {
+ @Override
+ public void run() {
+ onDetect(
+ bdFaceCheckConfig,
+ rgbInstance,
+ fastFaceInfos,
+ livenessModel,
+ new DetectListener() {
+ @Override
+ public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
// 浜鸿劯id璧嬪��
if (mLastFaceId != fastFaceInfos[0].faceID) {
mLastFaceId = fastFaceInfos[0].faceID;
@@ -1337,7 +1402,7 @@
mNirLiveList.clear();
}
if (bdFaceCheckConfig == null) {
-
+ rgbInstance.destory();
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
}
@@ -1346,7 +1411,7 @@
// 鏈�浼樹汉鑴告帶鍒�
if (!onBestImageCheck(livenessModel, bdFaceCheckConfig, faceDetectCallBack)) {
livenessModel.setQualityCheck(true);
-
+ rgbInstance.destory();
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
}
@@ -1471,7 +1536,7 @@
System.currentTimeMillis() - startTime);
// LogUtils.e(TIME_TAG, "all process time = " + livenessModel.getAllDetectDuration());
// 娴佺▼缁撴潫閿�姣佸浘鐗囷紝寮�濮嬩笅涓�甯у浘鐗囨娴嬶紝鍚︾潃鍐呭瓨娉勯湶
-
+ rgbInstance.destory();
// 鏄剧ず鏈�缁堢粨鏋滄彁绀�
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
@@ -1483,34 +1548,24 @@
livenessModel.setQualityOcclusion(occlusionFail);
livenessModel.setQualityDetect(detectFail);
livenessModel.setQualityCheck(true);
-
+ rgbInstance.destory();
if (faceDetectCallBack != null) {
faceDetectCallBack.onFaceDetectCallback(livenessModel);
}
}
});
- }catch (RuntimeException e){
- faceDetectCallBack.onTip(1,e.getMessage());
- }catch (Exception e){
- faceDetectCallBack.onTip(1,e.getMessage());
}
- }
- @Override
- public void onDetectFail() {
+ @Override
+ public void onDetectFail() {
- if (faceDetectCallBack != null) {
- faceDetectCallBack.onFaceDetectCallback(livenessModel);
+ if (faceDetectCallBack != null) {
+ faceDetectCallBack.onFaceDetectCallback(livenessModel);
+ }
}
- }
- });
- }catch (RuntimeException e){
- faceDetectCallBack.onTip(1,e.getMessage());
- }catch (Exception e){
- faceDetectCallBack.onTip(1,e.getMessage());
- }
- }
- });
+ });
+ }
+ });
}
private void onTrack(BDFaceImageInstance rgbInstance, LivenessModel livenessModel, DetectListener detectListener) {
@@ -1579,10 +1634,10 @@
* @return
*/
public void onQualityCheck(
- final FaceInfo[] faceInfos,
- final BDQualityConfig bdQualityConfig,
- final FaceDetectCallBack faceDetectCallBack,
- final QualityListener qualityListener) {
+ final FaceInfo[] faceInfos,
+ final BDQualityConfig bdQualityConfig,
+ final FaceDetectCallBack faceDetectCallBack,
+ final QualityListener qualityListener) {
if (bdQualityConfig == null) {
qualityListener.onQualitySuccess();
@@ -1667,7 +1722,7 @@
}
}
if (!TextUtils.isEmpty(stringBufferDetected.toString())
- || !TextUtils.isEmpty(stringBufferOcclusion.toString())) {
+ || !TextUtils.isEmpty(stringBufferOcclusion.toString())) {
if (!TextUtils.isEmpty(stringBufferDetected.toString())) {
detectFail = stringBufferDetected.toString();
}
@@ -1695,9 +1750,9 @@
* @return
*/
public boolean onQualityCheck(
- final FaceInfo[] faceInfos,
- final BDQualityConfig bdQualityConfig,
- final FaceDetectCallBack faceDetectCallBack) {
+ final FaceInfo[] faceInfos,
+ final BDQualityConfig bdQualityConfig,
+ final FaceDetectCallBack faceDetectCallBack) {
if (bdQualityConfig == null) {
return true;
@@ -1795,7 +1850,7 @@
* @return
*/
public boolean onPersonQualityCheck(
- final FaceInfo faceInfo, final BDQualityConfig bdQualityConfig, final FaceDetectCallBack faceDetectCallBack) {
+ final FaceInfo faceInfo, final BDQualityConfig bdQualityConfig, final FaceDetectCallBack faceDetectCallBack) {
if (bdQualityConfig == null) {
return true;
@@ -1877,31 +1932,28 @@
* rightCheek 鍙宠噳閬搵寰楀垎
*/
private boolean selectQuality(
- float bluriness,
- float leftEye,
- float rightEye,
- float nose,
- float mouth,
- float leftCheek,
- float rightCheek,
- float chin) {
+ float bluriness,
+ float leftEye,
+ float rightEye,
+ float nose,
+ float mouth,
+ float leftCheek,
+ float rightCheek,
+ float chin) {
return bluriness < 0.5
- && leftEye < 0.75
- && rightEye < 0.75
- && nose < 0.75
- && mouth < 0.75
- && leftCheek < 0.75
- && rightCheek < 0.75
- && chin < 0.7;
+ && leftEye < 0.75
+ && rightEye < 0.75
+ && nose < 0.75
+ && mouth < 0.75
+ && leftCheek < 0.75
+ && rightCheek < 0.75
+ && chin < 0.7;
}
// 浜鸿瘉鏍搁獙鐗瑰緛鎻愬彇
public float personDetect(
- final Bitmap bitmap, final byte[] feature, final BDFaceCheckConfig bdFaceCheckConfig, Context context) {
- if(bitmap==null||bitmap.isRecycled()){
- return -1;
- }
+ final Bitmap bitmap, final byte[] feature, final BDFaceCheckConfig bdFaceCheckConfig, Context context) {
BDFaceImageInstance rgbInstance = new BDFaceImageInstance(bitmap);
float ret = -1;
FaceInfo[] faceInfos;
@@ -1909,14 +1961,14 @@
if (bdFaceCheckConfig != null) {
bdFaceCheckConfig.bdFaceDetectListConfig.usingDetect = true;
faceInfos =
- faceModel
- .getFaceDetectPerson()
- .detect(
- BDFaceSDKCommon.DetectType.DETECT_VIS,
- BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
- rgbInstance,
- null,
- bdFaceCheckConfig.bdFaceDetectListConfig);
+ faceModel
+ .getFaceDetectPerson()
+ .detect(
+ BDFaceSDKCommon.DetectType.DETECT_VIS,
+ BDFaceSDKCommon.AlignType.BDFACE_ALIGN_TYPE_RGB_ACCURATE,
+ rgbInstance,
+ null,
+ bdFaceCheckConfig.bdFaceDetectListConfig);
} else {
faceInfos = faceModel.getFaceDetectPerson().detect(BDFaceSDKCommon.DetectType.DETECT_VIS, rgbInstance);
}
@@ -1924,19 +1976,19 @@
// 鍒ゆ柇璐ㄩ噺妫�娴嬶紝閽堝妯$硦搴︺�侀伄鎸°�佽搴�
if (onPersonQualityCheck(faceInfos[0], bdQualityConfig, new FaceQualityBack(context))) {
ret =
- faceModel
- .getFacePersonFeature()
- .feature(
- BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
- rgbInstance,
- faceInfos[0].landmarks,
- feature);
+ faceModel
+ .getFacePersonFeature()
+ .feature(
+ BDFaceSDKCommon.FeatureType.BDFACE_FEATURE_TYPE_LIVE_PHOTO,
+ rgbInstance,
+ faceInfos[0].landmarks,
+ feature);
}
} else {
-
+ rgbInstance.destory();
return -1;
}
-
+ rgbInstance.destory();
return ret;
}
}
--
Gitblit v1.9.3