【问题标题】:Passing a base64 string encoded image/ byte image as an image for processsing in Firebase ML Vision in Flutter将 base64 字符串编码图像/字节图像作为图像传递给 Flutter 中的 Firebase ML Vision 进行处理
【发布时间】:2020-09-03 02:32:52
【问题描述】:

我想从 base64 编码的图像中 OCR 文本。 我知道图像有效,因为我可以使用

显示它

Image.memory(base64Decode(captchaEncodedImgFetched))

现在,问题是我需要将此图像传递给 Firebase ML Vision 进行处理。

firebase_ml_vision 有一个使用文件中图像的示例

final File imageFile = getImageFile();
final FirebaseVisionImage visionImage = FirebaseVisionImage.fromFile(imageFile);`

但是我有一个 base64 编码的图像。

我尝试了以下

final FirebaseVisionImage visionImage = FirebaseVisionImage.fromBytes(
base64Decode(captchaEncodedImgFetched));

但它似乎需要FirebaseVisionImageMetadata() 作为参数,但我对字节图像一无所知。

这个类需要更多我不明白的论点。 例如,它需要一个 size : Size(width, height) 参数。图像不是应该已经有尺寸了吗?为什么我需要重新指定?

现在我将它设置为Size(200, 50)。然后还有其他论据,我不知道该传递给他们什么。例如planeDatarawFormat

以下是这些文档:

https://pub.dev/documentation/firebase_ml_vision/latest/firebase_ml_vision/FirebaseVisionImageMetadata-class.html

https://pub.dev/documentation/firebase_ml_vision/latest/firebase_ml_vision/FirebaseVisionImagePlaneMetadata-class.html

https://pub.dev/documentation/firebase_ml_vision/latest/

【问题讨论】:

    标签: flutter firebase-mlkit google-mlkit mlvision


    【解决方案1】:

    FirebaseVisionImage.fromBytes 需要 FirebaseVisionImageMetadata 哪个实习生需要 FirebaseVisionImagePlaneMetadata。下面的例子:

    // Below example uses metadata values based on an RGBA-encoded 1080x1080 image
    final planeMetadata = FirebaseVisionImagePlaneMetadata(
        width: 1080,
        height: 1080,
        bytesPerRow: 1080 * 4,
    );
    
    final imageMetadata = FirebaseVisionImageMetadata(
        size: Size(1080, 1080),
        planeData: planeMetadata,
        rawFormat: 'RGBA', 
    );
    
    final visionImage = FirebaseVisionImage.fromBytes(decoded, metadata);
    

    虽然以性能为代价,但更简单的解决方法是将字节写入磁盘并从那里读取图像,如下所示:

    File imgFile = File('myimage.png');
    imageFile.writeAsBytesSync(decoded.ToList());
    
    final visionImage = FirebaseVisionImage.fromFile(imageFile);
    

    【讨论】:

    • 你能解释一下什么是`planeMetadata`吗?
    • 还有为什么我们需要定义大小,不是已经在base64数据中可用了吗?有没有办法使用函数提取详细信息并传递它们而不是手动指定或者数据不存在?
    猜你喜欢
    • 1970-01-01
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-10
    • 1970-01-01
    • 1970-01-01
    • 2018-12-28
    相关资源
    最近更新 更多