Я снова и снова боролся с Tesseract для различных проектов OCR, и сегодня я нашел прецеденты, которые, как я думал, будут для него хлопать, но после многих часов я все еще не ухожу. Я хотел поставить проблему здесь и посмотреть, есть ли у кого-нибудь еще советы о том, как решить эту задачу.
Моя жена пришла ко мне сегодня утром и спросила, есть ли она в любом случае, она может легко отсканировать свои квитанции от Wal-Mart и со временем построить историю цен, проводимых в категориях и для конкретных предметов, чтобы мы могли сделать некоторые тенденции и легко глубокое погружение на том, куда идут расходы. Сначала я чувствовал, что это был очень высокий порядок, но после некоторого рытья я нашел несколько вещей, которые заставляют меня чувствовать, что это находится в пределах досягаемости:
-
Доходы Wal-Mart в целом, очень хорошо структурированы и легко читаются. Они даже включают UPC для каждого элемента (потенциал для поиска по базе данных UPC?) И, как представляется, классифицируют продукты питания с помощью F или я (не уверен, в чем разница), а также столбцы налогового кода, которые могут оказаться полезными, если Я узнаю секреты того, что означают коды.
-
Я также обнаружил, что есть какой-то API-интерфейс поиска элементов Wal-Mart, который я могу получить, доступ к которому будет полезен при поиске UPC.
-
У них есть приложение для смартфонов, которое позволяет сканировать QR-код, напечатанный на каждой квитанции. Это приложение просматривает код "ТС" из квитанции и вытаскивает всю детальную квитанцию со своих серверов. Это показывает отличное графическое представление квитанции, включая миниатюрные изображения всех предметов и стоимости и т.д. Если это приложение просто классифицирует и суммирует квитанцию, я бы сделал! Но, увы, это не цель приложения....
-
Последняя часть головоломки заключается в том, что вы можете экспортировать генерируемый компьютером PNG-образ квитанции, если вы хотите его сохранить и выбросить бумажную версию. Для меня это деньги, так как эти PNG создаются компьютером и поэтому не подвержены проблемам, связанным с съемкой или сканированием бумажной квитанции.
Пример одного из них (слегка отредактированный, чтобы исключить некоторые области, но в противном случае точно так же, как получено из приложения):
http://postimg.org/image/s56o0wbzf/
Вы можете видеть, что важная часть текста полностью выровнена в 5 столбцах, и в конечном итоге это вопрос. Как заставить Tesseract точно распознать это в тексте. У меня есть много идей, где взять это отсюда, но все начинается с OCR!
Самый близкий я сам пришел сюда:
Я использовал psm6 и набор ограничения символов, чтобы заставить его делать прописные + цифры + только несколько символов:
tessedit_char_whitelist 0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ#()/*@%-.
На первый взгляд OCR, похоже, почти соответствует. Но по мере того, как вы копаете глубже, вы увидите, что это не так ужасно. 3s и 8s почти всегда ошибаются. То же самое с 6s и 5s. Затем бывают случаи, когда он просто полностью пропускает символы или просто начинает разваливаться (например, строка 31+ в примере). Он начинает видеть 2s как 1s или даже просто отсутствующих символов. SO PIZZA на строке 33 должна быть "2.82", но выходит как "32".
Я попытался сделать некоторую предварительную обработку изображения, чтобы сгустить персонажей и убедиться, что он чистый черно-белый, но ни одно из моих усилий не приблизилось к необработанному изображению из Wal-Mart + вышеприведенных команд.
В идеале, поскольку это такой хорошо структурированный PNG, который, предположительно, всегда имеет ту же ширину, которую я бы хотел, если бы я мог определять столбцы по ширине пикселей, чтобы Tesseract обрабатывал каждый столбец независимо. Я попытался это исследовать, но файлы UZN, о которых я уже упоминал, не переводят меня до ширины пикселей, и они кажутся, что высота - это фактор, который не будет работать на них, поскольку высота всегда будет переменной.
Кроме того, мне нужно выяснить, как тренировать Tesseract, чтобы точно распознавать цифры на 100% (буквы не очень важны). Я начал изучать, как тренировать программу, но, честно говоря, это довольно быстро, так как объем обучения в документации больше связан с тем, что он распознает целые языки не только 10 цифр.
Конечным решением для конечной игры будет цепочка цепочек команд, которая взяла исходный PNG из приложения и вернула мне CSV с 5 столбцами данных из важной части квитанции. Я не ожидаю, что из этого вопроса, но любая помощь, направляющая меня к этому, будет очень признательна! На данный момент я просто не чувствую, что меня снова взбивают Тессерактом, и поэтому я решил найти способ овладеть ею!