目录

应用开发

  1. 导入人脸识别的相关的类。
    /* 人脸识别能力类 */
    import com.huawei.facerecognition.FaceManager;
    /* 人脸识别实例工厂类 */
    import com.huawei.facerecognition.HwFaceManagerFactory;
  2. 调用HwFaceManagerFactory.getFaceManager接口获取人脸识别的实例。
    FaceManager faceManager = HwFaceManagerFactory.getFaceManager(getApplicationContext());
  3. 按照使用示例完成功能开发。
    /* 人脸识别取消信号初始化 */
    CancellationSignal signal = null;
    if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN) {
        signal = new CancellationSignal();
    }
    
    /* 人脸识别回调初始化 */
    FaceManager.AuthenticationCallback callback = new FaceManager.AuthenticationCallback() {
        @Override
        public void onAuthenticationError(int errMsgId, CharSequence errString) {
            /* 人脸识别过程中错误信息回调函数,返回识别过程中错误信息 */
        }
    
        @Override
        public void onAuthenticationHelp(int helpMsgId, CharSequence helpString) {
            /* 人脸识别过程中提示信息回调函数,返回识别过程中提示信息 */
        }
    
        @Override
        public void onAuthenticationSucceeded(FaceManager.AuthenticationResult result) {
            /* 人脸识别成功回调函数,表明本次人脸识别成功 */
        }
    
        @Override
        public void onAuthenticationFailed() {
            /* 人脸识别失败回调函数,表明本次人脸识别失败 */
        }
    };
    
    /* 发起一次人脸识别 */
    if (faceManager != null) {
        boolean isSupport = false;
        boolean isEnrolled = false;
        boolean is3D = false;
    
        try {
            /* 获取人脸识别能力 */
            FaceManager.FaceRecognitionCapability capability = faceManager.getFaceRecognitionCapability();
            if (capability == null) {
                Log.e(TAG, "capability is null");
                return;
            }
            isSupport = capability.isSupport;
            isEnrolled = capability.isEnrolled;
            is3D = capability.is3D;
        } catch (NoSuchMethodError e) {
            /* EMUI 11.0.1之前版本, getFaceRecognitionCapability方法不存在,使用老接口获取人脸识别能力 */
            isSupport = faceManager.isHardwareDetected();
            isEnrolled = faceManager.hasEnrolledTemplates();
            /* EMUI 11.0.1之前版本, 仅支持3D人脸识别 */
            is3D = true;
        }
    
        /* 检查当前设备是否支持人脸识别 */
        if (isSupport) {
            /* 检查当前设备是否已录入人脸 */
            if (isEnrolled) {
                /* 显示当前设备是否支持3D人脸 */
                modality.setText("Face Recognition Modality: " + (is3D ? "3D" : "2D"));
                /* 调用人脸识别功能 */
                faceManager.authenticate(null, signal, 0, callback, null);
            } else {
                ShowToastUtils.showToast(MainActivity.this, "No enrolled face", Toast.LENGTH_SHORT);
            }
        } else {
            ShowToastUtils.showToast(MainActivity.this, "This device does not support face recognition",
                Toast.LENGTH_SHORT);
        }
    }