接口调用流程

1.初始化

  1. 创建LFLivenessSDK对象detector
  2. 通过detector调用createHandle()创建handle
    或者通过detector调用createHandle(String licenseName)创建handle,并传入license的名称
  3. 第二步成功后通过detector代用start(int config) config配置格式类似于int config = outputType | complexity

    a. outputType值有

     Constants.SINGLEIMG
    
     Constants.MULTIIMG
    
     Constants.VIDEO
    

    b. complexity值有

     Constants.EASY
    
     Constants.NORMAL
    
     Constants.HARD
    
     Constants.HELL
    

2.启动检测

  1. 跳转检测界面

    Bundle bundle = new Bundle();

    // OUTPUT_TYPE 配置, 传入的outputType类型为singleImg (单图),multiImg (多图),video(视频)

     bundle.putString(LivenessActivity.OUTTYPE,Constants.MULTIIMG);
    

    //EXTRA_MOTION_SEQUENCE 动作检测序列配置,支持四种检测动作, BLINK(眨眼), MOUTH(张嘴), NOD(点头), YAW(摇头), 各个动作以空格隔开。 推荐第一个动作为BLINK。默认配置为"BLINK MOUTH NOD YAW"

     bundle.putString(LivenessActivity.EXTRA_MOTION_SEQUENCE, "BLINK MOUTH NOD YAW");
    

    //SOUND_NOTICE 配置, 传入的soundNotice为boolean值,true为打开, false为关闭。

     bundle.putBoolean(LivenessActivity.SOUND_NOTICE, true);
    

    // COMPLEXITY 配置, 传入的complexity类型为normal,支持四种难度,easy, normal, hard, hell.

     bundle.putString(LivenessActivity.COMPLEXITY, Constants.NORMAL);
    
     Intent intent = new Intent();
     intent.setClass(this, LivenessActivity.class);
     intent.putExtras(bundle);
     //设置返回图片结果
     intent.putExtra(LivenessActivity.KEY_DETECT_IMAGE_RESULT, true);
     //设置返回video结果,video模式才会返回
     intent.putExtra(LivenessActivity.KEY_DETECT_VIDEO_RESULT, true);
     startActivityForResult(intent, KEY_TO_DETECT_REQUEST_CODE);
    
  2. 通过detector调用addSequentialInfo(int key, java.lang.String input)设置传感器信息(参考LFLiveness工程中的LFLivenessLibrary库里面的LivenessActivity.java中的onSensorChanged方法)

  3. 通过detector调用LFLivenessSDK.LFStatus status = detect(byte[] image, int width, int height,int rotateAngle, LFLivenessSDK.LFLivenessMotion motion)方法,其中images为图片byte数组格式的数据,width为图片宽度,height为图片高度,rotateAngle为相机的方向信息(mCameraInfo.orientation),motion为当前检测的动作

  4. 判断status.getDetectStatus() == LFLivenessSDK.LFDetectStatus.PASSED.getValue() && status.isPassed()则表示当前检测动作通过,可以进入下一个动作,循环检测,直到所有的动作完成

3.结束检测

调用end()结束检测

4.获取检测结果

  1. 通过detector调用getImageResult()获取活体检测保存的图片,返回数据格式为LFLivenessSDK.LFLivenessImageResult[]。LFLivenessSDK.LFLivenessImageResult[]结构体中包含了byte[] imageBytes(图片数据),int length(图片buffer大小),int motion(图片对应的动作)

  2. 通过detector调用getLivenessResult()获取活体检测保存的加密文件,返回格式为byte[]

  3. 通过detector调用getVideoResult()获取活体检测的视频文件(如果是video模式),返回格式为byte[]

5.释放检测对象

通过detector调用detector.destroy(),回收内存

6.onActivityResult接收数据

在onActivityResult中获取识别到的关键帧,如果当前输出模式是video模式获取视频信息

LFReturnResult imageResult = (LFReturnResult) data.getSerializableExtra(LivenessActivity.KEY_DETECT_IMAGE_RESULT);

//获取关键帧图像

```
LFLivenessSDK.LFLivenessImageResult[] imageResultArr = imageResult.getImageResults();

if (imageResultArr != null) {
    int size = imageResultArr.length;
    mTvResultCount.setText(size + "p");
    if (size > 0) {
           LFLivenessSDK.LFLivenessImageResult imageResult = imageResultArr[0];
           Bitmap imageBitmap = BitmapFactory.decodeByteArray(imageResult.image, 0, imageResult.image.length);
      }
 }

 //视频信息的存储路径
 String path  = mImageResult.getVideoResultPath();

results matching ""

    No results matching ""