predator 27.10.2012 17:50
Есть вопрос! — Распознавание текста на чеках
Хочу написать распознавалку чеков (те которые из магазинов, банковские и т.д.). С чего стоит начать? Использовать какой-нибудь OpenCV или можно обучить tesseract, или может быть уже есть готовые решения (открытые конечно же)?Пока попробовал tesserac'ом и ещё какими-то OCR - получается плохо.
UPD: хм... сейчас опять попробовал tesseract и впринципе неплохо получилось, есть маленькие недочеты.
UPD2:
Если кто знает адреса каких-нибудь туториалов по OpenCV - поделитесь знанием (желательно на русском конечно, но и понятные простые на английском тоже сойдут).
OpenCV нужен чтобы научиться:
1) поворачивать изображение чека горизонтально, если скан получился с наклоном.
2) возможно выделять из изображения строки, чтобы потом отдавать их tesseract'у поотдельности. Так как на чеках обычно написано неполное название продукта, то это поможет после распознавания показывать пользователю изображение отсканированной строки + результат сканирования + возможные варианты исправления (с помощью aspell) и просить ввести корректное название продукта (которое потом можно будет запомнить и не спрашивать в следующий раз или выдавать его первым).
3) Хочется ещё чтобы на сканер можно было сразу положить несколько чеков. А значит их потом надо как-то разделить.
Также, если есть люди которые могут обучить tesseract шрифту чеков - you are welcome! =)
Классно! А не поделитесь, если что получится?
Результатом конечно же поделюсь =)
Ее в GnuCash, запилить было-бы классно...
Я тоже из-за GNU Cash над этим задумался =)
На счет качества, я так понимаю для стабильности требуется высокое разрешение, так как текст на чеках как правило мелкий. Разрешение принтера печатавшего, как правило низкое у фиксальников. не искаженность геометрии.
Всего этого сложно дробится от чека...
Всего этого сложно дробится от чека...
Впринципе tesseract хорошо справляется, но путает "п" и "м" и "л". Если переобучить tesseract под конкретный шрифт, то думаю, что можно будет делать изображение с низким разрешением. А этого хочется, т.к. сканируется с качеством в 600dpi у меня слишком долго =(
Если переобучить tesseract под конкретный шрифт
1) выложите какой нибудь пример, чтобы подобрать правильный шрифт.
2) вот тут есть пример использования http://habrahabr.ru/post/126834/
3) в этом примере
Я скачал пакет "Russian Language Data for Tesseract"
В нем обнаружил такой файл
rus.cube.size с содержимым
Вот она, настройка под конкретный шрифт...
Пока все, что удалось найти... Что нарою или пойму как пользовать, опишу...
поворот изображений
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html
http://docs.opencv.org/doc/tutorials/imgproc/imgtrans/warp_affine/warp_affine.html
Вообще, частенько думал на эту тему, но все не решался заняться... Ее в GnuCash, запилить было-бы классно...
На счет качества, я так понимаю для стабильности требуется высокое разрешение, так как текст на чеках как правило мелкий. Разрешение принтера печатавшего, как правило низкое у фиксальников. не искаженность геометрии.
Всего этого сложно дробится от чека...
Можно попытаться сделать какую нибудь нейронную сеть и попытаться ее натаскать не на символы, а на чек в целом (если вы, например, часто покупаете в конкретном магазине). Тогда качество распознавания может повысится... Но инструментов для этого не знаю...