Flutter人脸识别与数据采集插件flutter_bdface_collect的使用

发布于 1周前 作者 itying888 来自 Flutter

Flutter人脸识别与数据采集插件flutter_bdface_collect的使用

简介

flutter_bdface_collect 是一个百度人脸离线采集插件,只支持安卓和iOS平台【armeabi-v7a、arm64-v8a】。

注意事项

  • SDK 仅支持 armeabi-v7a 和 arm64-v8a 架构。如果需要 x86 架构,请选择旧版 SDK(请参考相关文档)。
  • 使用前请自行检查隐私授权。

SDK 版本

平台 版本
Android 4.1.5
iOS 4.1.5

准备工作

Android

在 Android 项目的 app/src/main/assets 目录下放入百度离线采集SDK的Android授权文件,文件名固定为 idl-license.face-android。SDK会校验 apk 签名,请使用申请授权相符的签名证书。

iOS

Info.plistdict 标签内添加以下内容:

<key>NSCameraUsageDescription</key>
<string>使用相机</string>

在 iOS 项目的 Runner 目录下放入百度离线采集SDK的iOS授权文件,文件名固定为 idl-license.face-ios,并将文件加入资源。

example

使用方法

初始化 (Init)
// 导入必要的包
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_bdface_collect/flutter_bdface_collect.dart';
import 'dart:io';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '人脸识别测试',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  void initState() {
    super.initState();
    initFaceCollect();
  }

  Future<void> initFaceCollect() async {
    late var licenseId;
    if (Platform.isAndroid) licenseId = "demo-face-android";
    else if (Platform.isIOS) licenseId = "demo-face-ios";
    
    print('开始初始化');
    String? err = await FlutterBdfaceCollect.instance.init(licenseId);
    print('初始化结果${err == null ? '成功' : '失败'}');
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: Text("人脸识别测试")),
      body: Center(child: Text("点击按钮进行人脸识别")),
      floatingActionButton: FloatingActionButton(
        onPressed: () {},
        child: Icon(Icons.face),
      ),
    );
  }
}
采集 (Collect)
Future<void> _faceCollect() async {
  // 初始化步骤同上
  late String licenseId;
  if (Platform.isAndroid) {
    licenseId = 'flutter_bdface_collect_example-face-android';
  } else if (Platform.isIOS) {
    licenseId = 'flutter_bdface_collect_example-face-ios';
  }
  
  var err = await FlutterBdfaceCollect.instance.init(licenseId);
  if (err != null) print('百度人脸采集初始化失败:$err');
  
  // 配置活体检测类型
  var livenessTypeList = LivenessType.all.sublist(3);
  var config = FaceConfig(livenessTypes: Set.from(livenessTypeList));
  
  // 开始采集
  CollectResult res = await FlutterBdfaceCollect.instance.collect(config);
  print("百度人脸采集结果:error:${res.error} imageSrcBase64 isEmpty:${res.imageSrcBase64.isEmpty}");
  
  // 显示采集到的图像
  Uint8List? imageBytes;
  if (!res.imageSrcBase64.isEmpty) {
    imageBytes = base64Decode(res.imageSrcBase64);
  }
  
  setState(() {
    // 更新UI显示采集到的图像
  });
}
释放 (UnInit)
FlutterBdfaceCollect.instance.unInit();

完整示例 Demo

import 'dart:convert';
import 'dart:io';
import 'dart:typed_data';

import 'package:flutter/material.dart';
import 'package:flutter_bdface_collect/flutter_bdface_collect.dart';
import 'package:flutter_bdface_collect/model.dart';

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: '人脸识别测试',
      theme: ThemeData(primarySwatch: Colors.blue),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatefulWidget {
  [@override](/user/override)
  State<MyHomePage> createState() => _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  Uint8List? imageBytes;

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title: const Text("人脸识别测试")),
      body: Center(
        child: imageBytes == null
            ? const Text('未开始初始化')
            : Image.memory(imageBytes!),
      ),
      floatingActionButton: FloatingActionButton(
        tooltip: 'Increment',
        onPressed: _faceCollect,
        child: const Icon(Icons.face),
      ),
    );
  }

  Future<void> _faceCollect() async {
    late String licenseId;
    if (Platform.isAndroid) {
      licenseId = 'flutter_bdface_collect_example-face-android';
    } else if (Platform.isIOS) {
      licenseId = 'flutter_bdface_collect_example-face-ios';
    }
    
    var err = await FlutterBdfaceCollect.instance.init(licenseId);
    if (err != null) print('百度人脸采集初始化失败:$err');
    
    var livenessTypeList = LivenessType.all.sublist(3);
    var config = FaceConfig(livenessTypes: Set.from(livenessTypeList));
    
    CollectResult res = await FlutterBdfaceCollect.instance.collect(config);
    print("百度人脸采集结果:error:${res.error} imageSrcBase64 isEmpty:${res.imageSrcBase64.isEmpty}");
    
    if (res.imageSrcBase64.isEmpty) return setState(() => imageBytes = null);
    
    setState(() => imageBytes = base64Decode(res.imageSrcBase64));
  }
}

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

