Flutter活体检测插件liveness_azure_flutter的使用

Flutter活体检测插件liveness_azure_flutter的使用

检查文档

您可以在 Pub.Dev 查看此插件的详细信息。

支持平台

以下是该插件在不同平台上的支持情况:

功能 Android iOS Linux macOS Web Windows
支持 SDK 24+ iOS 14+ 不支持 不支持 不支持 不支持

配置步骤

Android配置

要生成 accessToken,请参考以下步骤:
获取Face Artifacts访问权限

然后在您的 gradle.properties 文件中添加以下内容(更多信息可参考:Android Azure AI):

maveUser=any_user
mavenPassword=accessToken
iOS配置

同样需要生成 accessToken,请参考以下步骤:
获取Face Artifacts访问权限

在您的 Podfile 中添加以下内容:

source 'https://github.com/CocoaPods/Specs.git'
source 'https://msface.visualstudio.com/SDK/_git/AzureAIVisionCore.podspec'
source 'https://msface.visualstudio.com/SDK/_git/AzureAIVisionFace.podspec'

Info.plist 文件中添加以下键值对:

<key>NSCameraUsageDescription</key>
<string>描述相机用途...</string>
<key>NSMicrophoneUsageDescription</key>
<string>描述麦克风用途...</string>

在Xcode中可能会弹出一个窗口请求用户名和密码。您可以设置一个随机用户名,并将上一步生成的 accessToken 作为密码。

更多信息可参考:iOS Azure AI


开始使用

完成配置后,您可以按以下方式初始化和调用插件:

import 'package:liveness_azure_flutter/liveness_azure_flutter.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter/material.dart';
import 'dart:async';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

class _MyAppState extends State<MyApp> {
  // 请求相机权限
  Future<PermissionStatus> requestCameraPermission() async {
    return Permission.camera.request();
  }

  Future initLiveness() async {
    // 检查是否已获得相机权限
    if (await requestCameraPermission() == PermissionStatus.granted) {
      // 获取会话令牌(不建议在实际项目中直接使用这种方式,应从客户端后端获取)
      final session = await LivenessAzureFlutter.createSession(
          faceApiEndpoint: 'yourFaceApiEndpoint', apiKey: 'apikey1234');

      if (session != null) {
        try {
          // 初始化活体检测
          final liveness = await LivenessAzureFlutter.initLiveness(
              authTokenSession: session.authSession,

              // 自定义反馈文字(也可选择默认值或葡萄牙语主题 LivenessTheme.pt())
              theme: const LivenessTheme(
                  feedbackNone: 'Hold Still.',
                  feedbackLookAtCamera: 'Look at camera.',
                  feedbackFaceNotCentered: 'Center your face in the circle.',
                  feedbackMoveCloser: 'Too far away! Move in closer.',
                  feedbackContinueToMoveCloser: 'Continue to move closer.',
                  feedbackMoveBack: 'Too close! Move farther away.',
                  feedbackReduceMovement: 'Too much movement.',
                  feedbackSmile: 'Smile for the camera!',
                  feedbackAttentionNotNeeded: 'Done, finishing up...'));

          print('liveness result: ${liveness?.resultId}');
        } catch (msg, stacktrace) {
          // 错误处理
        }
      }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(title: const Text('插件示例')),
            body: Center(
                child: FutureBuilder(
                    future: requestCameraPermission(),
                    builder: (context, snapshot) {
                      if (snapshot.connectionState != ConnectionState.done) {
                        return const CircularProgressIndicator();
                      }

                      return TextButton(
                          onPressed: initLiveness,
                          child: const Text("开始活体检测"));
                    })));
  }
}

示例代码

以下是一个完整的示例代码,展示如何集成和使用 liveness_azure_flutter 插件:

import 'package:liveness_azure_flutter/liveness_azure_flutter.dart';
import 'package:permission_handler/permission_handler.dart';
import 'package:flutter/material.dart';
import 'dart:async';

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

class MyApp extends StatefulWidget {
  const MyApp({super.key});

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

class _MyAppState extends State<MyApp> {
  Future<PermissionStatus> requestCameraPermission() async {
    return Permission.camera.request();
  }

