weimingfei
2 天以前 542c054c6904021e067364914fbf6b3947c5039b
keyCabinet-android/datalibrary/src/main/java/com/example/datalibrary/manager/FaceSDKManager.java
@@ -565,7 +565,7 @@
                    @Override
                    public void run() {
                        try {
                        // 获取BDFaceCheckConfig配置信息
                        if (bdFaceCheckConfig == null) {
@@ -580,6 +580,8 @@
                                @Override
                                public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
                                            try {
                                    // 人脸id赋值
                                    if (mLastFaceId != fastFaceInfos[0].faceID) {
@@ -849,6 +851,11 @@
                                    if (faceDetectCallBack != null) {
                                        faceDetectCallBack.onFaceDetectCallback(livenessModel);
                                    }
                                            }catch (RuntimeException e){
                                                faceDetectCallBack.onTip(1,e.getMessage());
                                            }catch (Exception e){
                                                faceDetectCallBack.onTip(1,e.getMessage());
                                            }
                                }
                                @Override
@@ -859,6 +866,11 @@
                                    }
                                }
                            });
                        }catch (RuntimeException e){
                            faceDetectCallBack.onTip(1,e.getMessage());
                        }catch (Exception e){
                            faceDetectCallBack.onTip(1,e.getMessage());
                        }
                    }
                });
    }
@@ -884,82 +896,6 @@
            }
        }
        return isBestImageCheck;
    }
    /**
     * 特征提取-人脸识别比对
     *
     * @param rgbInstance      可见光底层送检对象
     * @param landmark         检测眼睛,嘴巴,鼻子,72个关键点
     * @param faceInfos        nir人脸数据
     * @param nirInstance      nir 图像句柄
     * @param livenessModel    检测结果数据集合
     * @param featureCheckMode 特征抽取模式【不提取特征:1】;【提取特征:2】;【提取特征+1:N检索: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);
        }
    }
    /**
@@ -1384,6 +1320,7 @@
                    @Override
                    public void run() {
                        try {
                        onDetect(
                            bdFaceCheckConfig,
                            rgbInstance,
@@ -1392,6 +1329,7 @@
                            new DetectListener() {
                                @Override
                                public void onDetectSuccess(FaceInfo[] faceInfos, BDFaceImageInstance rgbInstance) {
                                            try {
                                    // 人脸id赋值
                                    if (mLastFaceId != fastFaceInfos[0].faceID) {
                                        mLastFaceId = fastFaceInfos[0].faceID;
@@ -1551,6 +1489,11 @@
                                                }
                                            }
                                        });
                                            }catch (RuntimeException e){
                                                faceDetectCallBack.onTip(1,e.getMessage());
                                            }catch (Exception e){
                                                faceDetectCallBack.onTip(1,e.getMessage());
                                            }
                                }
                                @Override
@@ -1561,6 +1504,11 @@
                                    }
                                }
                            });
                        }catch (RuntimeException e){
                            faceDetectCallBack.onTip(1,e.getMessage());
                        }catch (Exception e){
                            faceDetectCallBack.onTip(1,e.getMessage());
                        }
                    }
                });
    }