{"id":14291,"url":"\/distributions\/14291\/click?bit=1&hash=257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","hash":"257d5375fbb462be671b713a7a4184bd5d4f9c6ce46e0d204104db0e88eadadd","title":"\u0420\u0435\u043a\u043b\u0430\u043c\u0430 \u043d\u0430 Ozon \u0434\u043b\u044f \u0442\u0435\u0445, \u043a\u0442\u043e \u043d\u0438\u0447\u0435\u0433\u043e \u0442\u0430\u043c \u043d\u0435 \u043f\u0440\u043e\u0434\u0430\u0451\u0442","buttonText":"","imageUuid":""}

Анализ изображения с помощью фреймворка EASYOCR

Сама модель распознавания состоит из 3 основных компонентов:

  1. Извлечение признаков(resnet)
  2. Маркировка последовательности (LSTM)
  3. Декодирование (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

0
Комментарии
-3 комментариев
Раскрывать всегда