Flutter活体检测插件caf_face_liveness的使用
Flutter活体检测插件caf_face_liveness的使用
FaceLiveness SDK 将尖端的面部验证和指纹认证技术引入到您的 Flutter 应用程序中,为用户提供了一种无缝且安全的身份验证方式。
文档
查看我们为该 SDK 插件提供的专用文档页面。详情请参见 Caf 的官方文档。
要求
Flutter
Flutter | 版本 |
---|---|
Flutter | 1.20+ |
Dart | >=2.15.0 <4.0.0 |
Android
Android | 版本 |
---|---|
minSdk | 21 |
compileSdk | 34 |
iOS
iOS | 版本 |
---|---|
iOS Target | 13.0+ |
Xcode | 15.4+ |
Swift | 5.3.2+ |
示例代码
以下是 caf_face_liveness
插件的基本使用示例:
import 'package:bmprogresshud/bmprogresshud.dart';
import 'package:caf_face_liveness/face_liveness.dart';
import 'package:caf_face_liveness/face_liveness_enums.dart';
import 'package:caf_face_liveness/face_liveness_events.dart';
import 'package:caf_face_liveness/reverse_proxy_settings.dart';
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({Key? key}) : super(key: key);
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
var _scanInProgress = false;
String _result = "";
String _description = "";
String mobileToken = "";
String personId = "";
var personIdController = TextEditingController();
var mobileTokenController = TextEditingController();
bool isBeta = true;
[@override](/user/override)
void initState() {
super.initState();
}
void startFaceLiveness() {
personId = personIdController.text;
mobileToken = mobileTokenController.text;
setState(() {
_scanInProgress = true;
_result = "";
_description = "";
});
ProgressHud.show(ProgressHudType.loading, 'Launching SDK');
FaceLiveness faceLiveness =
FaceLiveness(mobileToken: mobileToken, personId: personId);
faceLiveness.setStage(isBeta ? CafStage.beta : CafStage.prod);
faceLiveness.setCameraFilter(CameraFilter.natural);
faceLiveness.setEnableScreenshots(true);
faceLiveness.setEnableLoadingScreen(false);
// 设置其他参数
final stream = faceLiveness.start();
stream.listen((event) {
if (event.isFinal) {
setState(() => _scanInProgress = false);
}
if (event is FaceLivenessEventConnecting) {
ProgressHud.show(ProgressHudType.loading, 'Loading...');
} else if (event is FaceLivenessEventConnected) {
ProgressHud.dismiss();
} else if (event is FaceLivenessEventClosed) {
ProgressHud.dismiss();
setState(() {
_result = 'Canceled';
_description = '用户关闭了 SDK';
});
} else if (event is FaceLivenessEventSuccess) {
ProgressHud.showAndDismiss(ProgressHudType.success, 'Success!');
setState(() {
_result = 'Success!';
_description = '\nSignedResponse: ${event.signedResponse}';
});
print(
'SDK 完成成功!\nSignedResponse: ${event.signedResponse}');
} else if (event is FaceLivenessEventFailure) {
ProgressHud.showAndDismiss(ProgressHudType.error, event.errorType!);
setState(() {
_result = 'Failure!';
_description = personId.isEmpty
? '\n错误类型: ${event.errorType} \n错误信息: personId 是空的'
: '\n错误类型: ${event.errorType} \n错误信息: ${event.errorDescription}';
});
print(
'SDK 完成失败!\n错误类型: ${event.errorType} \n错误信息: ${event.errorDescription}');
}
});
if (!mounted) return;
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('FaceLiveness Demo'),
),
body: ProgressHud(
isGlobalHud: true,
child: Container(
margin: const EdgeInsets.all(20.0),
child: Column(
children: [
Row(
children: [
Expanded(
child: TextField(
controller: mobileTokenController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '在这里输入 mobileToken',
),
),
)
],
),
const SizedBox(height: 10.0),
Row(
children: [
Expanded(
child: TextField(
controller: personIdController,
decoration: const InputDecoration(
border: OutlineInputBorder(),
labelText: '在这里输入您的ID/CPF',
),
),
)
],
),
Row(
children: [
Expanded(
child: SwitchListTile(
title: const Text('Beta'),
value: isBeta,
onChanged: (bool value) {
setState(() {
isBeta = value;
});
}),
)
],
),
Row(
children: [
ElevatedButton(
onPressed: _scanInProgress
? null
: () {
startFaceLiveness();
},
child: const Text('开始面部验证'),
)
],
),
Row(
children: [
Container(
margin: const EdgeInsets.only(top: 10.0),
child: Text("结果: $_result"))
],
),
Row(
mainAxisAlignment: MainAxisAlignment.spaceBetween,
children: [
Expanded(
child: Text("描述:\n$_description",
maxLines: 15,
overflow: TextOverflow.ellipsis),
)
],
),
],
)))));
}
}
更多关于Flutter活体检测插件caf_face_liveness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter活体检测插件caf_face_liveness的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中集成和使用caf_face_liveness
插件进行活体检测的示例代码。caf_face_liveness
插件通常用于在应用中实现人脸识别和活体检测功能,确保用户是真实的人而不是照片或视频。
步骤 1: 添加依赖
首先,在你的Flutter项目的pubspec.yaml
文件中添加caf_face_liveness
依赖:
dependencies:
flutter:
sdk: flutter
caf_face_liveness: ^最新版本号 # 请替换为实际最新版本号
然后运行flutter pub get
来安装依赖。
步骤 2: 配置Android权限
由于活体检测通常涉及相机访问,你需要在android/app/src/main/AndroidManifest.xml
中添加相机权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />
<!-- 其他配置 -->
</manifest>
步骤 3: 实现活体检测功能
在你的Dart代码中,你可以按照以下方式使用caf_face_liveness
插件:
import 'package:flutter/material.dart';
import 'package:caf_face_liveness/caf_face_liveness.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
final FaceLiveness _faceLiveness = FaceLiveness();
bool _isDetecting = false;
bool _isLive = false;
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('活体检测示例'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_isDetecting ? '检测中...' : '点击开始检测',
style: TextStyle(fontSize: 24),
),
SizedBox(height: 20),
ElevatedButton(
onPressed: _startDetection,
child: Text('开始检测'),
),
SizedBox(height: 20),
Text(
_isLive ? '活体' : '非活体',
style: TextStyle(fontSize: 24, color: _isLive ? Colors.green : Colors.red),
),
],
),
),
),
);
}
Future<void> _startDetection() async {
setState(() {
_isDetecting = true;
_isLive = false;
});
try {
final result = await _faceLiveness.startDetection(
resultCallback: (LiveResult result) {
setState(() {
_isDetecting = false;
_isLive = result.isLive;
});
},
errorCallback: (String error) {
setState(() {
_isDetecting = false;
print('Error: $error');
});
},
);
// 如果需要,可以在这里处理result,但回调中通常已经处理
} catch (e) {
setState(() {
_isDetecting = false;
print('Exception: $e');
});
}
}
}
注意事项
- 权限请求:在实际应用中,你需要请求用户授予相机权限。这可以通过
permission_handler
等插件来实现。 - UI优化:上述代码仅用于演示,实际项目中你可能需要更复杂的UI和错误处理逻辑。
- 插件版本:确保你使用的是
caf_face_liveness
插件的最新稳定版本,并查阅其官方文档以获取最新和最准确的使用指南。
这样,你就可以在Flutter应用中集成并使用caf_face_liveness
插件进行活体检测了。