2016-08-30 5 views
5

Любые предложения по преобразованию этих изображений в текст? Я использую pytesseract, и он отлично работает в большинстве случаев, кроме этого. В идеале я бы точно прочитал эти цифры. В худшем случае я могу просто попытаться использовать PIL, чтобы определить, является ли число слева от «/» равным нулю. Начните с левой стороны и найти первый белый пиксель, тоЧтение текста с изображения

enter image description here enter image description here

from PIL import Image 
from pytesseract import image_to_string 

myText = image_to_string(Image.open("tmp/test.jpg"),config='-psm 10') 
myText = image_to_string(Image.open("tmp/test.jpg")) 

Слэш в центре вызывает вопросы здесь. Я также попытался использовать «.paste» PIL, чтобы добавить много лишнего черного вокруг изображения. Могло бы быть несколько других трюков PIL, которые я мог бы попробовать, но я бы предпочел не идти по этому маршруту, если только не придется.

Я пробовал использовать config = '- psm 10', но мои 8-ые иногда повторялись как:: иногда и случайные символы. И мои 0 прошли как ничто.

Ссылка на: pytesseract don't work with one digit image для -psm 10

_____________EDIT_______________ Дополнительные образцы:

enter image description here 1BJ2I]

enter image description here ДИС

enter image description here 10.I'10

enter image description here 20.I20

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

def ConvertPPTextToReadableNumbers(text): 
    text = RemoveNonASCIICharacters(text) 
    text = text.replace("I]", "0") 
    text = text.replace("|]", "0") 
    text = text.replace("l]", "0") 
    text = text.replace("B", "8") 
    text = text.replace("D", "0") 
    text = text.replace("S", "5") 
    text = text.replace(".I'", "/") 
    text = text.replace(".I", "/") 
    text = text.replace("I'", "/") 
    text = text.replace("J", "/") 
    return text 

В конечном счете порождает:

ConvertPPTextToReadableNumbers return text = 18/20 
ConvertPPTextToReadableNumbers return text = 0/5 
ConvertPPTextToReadableNumbers return text = 10/10 
ConvertPPTextToReadableNumbers return text = 20/20 
+0

'-psm 10' для одного распознавания символов, вы можете попробовать' ПСМ 7' (одна строка текста) Ссылка: https://github.com/tesseract-ocr/tesseract/wiki/Command-Line -Usage – Gwen

+0

Я оставил там несколько деталей, что я сделал с psm 10, это попытка вырезать первый символ, а затем использовать psm 10. Я был успешно способен вырезать первый символ иногда, но он был непоследовательным.Даже когда я могу собрать все 8, он будет интерпретироваться как: или что-то еще. И другие герои тоже не прошли. Даже когда я сам вывожу 0, он проходит через пробел. – LampShade

+0

Используя psm 7, он постоянно читает «0 \ 5» как DIS, который, честно говоря, может быть достаточно хорош для моего худшего случая. Я могу просто проверить D, и я буду знать, что это 0 /. Если у кого-то еще есть лучшее решение, не стесняйтесь звонить. Мне жаль, что не было способа сказать «Интерпретировать все как цифры» – LampShade

ответ

2

Вообще говоря, большинство инструментов OCR (например, Tesseract) настроены для работы с сканов высокого разрешения печатного текста. Они плохо работают на изображениях с низким разрешением или с пикселями.

Два возможных подхода здесь:

  1. Если шрифт, фон и расположение изображений вполне предсказуемо, что вам не нужно Tesseract вообще; это просто осложняет ситуацию. Создайте библиотеку изображений, представляющих каждый символ, который вам нужно распознать, и check whether parts of the image are equal to the reference image.

  2. Если это не вариант, или если это кажется слишком сложным, вы можете увеличить размер пикселя с помощью одного из the hq*x algorithms. Дополнительная информация может быть достаточной, чтобы заставить Tesseract надежно распознавать символы.

+0

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