Как можно использовать функцию обрезки, чтобы сделать это изображение читабельным для pytesseract?

Так вот следующее изображение https://imgur.com/a/E6mpB

Я хочу выделить каждый из этих номеров, чтобы я мог прочитать их pytesseract,

Вот сценарий, который я написал до сих пор:

try:
    import Image
except ImportError:
    from PIL import Image
import pytesseract as tes

filename = "test.png";

x1 = (50,60,220,110)
x2 = (45,160,230,228)
x3 = (45,260,330,328)

image = Image.open( filename );

cropped_image = 'cropped_image'
scores = [x1, x2, x3]
for i in scores:
    cropped_image1 = image.crop ( i )
    results = tes.image_to_string(cropped_image1,lang="letsgodigital",boxes=False)
    print(results)

так что в основном я обрезаю это изображение для каждого числа. Однако я не чувствую, что это решение очень эффективно (плюс не так просто найти координату для каждого числа. Я планирую применить этот скрипт к нескольким изображениям, но число всегда будет в одном месте. Любая идея о том, как я могу сделать этот скрипт лучше?

Надеюсь, проблема ясна.

Благодарю.

PS: я не знаю почему, но загрузка изображения прямо в мой пост не работает....

1 ответ

Если номера каждого изображения находятся в позициях образца, использование многопроцессорной обработки для обработки обрезанных изображений ускорит время выполнения как multiprocessing может выполнять параллелизм данных для передачи одного изображения (данных) на ядро ​​процессора. Если на вашей машине установлен один ЦП с 4 ядрами, время обработки вашего образца будет сокращено до более 3 единиц вместо 12 единиц для 12 обрезанных изображений. Вы можете использовать Google для получения дополнительной информации и примеров.

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

введите описание изображения здесь

Пример кода на черно-белом.

threshold = 60  
cropped = image.crop(x)
cropped = cropped.convert('L')
inverted = PIL.ImageOps.invert(cropped)
inverted_mask = inverted.point(lambda p: p < threshold and 255) 
Другие вопросы по тегам