Flutter人脸识别与数据采集插件flutter_bdface_collect的使用
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.plist
的 dict
标签内添加以下内容:
<key>NSCameraUsageDescription</key>
<string>使用相机</string>
在 iOS 项目的 Runner
目录下放入百度离线采集SDK的iOS授权文件,文件名固定为 idl-license.face-ios
,并将文件加入资源。
使用方法
初始化 (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
更多关于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.kt
或MainActivity.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可能会随着版本更新而变化,因此建议查阅最新的插件文档和示例代码来获取最准确的信息。此外,人脸识别涉及用户隐私,请确保你的应用符合相关的隐私政策和法律法规。