У нас есть конвейер, работающий в Google Cloud Platform, который:
В большинстве случаев все работает хорошо, и извлеченный текст правильный, за исключением некоторых обрезков.
Одним из примеров является многострочная обрезка в формате, который часто выводится неправильно, например:
35LURC194- -> output as SSLUBe404-
6 6
(это немного измененный экземпляр проблемы, но суть вы поняли)
Теперь, вот где вещи становятся странными.
В рамках нашего процесса отладки мы запускали один и тот же код локально, и в каждом случае, когда текст OCR был ошибочным на производстве (в облаке), он работал точно на локальном компьютере!
Различия между локальной и облачной средой:
Вещи, которые мы пробовали до сих пор:
У нас заканчиваются идеи о том, что может быть причиной этого, это действительно сбивает с толку. Все, вплоть до этапа обработки тессеракта, одинаково в обоих сценариях, поэтому проблема должна быть связана с самим тессерактом или средой, но все же все то же самое, кроме самой операционной системы.
Хотелось бы услышать любые идеи о том, что еще мы могли бы попробовать, или у кого-то еще был подобный опыт.
@Chanpols действительно, одна из моих последних попыток состояла в том, чтобы запустить док-контейнер локально, и он по-прежнему выдает неверный вывод с точно таким же тестовым кодом, так что это определенно среда. Я довольно много поиграл с версиями пакетов, убедился, что у меня точно такие же версии, как и на моем локальном ПК, где он работает правильно, но это не помогло. Я проверю еще немного и обновлю, если у меня есть что-нибудь, спасибо!
Так что, в конце концов, это действительно была проблема с версией, связанная с версиями файлов языковых данных.
Этот ответ решил эту проблему для меня, я в основном загрузил файлы языковых данных с помощью wget
, скопировал их в Dockerfile в /usr/share/tesseract-ocr/4.00/tessdata
(каталог может отличаться в зависимости от вашей ОС), и это сработало как шарм.
Странно то, что обычной установки пакетов, предоставляющих файлы этого языка, должно быть достаточно (например, apt install tesseract-ocr-eng
в Debian), но в моем случае эти предоставленные версии не давали мне правильных результатов.
Примечание. Важным шагом, который помог мне найти решение, был локальный запуск контейнера (обычно он работает в Cloud Run на GCP), что позволило гораздо быстрее проводить отладку и экспериментировать.
Похоже, проблема не в самом коде, а в среде, в которой он работает. Вы можете проверить: проверить версию Tesseract, проверить файлы языковых данных, проверить предварительную обработку изображения, попробовать запустить Tesseract без предварительной обработки, проверить настройки локали, попробовать запустить Tesseract с другими конфигурациями и проверить наличие различий в кодировке символов.