Нужен совет по сканированию чека Tesseract

Я боролся с Тессерактом снова и снова за различные проекты по распознаванию символов, и сегодня я нашел вариант использования, который, как мне показалось, будет для меня настоящим ударом, но через много часов я все еще ухожу неудовлетворенным. Я хотел поставить проблему здесь и посмотреть, есть ли у кого-нибудь еще советы о том, как решить эту задачу.

Моя жена пришла ко мне сегодня утром и спросила, может ли она в любом случае легко отсканировать свои квитанции от Wal-Mart и со временем выстроить историю цен, потраченных по категориям и на конкретные предметы, чтобы мы могли сделать некоторые тренды и легко углубиться в куда тратятся Сначала я чувствовал, что это был очень высокий заказ, но после некоторых раскопок я обнаружил несколько вещей, которые заставляют меня чувствовать, что это в пределах досягаемости:

Квитанции Wal-Mart в целом очень хорошо структурированы и легко читаются. Они даже включают в себя UPC для каждого предмета (возможность поиска в базе данных UPC?) И, по-видимому, классифицируют продовольственные товары как F или I (не уверен, в чем разница), а также имеют столбец налогового кода, который может оказаться полезным, если Я узнаю секреты того, что означают коды.

Кроме того, я обнаружил, что существует некоторый API поиска элементов Wal-Mart, к которому я могу получить доступ, который может оказаться полезным при поиске UPC.

У них есть приложение для смартфонов, которое позволяет сканировать QR-код, напечатанный на каждой квитанции. Это приложение ищет код «TC» в квитанции и извлекает всю деталированную квитанцию ​​со своих серверов. Он показывает вам отличное графическое представление квитанции, включая миниатюрные изображения всех предметов, стоимости и т. Д. Если бы это приложение просто классифицировало и суммировало квитанцию, я был бы готов! Но, увы, это не цель приложения ....

Последняя часть головоломки состоит в том, что вы можете экспортировать сгенерированное компьютером изображение чека в формате PNG на тот случай, если вы захотите сохранить его и выбросить бумажную версию. Для меня это снимок денег, так как эти PNG-файлы созданы на компьютере и поэтому не подвержены проблемам, связанным с фотографированием или сканированием бумажной квитанции.

Пример одного из них (слегка отредактированный, чтобы закрасить некоторые области, но в остальном точно так же, как получено из приложения) здесь:

https://postimg.cc/image/s56o0wbzf/

Вы можете видеть, что важная часть текста идеально выровнена в 5 столбцах, и это в конечном счете то, о чем этот вопрос. Как заставить Тессеракт точно распознать это в тексте. У меня есть много идей, где его взять, но все начинается с распознавания текста!

Самым близким, что я пришел, является вот этот пример:

http://pastebin.com/nuZJBVg8

Я использовал psm6 и набор ограничений символов, чтобы заставить его использовать только прописные буквы + цифры + только несколько символов:

tessedit_char_whitelist 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ#()/*@%-.

На первый взгляд, распознавание текста почти совпадает. Но когда вы будете копать глубже, вы увидите, что в общем-то это очень плохо. 3 и 8 почти всегда ошибаются. То же самое с 6 и 5. Тогда бывают случаи, когда он просто полностью пропускает символы или просто начинает разваливаться (как в строке 31+ в примере). Он начинает видеть 2 как 1 или даже просто пропущенные символы. SO PIZZA в строке 33 должно быть «2,82», но выходит как «32».

Я попытался выполнить некоторую предварительную обработку изображения, чтобы сгущить символы и убедиться, что оно чисто черно-белое, но ни одно из моих усилий не приблизилось к исходному изображению из Wal-Mart + вышеприведенным командам.

В идеале, поскольку это такой хорошо структурированный PNG, который, вероятно, всегда имеет одинаковую ширину, я бы хотел, чтобы я мог определять столбцы по ширине в пикселях, чтобы Tesseract обрабатывал каждый столбец независимо. Я пытался исследовать это, но файлы UZN, о которых я упоминал, не переводятся мне так, как ширина пикселя, и кажется, что высота - это фактор, который не сработает, поскольку высота всегда будет переменной.

Кроме того, мне нужно выяснить, как обучить Тессеракта распознавать числа на 100% точно (буквы на самом деле не важны). Я начал изучать, как обучать программу, но, честно говоря, она довольно быстро пришла мне в голову, так как объем обучения в документации больше для того, чтобы она распознавала целые языки, а не только 10 цифр.

Конечным конечным игровым решением была бы цепочка команд конвейера, которая взяла исходный PNG из приложения и вернула мне CSV с 5 столбцами данных из важной части квитанции. Я не ожидаю этого из этого вопроса, но любая помощь, направляющая меня к нему, будет принята с благодарностью! В этот момент мне просто не хочется, чтобы Тессеракт снова меня ударил, и поэтому я полон решимости найти способ справиться с ней!

Ответы на вопрос(2)

Ваш ответ на вопрос