FlutterFire Firebase_ml_vision: PlatformException(ошибка 13, com.firebase.ml, механизм штрих-кода равен нулю, null)
Я использовал пакет firebase_ml_vision для сканирования кодов Qr в потоке изображений, предоставляемом пакетом camera. Все было хорошо до обновления, которое произошло 6 ноября. В Android я все еще могу сканировать qr-коды без проблем. Но в iOS у меня приложение выдает исключение:
PlatformException(Error 13, com.firebase.ml, Barcode engine is nil., null)
Я обновил свой подфайл строкой
pod 'GoogleMLKit/BarcodeScanning'
, потому что команда 'flutter build ios' завершилась с ошибкой, когда в Podfile
pod 'Firebase/MLVisionBarcodeModel'
вместо. Я сделал, потому что
pod update
Команда объяснила, что пакет Firebase/MLVisionBarcodeModel устарел, и сочла его источником проблемы.
Тем не менее проблема продолжает возникать.
Flutter doctor -v
вывод:
[✓] Flutter (Channel stable, 1.22.4, on Mac OS X 10.15.6 19G73 darwin-x64, locale en-EC)
• Flutter version 1.22.4 at /Applications/flutter_sdk/jaime/flutter
• Framework revision 1aafb3a8b9 (3 weeks ago), 2020-11-13 09:59:28 -0800
• Engine revision 2c956a31c0
• Dart version 2.10.4
[✓] Android toolchain - develop for Android devices (Android SDK version 29.0.3)
• Android SDK at /Users/jvasquez/Library/Android/sdk
• Platform android-29, build-tools 29.0.3
• Java binary at: /Applications/Android Studio.app/Contents/jre/jdk/Contents/Home/bin/java
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
• All Android licenses accepted.
[✓] Xcode - develop for iOS and macOS (Xcode 12.1)
• Xcode at /Applications/Xcode.app/Contents/Developer
• Xcode 12.1, Build version 12A7403
• CocoaPods version 1.10.0
[✓] Android Studio (version 4.0)
• Android Studio at /Applications/Android Studio.app/Contents
• Flutter plugin version 46.0.2
• Dart plugin version 193.7361
• Java version OpenJDK Runtime Environment (build 1.8.0_242-release-1644-b3-6222593)
[✓] VS Code (version 1.51.0)
• VS Code at /Applications/Visual Studio Code.app/Contents
• Flutter extension version 3.16.0
[!] Connected device
! No devices available
! Doctor found issues in 1 category.
Это код, который я использую для анализа CameraImage:
static Future<List<Barcode>> detect({
@required CameraImage image,
// @required BarcodeDetector detector,
@required int imageRotation,
}) async {
var rp = List<Barcode>();
try {
BarcodeDetector detector = FirebaseVision.instance.barcodeDetector(
BarcodeDetectorOptions(
barcodeFormats: BarcodeFormat.qrCode,
)
);
var metadata = _buildMetaData(image, _rotationIntToImageRotation(imageRotation));
FirebaseVisionImage visionImage = FirebaseVisionImage.fromBytes(_concatenatePlanes(image.planes), metadata);
rp = await detector.detectInImage(visionImage);
} catch (ex) {
print("Ocurrió un error: $ex");
// UtilFunctions.escribirEnLog(
// mensaje: "$ex",
// nombreFuncion: "detect",
// tipo: 0,
// );
}
return rp;
}
static Uint8List _concatenatePlanes(List<Plane> planes) {
final WriteBuffer allBytes = WriteBuffer();
for (Plane plane in planes) {
allBytes.putUint8List(plane.bytes);
}
return allBytes.done().buffer.asUint8List();
}
1 ответ
Проблема в том, что firebase_ml_vision внутренне использует Firebase / MLVisionBarcodeModel, а не GoogleMLKit / BarcodeScanning.
В выпуске https://github.com/FirebaseExtended/flutterfire/issues/4625 другой пользователь разветвил пакет firebase_ml_vision и настроил его для работы с GoogleMLKit / BarcodeScanning. Для этой формы также есть PR ( https://github.com/FirebaseExtended/flutterfire/pull/5378). Важно отметить, что некоторые функции, особенно облачные, были удалены, чтобы они работали. Следовательно, это может привести к поломке частей вашего приложения, где эти функции отсутствуют, и это еще не лучшее решение.
Чтобы использовать разветвленный пакет, включите в свой Pubspec.yaml следующее:
firebase_ml_vision:
git:
url: git://github.com/algirdasmac/flutterfire
path: packages/firebase_ml_vision