Flutter活体检测插件facial_liveness_detection_flutter_plugin的使用

Flutter活体检测插件facial_liveness_detection_flutter_plugin的使用

概述

人脸活体检测,支持静默,炫彩,眨眼,张嘴,摇头,点头,远近及随意动作组合,支持Android, IOS, H5, 小程序等 (可用于实人认证,刷脸认证,活体检测等场景)

插件地址:https://pub.dev/packages/facial_liveness_detection_flutter_plugin/example

演示视频

[DEMO]

插件API接口说明

引擎初始化
/**
 * 引擎初始化
 */
void initEngine()
认证初始化
/**
 * 初始化
 * @param options(JSONObject), 包括如下字段:
 *     livingType:认证类型  1:远近,2:眨眼,3:摇头,4: 点头,5:张嘴,6: 炫彩
 *                  支持多动作,如传入12表示先做远近活体,后做眨眼活体,一次最多支持4组动作
 *     textColor:界面样式-字体颜色
 *     progressColor:界面样式-进度条颜色
 *     progressBgColor:界面样式-进度条背景颜色
 *     progressStaGradient:界面样式-进度条渐变开始颜色
 *     progressEndGradient:界面样式-进度条渐变结束颜色
 *     backGroundColor:界面样式-页面背景颜色
 *     circleBackWidth:界面样式-进度条宽度
 *     language: 界面显示的语言(不分大小写),“CN”:中文,“TCN”: 繁体中文, “JP”: 日文,"KR": 韩文, “EN”: 英文,“THA”: 泰文
 *     autoUploadVeirfyMsg: boolean 是否直接从 SDK 上传认证信息,默认为 true
 *     visitedStepBorderDotColor:多动作导航的边框颜色, 如 #FFC0CB
 *     visitedStepFillDotColor: 完成步骤点的填充颜色, 如 #FFC0CB
 *     nextStepBorderDotColor: 下一步骤点的填充颜色, 如 #FFC0CB
 *     nextStepFillDotColor: 下一步骤点的填充颜色, 如 #FFC0CB
 *     visitedStepSeparatorColor:  当前步骤条的颜色, 如 #FFC0CB
 *     nextStepSeparatorColor: 下一步步骤条的颜色, 如 #FFC0CB
 *     exitIcon: 退出按钮图片(BASE64字符串)
 * @return 包括如下几个字段
 * {
 *    "code": ”ELD_SUCCESS“, -- ELD_SUCCESS:成功,ELD_FAILED:失败,ELD_PARAME_ERROR:参数异常,ELD_EXCEPTION:发生异常,ELD_UNSUPPORT:不支持此活体类型
 *    "msg":”成功“, -- 执行结果描述
 *    "data": "......" -- 执行结果数据
 * }
 */
