1

我一直在使用“firebase_ml_vision”包扫描“相机”包提供的图像流中的二维码。在 11 月 6 日更新之前一切都很好。在 Android 中,我仍然可以毫无问题地扫描二维码。但在 iOS 中,我让应用程序抛出异常:PlatformException(Error 13, com.firebase.ml, Barcode engine is nil., null)

我已经用 podfile 更新了我的 podfile pod 'GoogleMLKit/BarcodeScanning',因为当 Podfile 有错误时,命令“flutter build ios”完成了一个错误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();
  }
4

1 回答 1

0

问题是,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
于 2021-03-19T12:31:37.583 回答