Flutter人脸识别插件myhr_facescan的使用

Flutter人脸识别插件myhr_facescan的使用

myhr_facescan

myhr_facescan 插件简化了与 Luxand 的集成。

人脸注册

人脸注册功能允许用户录入自己的面部信息。以下是人脸注册的示例代码:

EnrollFace(
    licenseKey: Env.luxandLicenseKey,
    onFinish: (templates) {
        Get.off(LivenessPage(templates: templates));
    },
)
参数说明
参数名称 描述 默认值
licenseKey Luxand 许可证密钥
imageStreamMilliSecond 每隔多少毫秒捕获一张图像并发送到 Luxand 100 毫秒
templateCount 此次注册的模板总数 3
topMessage 显示在面部矩形上方的消息 ‘请触摸屏幕’

主动活体检测

主动活体检测用于确保录入的是真实的人脸,而不是照片或视频。以下是主动活体检测的示例代码:

ActiveLivenessVerifier(
    licenseKey: Env.luxandLicenseKey,
    onFinish: (success, template) {},
)
参数说明
参数名称 描述 默认值
licenseKey Luxand 许可证密钥
imageStreamMilliSecond 每隔多少毫秒捕获一张图像并发送到 Luxand 200 毫秒
failAcceptableInSecond 如果 Luxand 在指定时间内未能检测到人脸,则返回失败 3 秒

匹配面部模板

匹配面部模板功能用于比对已录入的面部模板。以下是匹配面部模板的示例代码:

MatchTemplateScanner(
    licenseKey: Env.luxandLicenseKey,
    templates: con.templates,
    onFinish: (success, template) {},
)

注意: 此组件目前仅支持比对模板,但尚不支持将数据发送给用户(开发中)。

示例代码

以下是完整的示例代码,展示了如何在 Flutter 应用程序中使用 myhr_facescan 插件。

import 'package:flutter/material.dart';
import 'package:get/get.dart';
import 'package:myhr_facescan_example/active_liveness/index.dart';
import 'package:myhr_facescan_example/enroll/index.dart';
import 'package:myhr_facescan_example/match_face/index.dart';
import 'package:myhr_facescan_example/template_controller.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  runApp(const MyApp());
}

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

  [@override](/user/override)
  Widget build(BuildContext context) {
    return const GetMaterialApp(home: HomePage());
  }
}

class HomePage extends StatelessWidget {
  const HomePage({super.key});

  [@override](/user/override)
  Widget build(BuildContext context) {
    var con = Get.put(TemplateController());

    return Scaffold(
      appBar: AppBar(
        title: const Text('Luxand x Flutter'),
      ),
      body: Center(
        child: Column(
          children: [
            ElevatedButton(
                onPressed: () => Get.to(const EnrollPage()),
                child: const Text('录入人脸')),
            ElevatedButton(
                onPressed: () => Get.to(const ActiveLivenessPage()),
                child: const Text('活体检测')),
            ElevatedButton(
                onPressed: () => Get.to(const MatchFacePage()),
                child: const Text('匹配人脸')),
            ElevatedButton(
                onPressed: () async {
                  con.removeAll();
                  Get.snackbar('成功', '设备中的模板已删除。');
                },
                child: const Text('清除存储')),
            ElevatedButton(
                onPressed: () async {
                  Get.snackbar('总数: ${con.templates.length}', '');
                },
                child: const Text('获取模板总数')),
          ],
        ),
      ),
    );
  }
}

更多关于Flutter人脸识别插件myhr_facescan的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter人脸识别插件myhr_facescan的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中集成和使用myhr_facescan插件进行人脸识别的代码示例。请确保你已经正确配置了Flutter开发环境,并且已经在pubspec.yaml文件中添加了myhr_facescan依赖。

1. 添加依赖

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

dependencies:
  flutter:
    sdk: flutter
  myhr_facescan: ^最新版本号  # 请替换为实际最新版本号

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

2. 配置权限

由于人脸识别通常需要使用相机权限,你需要在AndroidManifest.xml(针对Android)和Info.plist(针对iOS)中添加相应的权限配置。

Android

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

<uses-permission android:name="android.permission.CAMERA" />
<uses-feature android:name="android.hardware.camera" />
<uses-feature android:name="android.hardware.camera.autofocus" />

iOS

ios/Runner/Info.plist中添加:

<key>NSCameraUsageDescription</key>
<string>需要访问相机以进行人脸识别</string>

3. 使用插件进行人脸识别

以下是一个简单的示例,展示如何在Flutter应用中使用myhr_facescan插件进行人脸识别:

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

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

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  MyhrFacescan? _facescan;
  String _result = "";

  @override
  void initState() {
    super.initState();
    _initFacescan();
  }

  Future<void> _initFacescan() async {
    _facescan = MyhrFacescan();
    // 检查并请求相机权限
    bool hasPermission = await _facescan!.checkPermission();
    if (!hasPermission) {
      bool requestPermission = await _facescan!.requestPermission();
      if (!requestPermission) {
        setState(() {
          _result = "相机权限被拒绝";
        });
      }
    }
  }

  Future<void> _startFaceRecognition() async {
    try {
      var result = await _facescan!.startFaceRecognition();
      setState(() {
        _result = "人脸识别结果: ${result.toJson()}";
      });
    } catch (e) {
      setState(() {
        _result = "人脸识别失败: ${e.toString()}";
      });
    }
  }

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 人脸识别示例'),
        ),
        body: Center(
          child: Column(
            mainAxisAlignment: MainAxisAlignment.center,
            children: <Widget>[
              Text(
                _result,
                style: TextStyle(fontSize: 20),
              ),
              SizedBox(height: 20),
              ElevatedButton(
                onPressed: _startFaceRecognition,
                child: Text('开始人脸识别'),
              ),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 权限处理:在实际应用中,你应该更细致地处理权限请求的结果,比如引导用户去设置中手动开启权限。
  2. 错误处理:在真实场景中,应该添加更多的错误处理逻辑,以确保应用的健壮性。
  3. UI设计:上述示例中的UI设计非常简单,你可以根据自己的需求进行美化。

这个示例展示了如何初始化myhr_facescan插件,检查并请求相机权限,以及启动人脸识别并显示结果。请根据实际情况调整代码,并确保你遵循了myhr_facescan插件的最新文档和API说明。

回到顶部