  Future initLiveness() async {
    if (await requestCameraPermission() == PermissionStatus.granted) {
      final session = await LivenessAzureFlutter.createSession(
          faceApiEndpoint: 'yourFaceApiEndpoint', apiKey: 'apikey1234');

      if (session != null) {
        try {
          final liveness = await LivenessAzureFlutter.initLiveness(
              authTokenSession: session.authSession,
              theme: const LivenessTheme(
                  feedbackNone: '保持静止.',
                  feedbackLookAtCamera: '看向摄像头.',
                  feedbackFaceNotCentered: '将脸放在圆圈中央.',
                  feedbackMoveCloser: '太远了!靠近一点.',
                  feedbackContinueToMoveCloser: '继续靠近.',
                  feedbackMoveBack: '太近了!远离一些.',
                  feedbackReduceMovement: '移动过多.',
                  feedbackSmile: '对镜头微笑!',
                  feedbackAttentionNotNeeded: '完成,正在结束...'));

          print('活体检测结果: ${liveness?.resultId}');
        } catch (msg, stacktrace) {
          // 错误处理
        }
      }
    }
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
        home: Scaffold(
            appBar: AppBar(title: const Text('插件示例')),
            body: Center(
                child: FutureBuilder(
                    future: requestCameraPermission(),
                    builder: (context, snapshot) {
                      if (snapshot.connectionState != ConnectionState.done) {
                        return const CircularProgressIndicator();
                      }

                      return TextButton(
                          onPressed: initLiveness,
                          child: const Text("开始活体检测"));
                    })));
  }
}

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

1 回复

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


liveness_azure_flutter 是一个用于在 Flutter 应用中实现活体检测的插件,它基于 Azure 的 Face API。活体检测是一种用于验证用户是否为真实人类的技术,通常用于身份验证、安全登录等场景。

以下是如何在 Flutter 项目中使用 liveness_azure_flutter 插件的基本步骤:

1. 添加依赖

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

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

然后运行 flutter pub get 来安装依赖。

2. 配置 Azure Face API

在使用 liveness_azure_flutter 之前,你需要在 Azure 门户中创建一个 Face API 资源,并获取 API 密钥和终结点 URL。

  1. 登录到 Azure 门户
  2. 创建一个新的 Face API 资源。
  3. 获取 API 密钥和终结点 URL。

3. 初始化插件

在你的 Flutter 应用中初始化 liveness_azure_flutter 插件,并设置 Azure Face API 的密钥和终结点。

import 'package:liveness_azure_flutter/liveness_azure_flutter.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  
  // 初始化插件
  await LivenessAzureFlutter.initialize(
    apiKey: 'YOUR_AZURE_FACE_API_KEY',
    endpoint: 'YOUR_AZURE_FACE_API_ENDPOINT',
  );

  runApp(MyApp());
}

4. 启动活体检测

在你的应用中,你可以通过调用 LivenessAzureFlutter.startLivenessDetection() 方法来启动活体检测流程。

import 'package:flutter/material.dart';
import 'package:liveness_azure_flutter/liveness_azure_flutter.dart';

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Liveness Detection'),
        ),
        body: Center(
          child: ElevatedButton(
            onPressed: () async {
              try {
                // 启动活体检测
                final result = await LivenessAzureFlutter.startLivenessDetection();
                
                // 处理检测结果
                if (result.isLive) {
                  print('Liveness detection successful!');
                } else {
                  print('Liveness detection failed.');
                }
              } catch (e) {
                print('Error: $e');
              }
            },
            child: Text('Start Liveness Detection'),
          ),
        ),
      ),
    );
  }
}

5. 处理检测结果

startLivenessDetection() 方法返回一个 LivenessResult 对象,其中包含检测结果。你可以根据 isLive 属性来判断用户是否为真实人类。

final result = await LivenessAzureFlutter.startLivenessDetection();

if (result.isLive) {
  print('Liveness detection successful!');
} else {
  print('Liveness detection failed.');
}

6. 处理错误

在活体检测过程中,可能会发生错误(例如网络问题、API 调用失败等)。你可以通过 try-catch 块来捕获并处理这些错误。

try {
  final result = await LivenessAzureFlutter.startLivenessDetection();
  // 处理结果
} catch (e) {
  print('Error: $e');
}
回到顶部