Future<Map<String, dynamic>>? verifyInit(Map<String, dynamic> jsonData){
发起活体认证
/**
 * 执行活体认证
 * @param options(JSONObject), 包括如下字段:
 *     token:认证初始化服务器端返回的数据
 * @param 包括如下几个字段
 * {
 *      "code": ”ELD_SUCCESS“, -- ELD_SUCCESS:成功,ELD_FAILED:失败,ELD_PARAME_ERROR:参数异常,ELD_EXCEPTION:发生异常,ELD_TIMEOUT:执行超时,ELD_PERMISSION:无法获取相机授权,ELD_CANCEL: 用户主动退出
 *      "msg":”成功“, -- 执行结果描述
 *      "data": "......" -- 执行结果数据
 *      "token": "" -- 本次认证token
 * }
 */
Future<Map<String, dynamic>>? startLivingDetect(Map<String, dynamic> params){

页面样式修改

Android

[ANDROID STYLE]

iOS

[IOS STYLE]

其他信息

  1. 完整接入文档:https://esandinfo.yuque.com/yv6e1k/aa4qsg/hpxvm3vphsq4oh3g
  2. 后端管理控制台地址: http://openali.esandcloud.com
  3. 技术支持/定制化开发请联系

微信:esand_info qq: 3626921591 电话:13691664797 邮箱:reid.li@foxmail.com

[wechatqrcode]

示例代码

example/lib/main.dart

import 'dart:convert';

import 'package:flutter/material.dart';
import 'dart:async';
import 'package:flutter/services.dart';
import 'package:facial_liveness_detection_flutter_plugin/facial_liveness_detection_flutter_plugin.dart';
import 'package:http/http.dart' as http;
import 'package:facial_liveness_detection_flutter_plugin_example/net_utils.dart';

void main() {
  runApp(const MyApp());
}

class MyApp extends StatefulWidget {
  const MyApp();

  [@override](/user/override)
  State<MyApp> createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  final _FacialLivenessDetectionFlutterPluginPlugin = FacialLivenessDetectionFlutterPlugin();

  [@override](/user/override)
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    try {
      _FacialLivenessDetectionFlutterPluginPlugin.initEngine();
    } on PlatformException {

    }

    if (!mounted) return;
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('活体检测测试DEMO'),
        ),
        body: Column(
          children: [
            ElevatedButton(
              onPressed: () async {
                print('button pressed!');
                Map<String, dynamic> config = {
                  "livingType": 6, // 活体类型
                  "language": "THA", // 界面显示的语言(不分大小写),“CN”:中文,“TCN”: 繁体中文, “JP”: 日文,"KR": 韩文, “EN”: 英文,“THA”: 泰文
                  "autoUploadVeirfyMsg": true // 是否直接从 SDK 上传认证信息,默认为 true
                };

                // 1. 认证初始化
                Map<String, dynamic> result = await _FacialLivenessDetectionFlutterPluginPlugin.verifyInit(config) ?? {};
                String code = result['code'];
                String initMsg = result['data'];
                print("code" + result['code']);
                print("msg" + result['msg']);
                print("data" + result['data']);
                if (code == "ELD_SUCCESS") {
                  // 2. 获取认证TOKEN (认证授权)
                  Map<String, dynamic> initResBody = await init(initMsg);
                  if (initResBody.containsKey('token')) {
                    // 3. 发起活体认证,进行数据采集
                    Map<String, dynamic> verifyResult = await _FacialLivenessDetectionFlutterPluginPlugin.startLivingDetect({
                      "token": initResBody['token'],
                      "cameraID": "REAR"
                    }) ?? {};
                    print("code" + verifyResult['code']);
                    print("msg" + verifyResult['msg']);
                    print("data" + verifyResult['data']);
                    // 4. 获取认证结果
                    Map<String, dynamic> verifyResBody = await getVerifyResult(initResBody['token'], verifyResult['data']);
                    print(verifyResBody);
                  }
                }
              },
              child: Text('开始活体检测')
            )
          ]
        )
      ),
    );
  }
}

更多关于Flutter活体检测插件facial_liveness_detection_flutter_plugin的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter活体检测插件facial_liveness_detection_flutter_plugin的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


facial_liveness_detection_flutter_plugin 是一个用于 Flutter 的活体检测插件,可以帮助开发者集成活体检测功能到 Flutter 应用中。以下是如何使用该插件的基本步骤:

1. 添加依赖

首先,你需要在 pubspec.yaml 文件中添加插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  facial_liveness_detection_flutter_plugin: ^1.0.0 # 请使用最新版本

然后运行 flutter pub get 来获取依赖。

2. 导入插件

在需要使用活体检测的 Dart 文件中导入插件:

import 'package:facial_liveness_detection_flutter_plugin/facial_liveness_detection_flutter_plugin.dart';

3. 初始化插件

在使用插件之前,通常需要先进行初始化:

FacialLivenessDetectionFlutterPlugin.initialize();

4. 启动活体检测

你可以通过调用 startLivenessDetection 方法来启动活体检测:

try {
  final result = await FacialLivenessDetectionFlutterPlugin.startLivenessDetection();
  if (result['status'] == 'success') {
    // 活体检测成功
    print('Liveness detection succeeded: ${result['data']}');
  } else {
    // 活体检测失败
    print('Liveness detection failed: ${result['message']}');
  }
} catch (e) {
  // 处理异常
  print('Error during liveness detection: $e');
}

5. 处理结果

活体检测的结果会以 Map 的形式返回,通常包含 statusdatamessage 字段。你可以根据这些字段来判断检测是否成功,并处理相应的逻辑。

6. 配置选项(可选)

某些插件可能允许你通过传递参数来自定义活体检测的行为。例如:

final options = {
  'timeout': 30, // 设置超时时间
  'threshold': 0.8, // 设置活体检测的阈值
};

final result = await FacialLivenessDetectionFlutterPlugin.startLivenessDetection(options: options);

7. 处理权限

活体检测通常需要访问摄像头,因此你需要在 AndroidManifest.xmlInfo.plist 文件中添加相应的权限声明。

Android:

android/app/src/main/AndroidManifest.xml 中添加:

<uses-permission android:name="android.permission.CAMERA" />

iOS:

ios/Runner/Info.plist 中添加:

<key>NSCameraUsageDescription</key>
<string>We need access to your camera for liveness detection</string>

8. 处理生命周期(可选)

在某些情况下,你可能需要在应用的生命周期中管理插件的状态。例如,在 dispose 方法中释放资源:

[@override](/user/override)
void dispose() {
  FacialLivenessDetectionFlutterPlugin.dispose();
  super.dispose();
}
回到顶部