Передача изображения / байта в кодировке строки base64 в качестве изображения для обработки в Firebase ML Vision во Flutter

Я хочу OCR текста из изображения в кодировке base64. Я знаю, что изображение работает, потому что могу отобразить его, используя

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). Затем есть другие средства, и я не знаю, что им передать. Например,planeData а также rawFormat.

Вот документы для них:

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/

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);
Другие вопросы по тегам