1

我想从 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/

4

1 回答 1

0

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);
于 2020-05-17T14:12:11.693 回答