Flutter条形码扫描插件google_ml_barcode的使用
Flutter条形码扫描插件google_ml_barcode的使用
Google’s ML Kit Barcode Flutter Plugin
一个用于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 ios
或 flutter 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
文件中,确保在buildscript
和allprojects
部分都包含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
更多关于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'),
),
),
);
}
}