1 回复

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


当然,下面是一个关于如何在Flutter项目中使用flutter_bdface_collect插件进行人脸识别与数据采集的示例代码。这个插件假设是用于百度的人脸识别和数据采集功能。请注意,实际使用时,你需要替换相关的API密钥和配置,并确保你已经在百度云平台注册并获得了必要的权限和密钥。

首先,确保你已经将flutter_bdface_collect插件添加到你的pubspec.yaml文件中:

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

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

接下来,你需要配置百度人脸识别的API密钥等信息。这通常是在Android和iOS的原生代码中进行配置的。

Android配置

android/app/src/main/AndroidManifest.xml中添加必要的权限:

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

然后在android/app/build.gradle中添加百度SDK的依赖(如果插件没有自动包含):

dependencies {
    implementation 'com.baidu.aip:face:版本号'  // 请替换为实际的版本号
}

MainActivity.ktMainActivity.java中初始化SDK(如果插件没有提供自动初始化功能):

// MainActivity.kt
import android.os.Bundle
import io.flutter.embedding.android.FlutterActivity
import com.baidu.aip.face.FaceClient
import com.baidu.aip.face.FaceOption

class MainActivity: FlutterActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        // 初始化百度人脸识别客户端
        val client = FaceClient(applicationContext, "你的API Key", "你的Secret Key")
        // 设置选项(可选)
        val option = FaceOption()
        option.appId = "你的App ID"
        option.groupList = "你的组列表"  // 如果有多个组

        // 将client和option保存,供后续使用
        // 例如,可以通过MethodChannel传递给Flutter层
    }
}

iOS配置

ios/Runner/Info.plist中添加必要的权限:

<key>NSCameraUsageDescription</key>
<string>需要访问相机进行人脸识别</string>
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

iOS的配置通常比较复杂,如果插件没有提供详细的iOS集成说明,你可能需要手动集成百度SDK,并配置桥接头文件等。这里不展开详述。

Flutter代码

在Flutter层,你可以通过MethodChannel与原生代码进行通信,调用人脸识别和数据采集功能。以下是一个简单的示例:

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

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

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('Flutter 人脸识别与数据采集'),
        ),
        body: Center(
          child: FaceRecognitionButton(),
        ),
      ),
    );
  }
}

class FaceRecognitionButton extends StatefulWidget {
  @override
  _FaceRecognitionButtonState createState() => _FaceRecognitionButtonState();
}

class _FaceRecognitionButtonState extends State<FaceRecognitionButton> {
  String result = '';

  @override
  Widget build(BuildContext context) {
    return ElevatedButton(
      onPressed: () async {
        try {
          // 调用插件的方法进行人脸识别和数据采集
          String data = await FlutterBdfaceCollect.startFaceRecognition();
          setState(() {
            result = data;  // 假设返回的是识别结果或相关数据
          });
        } catch (e) {
          print('Error: $e');
        }
      },
      child: Text('开始人脸识别'),
    );
  }
}

注意:上述FlutterBdfaceCollect.startFaceRecognition()方法是一个假设的方法名,实际使用时你需要参考插件的文档来确定正确的方法名和使用方式。

由于flutter_bdface_collect插件的具体实现和API可能会随着版本更新而变化,因此建议查阅最新的插件文档和示例代码来获取最准确的信息。此外,人脸识别涉及用户隐私,请确保你的应用符合相关的隐私政策和法律法规。

回到顶部