Flutter图像捕获与视觉处理插件henry_capture_vision_flutter的使用

发布于 1周前 作者 itying888 来自 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, x86x86_64
  • 开发环境: Android Studio 3.4+(推荐使用Android Studio 4.2+)。
  • JDK: 1.8+

iOS

  • 支持的操作系统: iOS 10.0 或更高版本。
  • 支持的ABI: arm64x86_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

1 回复

更多关于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");
    }
  }
}
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!