Flutter图像分割插件splicerai的使用
Flutter图像分割插件splicerai的使用
SplicerAi Flutter Plugin
Extrieve Technologies - 您的文档管理和AI解决方案专家
SplicerAi Flutter Plugin 提供了一套工具,用于将高级文档管理和基于AI的KYC(了解您的客户)解决方案集成到您的Flutter应用程序中。通过这个插件,您可以轻松地对Aadhaar卡进行遮罩处理,检测和提取KYC文档信息,并验证KYC文档。
功能
- Aadhaar遮罩:自动遮罩Aadhaar卡上的敏感信息以保护用户隐私。
- KYC文档检测:检测提供的KYC文档类型(例如Aadhaar、护照、PAN卡)。
- KYC信息提取:从KYC文档中提取结构化数据以便于处理。
- KYC文档验证:验证KYC文档的真实性。
- 支持的文档类型:获取所有受支持的KYC文档类型的列表。
快速开始
前提条件
- Flutter SDK:确保您已经在机器上安装了Flutter。有关安装说明,请访问 Flutter官方文档。
- Dart SDK:包含在Flutter SDK中。
安装
在项目的 pubspec.yaml
文件中添加 splicerai
:
dependencies:
flutter:
sdk: flutter
splicerai: ^1.0.0 # 替换为最新版本
然后,运行 flutter pub get
来获取包。
集成
导入包
import 'package:splicerai/splicerai.dart';
许可激活
在使用插件之前,您需要激活许可证。请替换 "<Your Android License Key>"
和 "<Your iOS License Key>"
为Extrieve Technologies提供的许可证密钥。
Future<void> activateLicense() async {
String androidLicense = "<Your Android License Key>";
String iosLicense = "<Your iOS License Key>";
try {
bool? isActivated = await SplicerAi().activateLicense(
android: androidLicense,
ios: iosLicense,
);
if (isActivated == true) {
print("许可证激活成功");
} else {
print("许可证激活失败。请检查您的许可证。");
}
} catch (e) {
print("激活许可证时出错: ${e.toString()}");
}
}
使用示例
1. Aadhaar遮罩
对Aadhaar卡图像中的敏感信息进行遮罩。
Future<void> maskAadhaar(String imagePath) async {
try {
String? maskedImagePath = await SplicerAi.maskAadhaar(imagePath);
if (maskedImagePath != null) {
print("Aadhaar遮罩成功。遮罩后的图像路径: $maskedImagePath");
} else {
print("Aadhaar遮罩失败");
}
} catch (e) {
print("Aadhaar遮罩时出错: ${e.toString()}");
}
}
2. KYC文档检测
检测图像中的KYC文档类型。
Future<void> detectKYCDocument(String imagePath) async {
try {
String? detectionResult = await SplicerAi.detectKYCDocument(imagePath);
if (detectionResult != null) {
print("检测到的KYC文档类型: $detectionResult");
} else {
print("KYC文档检测失败");
}
} catch (e) {
print("KYC文档检测时出错: ${e.toString()}");
}
}
3. KYC信息提取
从KYC文档中提取信息。
Future<void> extractKYCDocument(String imagePath) async {
try {
String? extractionResult = await SplicerAi.extractKYCDocument(imagePath);
if (extractionResult != null) {
print("KYC文档提取结果: $extractionResult");
} else {
print("KYC文档提取失败");
}
} catch (e) {
print("KYC文档提取时出错: ${e.toString()}");
}
}
4. 获取支持的KYC文档类型
获取所有支持的KYC文档类型的列表。
Future<void> getSupportedKYCDocuments() async {
try {
String? docListJson = await SplicerAi.getSupportedKYCDocList();
if (docListJson != null) {
List<dynamic> docList = jsonDecode(docListJson);
print("支持的KYC文档类型: ${docList.join(', ')}");
} else {
print("未能获取支持的KYC文档类型");
}
} catch (e) {
print("获取支持的KYC文档类型时出错: ${e.toString()}");
}
}
5. KYC文档验证
验证KYC文档是否符合指定的文档类型。
Future<void> verifyKYCDocument(String imagePath, String documentType) async {
try {
String? verificationResult = await SplicerAi.verifyKYCDocument(
imagePath,
documentType,
);
if (verificationResult != null) {
print("KYC文档验证结果: $verificationResult");
} else {
print("KYC文档验证失败");
}
} catch (e) {
print("KYC文档验证时出错: ${e.toString()}");
}
}
完整示例
以下是一个完整的示例,集成了上述所有功能:
import 'package:flutter/material.dart';
import 'package:image_picker/image_picker.dart';
import 'package:splicerai/splicerai.dart';
import 'package:fluttertoast/fluttertoast.dart';
import 'dart:io';
import 'dart:convert';
void main() {
runApp(const MyApp());
}
/// 应用程序的根组件
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: 'SplicerAi Flutter Plugin 示例',
debugShowCheckedModeBanner: false,
home: HomePage(),
);
}
}
/// 主页组件,显示主要功能
class HomePage extends StatefulWidget {
const HomePage({super.key});
@override
HomePageState createState() => HomePageState();
}
/// 主页的状态类
class HomePageState extends State<HomePage> {
final ImagePicker _picker = ImagePicker();
String? _selectedImagePath;
String? _processedImagePath;
String? _kycResponseData;
bool _isLoading = false;
List<String> _supportedKYCDocs = [];
@override
void initState() {
super.initState();
activateLicense();
fetchSupportedKYCDocList();
}
Future<void> activateLicense() async {
String androidLicense = "<Your Android License Key>";
String iosLicense = "<Your iOS License Key>";
try {
bool? isActivated = await SplicerAi().activateLicense(
android: androidLicense,
ios: iosLicense,
);
if (isActivated == true) {
_showToast("许可证激活成功", isSuccess: true);
} else {
_showToast("许可证激活失败。请检查您的许可证.", isSuccess: false);
}
} catch (e) {
_showToast("激活许可证时出错: ${e.toString()}", isSuccess: false);
}
}
Future<void> fetchSupportedKYCDocList() async {
try {
String? jsonString = await SplicerAi.getSupportedKYCDocList();
if (jsonString != null && jsonString.isNotEmpty) {
List<dynamic> jsonList = jsonDecode(jsonString);
List<String> docs = jsonList.map((item) => item.toString()).toList();
setState(() {
_supportedKYCDocs = docs;
});
} else {
_showSnackBar('未找到支持的KYC文档');
}
} catch (e) {
_showSnackBar('获取KYC文档时出错: ${e.toString()}');
}
}
Future<void> _pickImage() async {
try {
final XFile? pickedFile = await _picker.pickImage(source: ImageSource.gallery);
if (pickedFile != null) {
setState(() {
_selectedImagePath = pickedFile.path;
_processedImagePath = null;
_kycResponseData = null;
});
} else {
_showSnackBar('未选择图像');
}
} catch (e) {
_showSnackBar('选择图像时出错: ${e.toString()}');
}
}
Future<void> _processAadhaarMask() async {
if (_selectedImagePath == null) {
_showSnackBar('请先附加图像');
return;
}
setState(() => _isLoading = true);
try {
String? result = await SplicerAi.maskAadhaar(_selectedImagePath!);
if (result != null) {
String newPath = _selectedImagePath!.replaceFirstMapped(
RegExp(r'(\.\w+)$'),
(Match match) => '_masked${match.group(1)}',
);
await File(result).copy(newPath);
setState(() {
_processedImagePath = newPath;
});
_showSnackBar('Aadhaar遮罩成功');
if (await File(_processedImagePath!).exists()) {
print('已成功保存处理后的图像到 $_processedImagePath');
} else {
print('处理后的图像文件不存在于 $_processedImagePath');
}
} else {
_showSnackBar('Aadhaar遮罩失败');
}
} catch (e) {
_showSnackBar('Aadhaar遮罩时出错: ${e.toString()}');
} finally {
setState(() => _isLoading = false);
}
}
Future<void> _processKYC(String type) async {
if (_selectedImagePath == null) {
_showSnackBar('请先附加图像');
return;
}
setState(() => _isLoading = true);
try {
String? result;
if (type == 'detect') {
result = await SplicerAi.detectKYCDocument(_selectedImagePath!);
} else if (type == 'extract') {
result = await SplicerAi.extractKYCDocument(_selectedImagePath!);
}
if (result != null) {
setState(() {
_kycResponseData = result;
});
_showSnackBar('KYC $type 处理成功');
} else {
_showSnackBar('处理KYC $type 失败');
}
} catch (e) {
_showSnackBar('处理KYC $type 时出错: ${e.toString()}');
} finally {
setState(() => _isLoading = false);
}
}
void _openKYCVerifyDialog() {
if (_selectedImagePath == null) {
_showSnackBar('请先附加图像');
return;
}
if (_supportedKYCDocs.isEmpty) {
_showSnackBar('没有可用的支持的KYC文档');
return;
}
String? selectedDoc;
showDialog(
context: context,
builder: (BuildContext context) {
return AlertDialog(
title: const Text('KYC验证'),
content: SingleChildScrollView(
child: Column(
mainAxisSize: MainAxisSize.min,
children: [
FutureBuilder<Uint8List>(
future: File(_selectedImagePath!).readAsBytes(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done && snapshot.hasData) {
return Image.memory(
snapshot.data!,
fit: BoxFit.contain,
width: MediaQuery.of(context).size.width * 0.8,
height: MediaQuery.of(context).size.height * 0.4,
);
} else {
return const CircularProgressIndicator();
}
},
),
const SizedBox(height: 20),
DropdownButtonFormField<String>(
decoration: const InputDecoration(
labelText: '选择文档',
border: OutlineInputBorder(),
),
items: _supportedKYCDocs.map((String doc) {
return DropdownMenuItem<String>(
value: doc,
child: Text(doc),
);
}).toList(),
onChanged: (String? newValue) {
selectedDoc = newValue;
},
),
],
),
),
actions: [
TextButton(
onPressed: () {
Navigator.of(context).pop();
},
child: const Text('取消'),
),
ElevatedButton(
onPressed: () {
if (selectedDoc != null) {
Navigator.of(context).pop();
_verifyKYC(selectedDoc!);
} else {
_showSnackBar('请选择文档');
}
},
child: const Text('验证'),
),
],
);
},
);
}
Future<void> _verifyKYC(String documentType) async {
setState(() => _isLoading = true);
try {
String? result = await SplicerAi.verifyKYCDocument(
_selectedImagePath!,
documentType,
);
if (result != null) {
setState(() {
_kycResponseData = result;
});
_showSnackBar('KYC验证成功');
} else {
_showSnackBar('KYC验证失败');
}
} catch (e) {
_showSnackBar('KYC验证时出错: ${e.toString()}');
} finally {
setState(() => _isLoading = false);
}
}
void _showSnackBar(String message) {
if (!mounted) return;
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text(message)),
);
}
void _showToast(String message, {required bool isSuccess}) {
Fluttertoast.showToast(
msg: message,
toastLength: Toast.LENGTH_SHORT,
gravity: ToastGravity.CENTER,
backgroundColor: isSuccess ? Colors.green : Colors.red,
textColor: Colors.white,
fontSize: 16.0,
);
}
@override
Widget build(BuildContext context) {
String? displayImagePath = _processedImagePath ?? _selectedImagePath;
return Scaffold(
appBar: AppBar(
title: const Text('SplicerAi Flutter Plugin 示例'),
),
body: Stack(
children: [
SingleChildScrollView(
child: Column(
crossAxisAlignment: CrossAxisAlignment.center,
children: [
const SizedBox(height: 20),
Center(
child: ElevatedButton(
onPressed: _pickImage,
child: const Text('附加图像'),
),
),
const SizedBox(height: 20),
if (displayImagePath != null) ...[
Column(
children: [
const Text(
'选择的图像',
style: TextStyle(fontSize: 16, fontWeight: FontWeight.bold),
),
const SizedBox(height: 10),
FutureBuilder<Uint8List>(
future: File(displayImagePath).readAsBytes(),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.done && snapshot.hasData) {
return Image.memory(
snapshot.data!,
fit: BoxFit.contain,
width: MediaQuery.of(context).size.width * 0.8,
);
} else {
return const CircularProgressIndicator();
}
},
),
],
),
const SizedBox(height: 20),
Wrap(
spacing: 10,
runSpacing: 10,
alignment: WrapAlignment.center,
children: [
ElevatedButton(
onPressed: _processAadhaarMask,
child: const Text('Aadhaar遮罩'),
),
ElevatedButton(
onPressed: () => _processKYC('detect'),
child: const Text('KYC检测'),
),
ElevatedButton(
onPressed: () => _processKYC('extract'),
child: const Text('KYC提取'),
),
ElevatedButton(
onPressed: _openKYCVerifyDialog,
child: const Text('KYC验证'),
),
],
),
],
if (_kycResponseData != null) ...[
const SizedBox(height: 20),
const Text(
'响应数据:',
style: TextStyle(fontWeight: FontWeight.bold, fontSize: 16),
),
Container(
margin: const EdgeInsets.all(10),
padding: const EdgeInsets.all(10),
constraints: BoxConstraints(
maxWidth: MediaQuery.of(context).size.width * 0.9,
maxHeight: MediaQuery.of(context).size.height * 0.4,
),
decoration: BoxDecoration(
border: Border.all(color: Colors.grey),
borderRadius: BorderRadius.circular(8),
),
child: SingleChildScrollView(
scrollDirection: Axis.vertical,
child: Text(
const JsonEncoder.withIndent(' ').convert(jsonDecode(_kycResponseData!)),
style: const TextStyle(fontSize: 14),
),
),
),
],
],
),
),
if (_isLoading)
Container(
color: Colors.black.withOpacity(0.5),
child: const Center(child: CircularProgressIndicator()),
),
],
),
);
}
}
其他信息
- 作者:Extrieve Technologies
- 网站:https://www.extrieve.com
- 支持:如有任何问题或疑问,请联系我们的支持团队 support@extrieve.com
注意事项
- 隐私与安全:始终安全地处理用户数据,并确保遵守适用的法律和法规。
- 错误处理:在应用中实现适当的错误处理,以提供流畅的用户体验。
通过集成SplicerAi Flutter Plugin,您可以增强应用程序的文档管理和AI能力,为用户提供安全高效的KYC处理体验。
更多关于Flutter图像分割插件splicerai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图像分割插件splicerai的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中使用SplicerAI进行图像分割,你可以通过调用其提供的API来实现。虽然SplicerAI本身可能不是一个官方的Flutter插件,但你可以通过集成其提供的REST API或SDK(如果可用)来实现图像分割功能。以下是一个基本的思路,假设SplicerAI提供了一个REST API来进行图像分割。
1. 添加依赖
首先,确保你的Flutter项目中包含了必要的网络请求库,比如dio
或http
。这里以dio
为例。
在pubspec.yaml
中添加dio依赖:
dependencies:
flutter:
sdk: flutter
dio: ^4.0.4 # 请检查最新版本号
然后运行flutter pub get
来安装依赖。
2. 导入依赖并创建API请求
接下来,在你的Flutter应用中导入dio库,并创建一个函数来调用SplicerAI的API。
import 'package:dio/dio.dart';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'dart:typed_data';
import 'dart:ui' as ui;
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: ImageSegmentationPage(),
);
}
}
class ImageSegmentationPage extends StatefulWidget {
@override
_ImageSegmentationPageState createState() => _ImageSegmentationPageState();
}
class _ImageSegmentationPageState extends State<ImageSegmentationPage> {
final Dio _dio = Dio();
Uint8List? _imageBytes;
Map<String, dynamic>? _segmentationResult;
Future<void> _pickImage() async {
final pickedFile = await ImagePicker().pickImage(source: ImageSource.camera);
if (pickedFile != null) {
setState(() {
_imageBytes = pickedFile.readAsBytesSync();
});
_uploadImageForSegmentation();
}
}
Future<void> _uploadImageForSegmentation() async {
final formData = FormData.fromMap({
'image': _dio.formDataPartFromBytes(
'image',
_imageBytes!,
filename: 'image.jpg',
contentType: MediaType.parse('image/jpeg'),
),
});
try {
final response = await _dio.post('https://api.splicerai.com/segment', data: formData);
final resultData = jsonDecode(response.data);
setState(() {
_segmentationResult = resultData;
});
// 处理分割结果,比如显示分割后的图像或数据
} catch (error) {
print('Error uploading image: $error');
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Image Segmentation with SplicerAI'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_imageBytes == null
? Text('No image selected.')
: Image.memory(_imageBytes!),
if (_segmentationResult != null)
Text('Segmentation Result: $_segmentationResult'),
ElevatedButton(
onPressed: _pickImage,
child: Text('Pick Image'),
),
],
),
),
);
}
}
3. 注意事项
-
API端点:上面的代码示例中,
https://api.splicerai.com/segment
是一个假设的API端点。你需要替换为SplicerAI实际提供的API端点。 -
API认证:如果SplicerAI的API需要认证(比如API密钥或OAuth),你需要在请求头中添加相应的认证信息。
-
错误处理:上面的代码简单地打印了错误消息。在实际应用中,你可能需要更细致的错误处理逻辑,比如显示错误对话框给用户。
-
图像显示:上面的代码直接显示了原始图像。如果你需要根据分割结果来显示分割后的图像,你需要根据返回的数据进行额外的处理。
-
依赖管理:确保你的
dio
库版本与Flutter SDK兼容,并定期检查是否有可用的更新。 -
安全性:不要在客户端代码中硬编码敏感信息,比如API密钥。考虑使用环境变量或安全的密钥管理服务。
这个示例提供了一个基本的框架,你可以根据SplicerAI的具体API文档和需求进行调整和扩展。