0 purchases
barcode scanner kit
Google's ML Barcode Scanner Flutter Plugin #
A Flutter plugin to use Google's standalone ML Kit for Android and iOS.
Features #
Vision #
Feature
Android
iOS
Barcode Scanning
✅
✅
Requirements #
iOS #
Minimum iOS Deployment Target: 10.0
Xcode 12 or newer
Swift 5
ML Kit only supports 64-bit architectures (x86_64 and arm64). Check this list to see if your device has the required device capabilities.
Since ML Kit does not support 32-bit architectures (i386 and armv7) (Read mode), you need to exclude amrv7 architectures in Xcode in order to run flutter build ios or flutter build ipa.
Go to Project > Runner > Building Settings > Excluded Architectures > Any SDK > armv7
Then your Podfile should look like this:
# add this line:
$iOSVersion = '10.0'
post_install do |installer|
# add these lines:
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)
# add these lines:
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
copied to clipboard
Notice that the minimum IPHONEOS_DEPLOYMENT_TARGET is 10.0, you can set it to something newer but not older.
Android #
minSdkVersion: 21
targetSdkVersion: 29
Usage #
Add this plugin as dependency in your pubspec.yaml.
In your project-level build.gradle file, make sure to include Google's Maven repository in both your buildscript and allprojects sections(for all api's).
<meta-data
android:name="com.google.mlkit.vision.DEPENDENCIES"
android:value="ica" />
<!-- To use multiple models: android:value="ica,model2,model3" -->
copied to clipboard
Use these options:
ocr - Barcode Scanning
1. Create an InputImage
From path:
final inputImage = InputImage.fromFilePath(filePath);
copied to clipboard
From file:
final inputImage = InputImage.fromFile(file);
copied to clipboard
From bytes:
final inputImage = InputImage.fromBytes(bytes: bytes, inputImageData: inputImageData);
copied to clipboard
From CameraImage (if you are using the camera plugin):
final camera; // your camera instance
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);
copied to clipboard
2. Create an instance of detector
// vision
final barcodeScanner = GoogleMlKit.vision.barcodeScanner();
copied to clipboard
3. Call the corresponding method
// vision
final List<Barcode> barcodes = await barcodeScanner.processImage(inputImage);
copied to clipboard
4. Extract data from response.
a. Extract barcodes.
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;
// See API reference for complete list of supported types
switch (type) {
case BarcodeType.wifi:
BarcodeWifi barcodeWifi = barcode.value;
break;
case BarcodeValueType.url:
BarcodeUrl barcodeUrl = barcode.value;
break;
}
}
copied to clipboard
5. Release resources with close().
// vision
barcodeScanner.close();
copied to clipboard
Android #
To reduce the apk size read more about it in issue #26. Also look at this.
iOS #
If you are using this plugin in your app and any other plugin that requires Firebase, there is a known issues you will encounter a dependency error when running pod install. To read more about it go to issue #27.
License #
MIT
For personal and professional use. You cannot resell or redistribute these repositories in their original state.
There are no reviews.