Как заставить прочитать фото снятой на камеру в библиотеке "tesseract_orc"?

  void onSelectCamera() async {
    var result = await ImagePicker().getImage(
      source: ImageSource.camera,
    );
    if (result != null) {
      scanning(result.path);
    }
  }

tesseract при сканировании фото снятой на камеру не правильно сканирует, но если я отсканирую фото из галереи то сканирует правильно (если написать ImageSource.gallery вместо ImageSource.camera)

void scanning(String pickedFile) async {
    {
      setState(() {
        _extractText = "";
        _scanning = true;
      });
      // Stopwatch()..start();
      await TesseractOcr.extractText (
        pickedFile,
        language: _lang,
      ).then((value) {
        if (value != null) {
          _extractText = value;
          _scanning = false;
          if (this.mounted) {
            setState(() {});
          }
        }
      });
    }
  }

Ответы (1 шт):

Автор решения: Kizat Suleimenov

похоже был какой то глюк с форматом, сканер не обработав возвращал текст написанный наугад, что то вроде того, я фото перезаписал в другой путь и с помощью flutter_image_compress изменил формат на .heic, так по мне, сканер лучше обрабатывает:

  void onSelectGallery() async {
    var result = await ImagePicker().getImage(
      source: ImageSource.gallery,
    );
    if (result != null) {
      final direction = await getTemporaryDirectory();
      var file = await FlutterImageCompress.compressAndGetFile(
        result.path,
        "${direction.path}/${DateTime.now().microsecondsSinceEpoch}.heic",
        format: CompressFormat.heic,
      );
      await File(result.path)?.delete();
      if (_onCrop) {
        crop(file.path);
      } else {
        scanning(file.path);
      }
    }
  }

  void onSelectCamera() async {
    var result = await ImagePicker().getImage(
      source: ImageSource.camera,
    );
    if (result != null) {
      final direction = await getTemporaryDirectory();
      var file = await FlutterImageCompress.compressAndGetFile(
        result.path,
        "${direction.path}/${DateTime.now().microsecondsSinceEpoch}.heic",
        format: CompressFormat.heic,
      );
      await File(result.path)?.delete();
      if (_onCrop) {
        crop(file.path);
      } else {
        scanning(file.path);
      }
    }
  }

  void crop(String pickedFile) async {
    var cropFile = await ImageCropper.cropImage(
        sourcePath: pickedFile,
        androidUiSettings: AndroidUiSettings(
          lockAspectRatio: false,
        ));
    if (cropFile != null) {
      scanning(cropFile.path);
    }
  }

  void scanning(String pickedFile) async {
    setState(() {
      _extractText = "";
      _scanning = true;
    });
    final value = await TesseractOcr.extractText(
      pickedFile,
      language: _lang,
    );
    await File(pickedFile)?.delete();
    if (value != null) {
      _extractText = value;
      _scanning = false;
      if (this.mounted) {
        setState(() {});
      }
    }
  }
→ Ссылка