Flutter条形码扫描插件google_ml_barcode的使用

Flutter条形码扫描插件google_ml_barcode的使用

Google’s ML Kit Barcode Flutter Plugin

Pub Version

一个用于Android和iOS的条形码扫描插件,基于Google的独立ML Kit。

要求

iOS

  • 最低iOS部署目标版本:10.0
  • Xcode 12或更新版本
  • Swift 5
  • ML Kit仅支持64位架构(x86_64 和 arm64)。请检查此列表以查看您的设备是否具有所需的设备功能。

由于ML Kit不支持32位架构(i386 和 armv7)(阅读更多),您需要在Xcode中排除armv7架构,以便运行flutter build iosflutter build ipa

前往项目 > Runner > 构建设置 > 排除架构 > 任何SDK > armv7:

然后您的Podfile应如下所示:

# 添加这一行:
$iOSVersion = '10.0'

post_install do |installer|
  # 添加这些行:
  installer.pods_project.build_configurations.each do |config|
    config.build_settings["EXCLUDED_ARCHS[sdk=*]"] = "armv7"
    config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
  end
  
  installer.pods_project.targets.each do |target|
    flutter_additional_ios_build_settings(target)
    
    # 添加这些行:
    target.build_configurations.each do |config|
      if Gem::Version.new($iOSVersion) > Gem::Version.new(config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'])
        config.build_settings['IPHONEOS_DEPLOYMENT_TARGET'] = $iOSVersion
      end
    end
    
  end
end

注意,最小的IPHONEOS_DEPLOYMENT_TARGET为10.0,您可以将其设置为更新的版本,但不能设置为更旧的版本。

Android

  • minSdkVersion: 21
  • targetSdkVersion: 29

使用

在您的pubspec.yaml文件中添加该插件作为依赖项。

  • 在您的项目级别的build.gradle文件中,确保在buildscriptallprojects部分都包含Google的Maven仓库(适用于所有API)。

  • 配置您的应用从Play商店自动下载模型到设备上。如果未配置,则相应的模型将在第一次调用API时被下载。在您的应用的AndroidManifest.xml文件中添加以下内容:

<meta-data
        android:name="com.google.mlkit.vision.DEPENDENCIES"
        android:value="ocr" />

1. 创建InputImage

从路径创建:

final inputImage = InputImage.fromFilePath(filePath);

从文件创建:

final inputImage = InputImage.fromFile(file);

从字节创建:

final inputImage = InputImage.fromBytes(bytes: bytes, inputImageData: inputImageData);

从CameraImage(如果您正在使用camera插件)创建:

final camera; // 您的相机实例
final WriteBuffer allBytes = WriteBuffer();
for (Plane plane in cameraImage.planes) {
  allBytes.putUint8List(plane.bytes);
}
final bytes = allBytes.done().buffer.asUint8List();

final Size imageSize = Size(cameraImage.width.toDouble(), cameraImage.height.toDouble());

final InputImageRotation imageRotation =
    InputImageRotationMethods.fromRawValue(camera.sensorOrientation) ??
        InputImageRotation.Rotation_0deg;

final InputImageFormat inputImageFormat =
    InputImageFormatMethods.fromRawValue(cameraImage.format.raw) ??
        InputImageFormat.NV21;

final planeData = cameraImage.planes.map(
  (Plane plane) {
    return InputImagePlaneMetadata(
      bytesPerRow: plane.bytesPerRow,
      height: plane.height,
      width: plane.width,
    );
  },
).toList();

final inputImageData = InputImageData(
  size: imageSize,
  imageRotation: imageRotation,
  inputImageFormat: inputImageFormat,
  planeData: planeData,
);

final inputImage = InputImage.fromBytes(bytes: bytes, inputImageData: inputImageData);

2. 创建检测器实例

final barcodeScanner = GoogleMlKit.vision.barcodeScanner();

3. 调用相应的方法

final List<Barcode> barcodes = await barcodeScanner.processImage(inputImage);

4. 从响应中提取数据

for (Barcode barcode in barcodes) {
  final BarcodeType type = barcode.type;
  final Rect boundingBox = barcode.value.boundingBox;
  final String displayValue = barcode.value.displayValue;
  final String rawValue = barcode.value.rawValue;

  // 查看API引用以获取完整的支持类型列表
  switch (type) {
    case BarcodeType.wifi:
      BarcodeWifi barcodeWifi = barcode.value;
      break;
    case BarcodeValueType.url:
      BarcodeUrl barcodeUrl = barcode.value;
      break;
  }
}

5. 使用close()释放资源

barcodeScanner.close();

更多关于Flutter条形码扫描插件google_ml_barcode的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter条形码扫描插件google_ml_barcode的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


google_ml_barcode 是一个用于 Flutter 的插件,它使用 Google 的机器学习套件(ML Kit)来扫描和识别条形码和二维码。这个插件可以帮助你快速地在 Flutter 应用中集成条形码扫描功能。

安装插件

首先,你需要在 pubspec.yaml 文件中添加 google_ml_barcode 插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  google_ml_barcode: ^1.0.0

然后运行 flutter pub get 来安装插件。

使用插件

1. 导入插件

在你的 Dart 文件中导入 google_ml_barcode 插件:

import 'package:google_ml_barcode/google_ml_barcode.dart';

2. 初始化扫描器

在使用扫描功能之前,需要初始化 BarcodeScanner

BarcodeScanner barcodeScanner = BarcodeScanner();

3. 扫描条形码

你可以使用 scan 方法来扫描条形码。这个方法会返回一个 List<Barcode>,其中包含了扫描到的条形码信息。

Future<void> scanBarcode() async {
  try {
    final List<Barcode> barcodes = await barcodeScanner.scan();
    
    for (Barcode barcode in barcodes) {
      print('Barcode value: ${barcode.displayValue}');
      print('Barcode format: ${barcode.format}');
    }
  } catch (e) {
    print('Error scanning barcode: $e');
  }
}

4. 释放资源

在使用完扫描器后,记得释放资源:

void dispose() {
  barcodeScanner.dispose();
}

完整示例

以下是一个完整的示例,展示了如何在 Flutter 应用中使用 google_ml_barcode 插件扫描条形码:

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

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

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: BarcodeScannerScreen(),
    );
  }
}

class BarcodeScannerScreen extends StatefulWidget {
  [@override](/user/override)
  _BarcodeScannerScreenState createState() => _BarcodeScannerScreenState();
}

class _BarcodeScannerScreenState extends State<BarcodeScannerScreen> {
  BarcodeScanner barcodeScanner = BarcodeScanner();

  Future<void> scanBarcode() async {
    try {
      final List<Barcode> barcodes = await barcodeScanner.scan();
      
      for (Barcode barcode in barcodes) {
        print('Barcode value: ${barcode.displayValue}');
        print('Barcode format: ${barcode.format}');
      }
    } catch (e) {
      print('Error scanning barcode: $e');
    }
  }

  [@override](/user/override)
  void dispose() {
    barcodeScanner.dispose();
    super.dispose();
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Barcode Scanner'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: scanBarcode,
          child: Text('Scan Barcode'),
        ),
      ),
    );
  }
}
回到顶部