Как заставить прочитать фото снятой на камеру в библиотеке "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(() {});
}
}
}