Время прочтения: 3 мин.
Сама модель распознавания состоит из 3 основных компонентов:
- Извлечение признаков(resnet)
- Маркировка последовательности (LSTM)
- Декодирование (CTC)
Данный фреймворк обладает довольно большим инструментарием поддерживаемых языков, более 80, как утверждает разработчик.
Далее я разберу пример работы данного фреймворка на простом примере извлечения текста из изображения.
Для запуска необходимо установить torch
!pip install torch torchvision
Easyocr
!pip install easyocr
И импортировать его
import easyocr
Для начала анализа изображения нужно загрузить модель чтения для определенных языков в память
reader = easyocr.Reader(['en','ru'], gpu = True)
После этого делаем ссылку на файл данные с которого хотим прочитать. Для данной демонстрации я использовал изображение в формате jfif и jpg, но фреймворк также поддерживает и png.
bounds = reader.readtext('image.jfif')
Print(bounds)
При дефолтном запуске данного метода вернутся не только проанализированные строки, но и координаты текстовой области, а также уровень уверенности.
[([[241, 24], [801, 24], [801, 67], [241, 67]], 'САМАРСКий нАционАльный', 0.03654395043849945),
([[172, 57], [865, 57], [865, 101], [172, 101]], 'исследовательский университет', 0.2935549318790436),
([[184, 95], [866, 95], [866, 144], [184, 144]], 'ИМЕНИ АКАДЕМИКАС П. КоролёвА', 0.014805505983531475),
([[790, 452], [824, 452], [824, 458], [790, 458]], '1461829', 1.0422037455271038e-08)]
Используя координаты текстовой области, мы довольно легко можем визуализировать ее.
Далее предоставляю скрипт отрисовки текстовой области, в нем я использую библиотеку PIL для отрисовки границ.
import PIL
im = PIL.Image.open('image.jfif')
def draw_boxes(image,bounds,color='yellow',width=2):
draw = ImageDraw.Draw(image)
for bound in bounds:
p0, p1, p2, p3 = bound[0]
draw.line([*p0,*p1,*p2,*p3,*p0], fill=color,width=width)
return image.show()
draw_boxes(im,bounds)
Что меня порадовало в данном фреймворке? Он довольно неплохо воспринимает записи под углом, как в данном случае.
[([[9.922678669848631, 103.19792908321288], [254.75835768399057, -17.79794114156195], [288.0773213301514, 72.80207091678712], [43.24164231600943, 194.79794114156195]], 'ЧУДЕСА', 0.48184075951576233)]
При работе с данным фреймворком довольно важно качество анализируемого изображения, т.к., в противном случае, не исключены ошибки в анализе и опечатки. Из довольно частых ошибок, которые я встречал, это ошибочная подстановка буквы Д вместо А или же наоборот. На мой взгляд данный фреймворк не очень подходит для работы с документацией или с изображениями с объемным текстом, скорее это оцифровка каких-то небольших фрагментов изображения, таких как машинные номера, дорожные знаки, содержащие текст, маркировка и тому подобное.
Ссылка разработчика на github: https://github.com/JaidedAI/EasyOCR