Flutter图像捕获与视觉处理插件henry_capture_vision_flutter的使用
Flutter图像捕获与视觉处理插件henry_capture_vision_flutter的使用
Dynamsoft Capture Vision Flutter Edition
Dynamsoft Capture Vision (DCV) 是一系列特定功能产品的聚合SDK,包括以下模块:
- Dynamsoft Camera Enhancer (DCE),提供相机增强和UI配置API。
- Dynamsoft Barcode Reader (DBR),提供条形码解码算法和API。
- Dynamsoft Label Recognizer (DLR),提供标签内容识别算法和API。
- Dynamsoft Document Normalizer (DDN),提供文档扫描算法和API。
注意:当前DCV Flutter版本仅包含DCE和DBR模块。DLR和DDN模块仍在开发中,未来会加入。
目录
系统需求
Flutter & Dart
- Flutter 版本: >=2.0.0
- Dart 版本: >=2.12.0 <3.0.0
Android
- 支持的操作系统: Android 5.0 (API Level 21) 或更高版本。
- 支持的ABI: armeabi-v7a, arm64-v8a, x86 和 x86_64。
- 开发环境: Android Studio 3.4+(推荐使用Android Studio 4.2+)。
- JDK: 1.8+
iOS
- 支持的操作系统: iOS 10.0 或更高版本。
- 支持的ABI: arm64 和 x86_64。
- 开发环境: Xcode 7.1及以上版本(推荐使用Xcode 13.0+),CocoaPods 1.11.0+。
安装
在项目的 pubspec.yaml
文件中添加以下依赖项:
flutter pub add henry_capture_vision_flutter
这会在您的包的 pubspec.yaml
文件中添加如下行(并运行隐式的 flutter pub get
):
dependencies:
henry_capture_vision_flutter: ^1.0.0
构建你的条形码扫描器应用
现在,您将学习如何使用 Dynamsoft Capture Vision Flutter SDK 创建一个简单的条形码扫描器。
设置开发环境
如果对 Flutter 不熟悉,请按照官方文档中的指南设置开发环境:
Flutter 官方网站
初始化项目
创建一个新的 Flutter 项目:
flutter create simple_barcode_scanner
包含库
在项目的 main.dart
文件中导入库:
import 'package:henry_capture_vision_flutter/henry_capture_vision_flutter.dart';
许可证激活
Dynamsoft Capture Vision 的条形码读取模块需要有效的许可证才能工作。在 main()
函数中添加以下代码以激活许可证:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 在此处输入您的 Dynamsoft Barcode Reader 许可证。
const String licenseKey = '';
// 初始化许可证以便您可以使用条形码读取器模块的所有功能。
try {
await DynamsoftBarcodeReader.initLicense(license: licenseKey);
} catch (e) {
print(e);
}
runApp(const MyApp());
}
配置条形码读取器
在此部分,我们将为新创建的项目添加条形码解码功能。
在 _MyHomePageState
类中添加以下实例变量:
class _MyHomePageState extends State<MyHomePage> {
late final DynamsoftBarcodeReader _barcodeReader;
final DynamsoftCameraView _cameraView = DynamsoftCameraView();
List<BarcodeResult> decodeResults = [];
}
barcodeReader
: 实现条形码解码功能的对象。用户可以通过此对象配置条形码解码设置。cameraView
: 显示视频流的相机视图。decodeResults
: 用于接收和存储条形码解码结果的对象。
添加 _configDBR
方法以初始化条形码读取器:
class _MyHomePageState extends State<MyHomePage> {
...
@override
void initState() {
super.initState();
_configDBR();
}
_configDBR() async {
/// 创建条形码读取器实例。
_barcodeReader = await DynamsoftBarcodeReader.createInstance();
/// 接收条形码解码结果并将结果存储到 decodeResults 中。
_barcodeReader.receiveResultStream().listen((List<BarcodeResult> res) {
if (mounted) {
setState(() {
decodeResults = res;
});
}
});
/// 当小部件创建时启动条形码解码。
_barcodeReader.startScanning();
/// 当 overlayVisible 设置为 true 时,解码后的条形码将带有覆盖层高亮显示。
_cameraView.overlayVisible = true;
}
}
添加配置以解析和显示条形码解码结果:
class _MyHomePageState extends State<MyHomePage> {
...
/// 获取列表项
Widget listItem(BuildContext context, int index) {
BarcodeResult res = decodeResults[index];
return ListTileTheme(
textColor: Colors.white,
// tileColor: Colors.green,
child: ListTile(
title: Text(res.barcodeFormatString),
subtitle: Text(res.barcodeText),
));
}
}
构建小部件
修改 build
方法以在小部件上显示解码的条形码结果:
class _MyHomePageState extends State<MyHomePage> {
...
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('HelloWorld'),
),
body: Stack(
children: [
Container(
child: _cameraView,
),
Container(
height: 200,
child: ListView.builder(
itemBuilder: listItem,
itemCount: decodeResults.length,
),
),
],
),
);
}
}
配置相机权限
在运行项目之前,您需要先在 iOS 设备上添加相机权限。
在项目文件夹中,打开 ios/Runner/info.plist
文件,并添加以下代码以请求相机权限:
<plist version="1.0">
<dict>
...
<key>NSCameraUsageDescription</key>
<string>请求您的授权。</string>
...
</dict>
</plist>
运行项目
在 Windows 上运行 Android
打开文件 build.gradle(app)
,将 minSdkVersion
更新为 21:
android {
defaultConfig {
...
minSdkVersion 21
...
}
}
在项目的根目录下运行以下命令以构建并安装应用程序:
flutter run
在 macOS 上运行 iOS
在 ios
文件夹中的 podfile
文件顶部添加以下代码:
platform:ios, '10.0'
在项目的根目录下运行以下命令以构建并安装应用程序:
flutter run
更多关于Flutter图像捕获与视觉处理插件henry_capture_vision_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter图像捕获与视觉处理插件henry_capture_vision_flutter的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
henry_capture_vision_flutter
是一个用于在 Flutter 应用中实现图像捕获和视觉处理的插件。它可以帮助开发者轻松地集成相机功能,并对捕获的图像进行处理。以下是如何使用 henry_capture_vision_flutter
插件的基本步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml
文件中添加 henry_capture_vision_flutter
插件的依赖:
dependencies:
flutter:
sdk: flutter
henry_capture_vision_flutter: ^latest_version
然后运行 flutter pub get
来获取依赖。
2. 初始化插件
在你的 Dart 文件中导入插件,并初始化它:
import 'package:henry_capture_vision_flutter/henry_capture_vision_flutter.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
home: CameraScreen(),
);
}
}
3. 使用相机捕获图像
在 CameraScreen
中,你可以使用 HenryCaptureVisionFlutter
来捕获图像:
class CameraScreen extends StatefulWidget {
@override
_CameraScreenState createState() => _CameraScreenState();
}
class _CameraScreenState extends State<CameraScreen> {
HenryCaptureVisionFlutter _captureVision = HenryCaptureVisionFlutter();
String _imagePath;
@override
void initState() {
super.initState();
_captureVision.initialize();
}
Future<void> _captureImage() async {
try {
String imagePath = await _captureVision.captureImage();
setState(() {
_imagePath = imagePath;
});
} catch (e) {
print("Error capturing image: $e");
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Capture Image'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
_imagePath != null
? Image.file(File(_imagePath))
: Text('No image captured yet.'),
SizedBox(height: 20),
ElevatedButton(
onPressed: _captureImage,
child: Text('Capture Image'),
),
],
),
),
);
}
@override
void dispose() {
_captureVision.dispose();
super.dispose();
}
}
4. 图像处理
henry_capture_vision_flutter
插件可能还提供了一些图像处理功能。你可以根据插件的文档或 API 参考来调用这些功能。例如:
Future<void> _processImage() async {
if (_imagePath != null) {
try {
String processedImagePath = await _captureVision.processImage(_imagePath);
setState(() {
_imagePath = processedImagePath;
});
} catch (e) {
print("Error processing image: $e");
}
}
}