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]
- H5 体验DEMO链接:https://dev.esandcloud.com/h5demo/esand/living
插件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]
其他信息
- 完整接入文档:https://esandinfo.yuque.com/yv6e1k/aa4qsg/hpxvm3vphsq4oh3g
- 后端管理控制台地址: http://openali.esandcloud.com
- 技术支持/定制化开发请联系
微信: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
更多关于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
的形式返回,通常包含 status
和 data
或 message
字段。你可以根据这些字段来判断检测是否成功,并处理相应的逻辑。
6. 配置选项(可选)
某些插件可能允许你通过传递参数来自定义活体检测的行为。例如:
final options = {
'timeout': 30, // 设置超时时间
'threshold': 0.8, // 设置活体检测的阈值
};
final result = await FacialLivenessDetectionFlutterPlugin.startLivenessDetection(options: options);
7. 处理权限
活体检测通常需要访问摄像头,因此你需要在 AndroidManifest.xml
和 Info.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();
}