Рубрики
Без рубрики

Как извлечь текст из изображений в Python, используя OpenCV и EasedOrr

Вы можете извлечь текст из изображений с easeocr, глубоким инструментом OCR на основе обучения в Python. EaseOrr Confacts очень хорошо выполняется на счетам, почерке, автомобильных тарелках и открытых признаках. https://youtu.be/9_srxdo9ec4 впервые выпущено в 2007 году, pytesseract [1] – библиотека TO-GO для извлечения текста из изображений. Он использует классические методы компьютерного видения для выполнения оптического распознавания символов (OCR), … Как извлечь текст из изображений в Python с использованием OpenCV и EasedoR Подробнее »

Автор оригинала: Hwei Geok Ng.

Вы можете извлечь текст из изображений с easeocr, глубоким инструментом OCR на основе обучения в Python. EaseOrr Confacts очень хорошо выполняется на счетам, почерке, автомобильных тарелках и открытых признаках.

Впервые выпущен в 2007 году, Pytesseract [1] – библиотека To-Go для извлечения текста из изображений Отказ Он использует классические методы компьютерного видения для выполнения распознавания оптического символа (OCR), затем оснащены компонентами нейронных сетей, такие как LSTM, от его четвертой версии.

Вы можете спросить: есть ли альтернатива, которая так же хороша, как Pytesseract для OCR? Да, easeOrr [2] это. Это новый, Глубокий учебный модуль для чтения текста из всех видов изображений более чем на 80 языках.

В этой статье мы пройдем через трехступенчатую учебное пособие.

  • Во-первых, мы устанавливаем необходимые библиотеки.
  • Во-вторых, мы будем выполнять обработку Image-Text, используя easeOrce на различных изображениях.
  • В-третьих, мы будем использовать OpenCV на наложение обнаруженные тексты на оригинальных изображениях. Давайте начнем.

Шаг 1: Установите и импортируйте необходимые модули

Распознавание оптического символа – это процесс чтения текста из изображений. Простая задача для людей, но больше работы для компьютеров для идентификации текста из пикселей изображений. Для этого учебника нам понадобится OPENCV, MATPLOTLIB, NUMPY, PYTORCH и EasedOrrock Modules. Вот Github Repo настоящего Учебника Отказ

Вы можете следить за руководством в нашей интерактивной ноутбуке Jupyter онлайн:

Во-первых, создайте виртуальную среду для этого проекта. Затем установите указанные модули в ноутбуке Jupyter:

!pip install opencv-python
!pip install matplotlib
!pip install numpy
!pip install torch==1.7.1+cpu torchvision==0.8.2+cpu torchaudio===0.7.2 -f https://download.pytorch.org/whl/torch_stable.html
!pip install easyocr

Модуль OpenCV предназначен для операций, связанных с компьютерным зрением в Python. В частности, мы будем использовать его для оверлейных изображений с соответствующими распознанными текстами позже. Нам нужен модуль MATPLOTLIB для отображения изображений. И мы будем использовать модуль Numpy для преобразования изображений в массивы.

Pytorch – это предпосылка для модуля EasedOrrock. Его установка варьируется в зависимости от требований водителя ОС и ГПУ. Вы можете получить команды установки на домашней странице Pytorch [3]. Скопируйте и выполните соответствующую команду, как показано на рисунке 1, если вы работаете в Windows.

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

import cv2
import numpy as np
import easyocr
import matplotlib.pyplot as plt
%matplotlib inline

Обратите внимание, что % matplotlib inline Magic Command Exclusive для ноутбуков Jupyter. Он не требуется в сценарии Python. Это устанавливает бэкэнда Модуль MatPlotlib отображать цифры, встроенные и не на отдельном окне.

Вы в отличном старте! Теперь на следующий шаг.

Шаг 2: Загрузить изображения и извлечь текст, используя easeocr

Для причин авторских прав, все изображения, используемые в образце ноутбука, не предоставляются в REPO GitHub. Не стесняйтесь скачать их с unsplash.com или используйте свои изображения. Определите путь изображения, используя следующий код:

im_1_path = './folder/image_name.jpg'

Далее инициализируйте читатель easeOrce со списком языков, которые вы хотели бы использовать. Используйте читатель, чтобы прочитать изображение со следующей функцией:

def recognize_text(img_path):
    '''loads an image and recognizes text.'''
    
    reader = easyocr.Reader(['en'])
    return reader.readtext(img_path)

Вы удивляете вас, что две строки кода – это все, что вам нужно для выполнения OCR? «Легко» для EaseOrr! распознать_text () Функция инициализирует считыватель OCR к переменной именованному читателю. Это принимает список языков в качестве параметра. Для этого учебника мы хотим распознавать только английский текст, поэтому ‘en’ в списке. ReadText Способ считывает изображение, учитывая его хранимый каталог. Возвращенный результат OCR передан как выход распознать_text () функция.

result = recognize_text(im_1_path)
result

Обратите внимание, что за то, что он займет больше времени для выполнения easeOrg на CPU вместо графического процессора. im_1_path Изображение заняло около десяти секунд, которые будут выполнены распознать_text () Отказ На рисунке 2 показаны операции в каркасе EasedOrrock. Рамка включает в себя предварительный обработку изображения, распознавание модели глубокого обучения и постпроцессируя изображения.

Вот вывод модуля easeocrock:

[([[1421, 1139], [1453, 1139], [1453, 1177], [1421, 1177]],
  'S',
  0.8625819477165351),
 ([[1524, 1038], [2201, 1038], [2201, 1211], [1524, 1211]],
  'CCC444',
  0.9068348515895301),
 ([[1641, 1201], [2012, 1201], [2012, 1245], [1641, 1245]],
  'T E S L A.C O M',
  0.33458756243407134),
 ([[2519, 1254], [2790, 1254], [2790, 1284], [2519, 1284]],
  'DUAL MSTOF',
  0.24584700695087508)]

Он возвращает список обнаруженных текста, с каждым текстовым элементом, содержащим три типа информации. Которые являются: текст, его ограничивающие вершины коробки и уровень доверия к обнаружению текста. С вывода easeOrted обнаружил четыре текстовых элемента: ‘s’, ‘ccc444’, ‘t e s l a a m’ и “Dual mstof ‘.

Чтобы проверить точность OCR, нам нужно отобразить исходное изображение на нашей ноутбуке:

img_1 = cv2.imread(im_1_path)
img_1 = cv2.cvtColor(img_1, cv2.COLOR_BGR2RGB)
plt.imshow(img_1)

Imread Способ модуля OpenCV загружает изображение как Numpy Array , который назначен на img_1 Переменная. Цветные каналы по умолчанию OPENCV (синий, зеленый, красный) вместо (красный, зеленый, синий). Вот почему мы используем CVTCOLOR Способ преобразования канала. В противном случае мы увидим изображение с синим цветом, предполагаемым как красный и наоборот. Изображение показано на рисунке 3, которое представляет собой автомобиль с видом на задний вид ее пластины регистрации автомобиля.

Сравнивая изображение с выходом OCR, автомобильная пластина захвачена точно. EaseOrtoR определяет код страны и имя провайдера автомобиля. Тем не менее, «Двойной моторный текст на правой стороне автомобиля обнаруживается как« двойной MSTOF ». Для этого методы предварительного обработки изображения могут быть использованы для увеличения точности OCR. Но на данный момент мы проверим только производительность easeOrrocle из коробки.

Шаг 3: Наложение прямой текст на изображениях с использованием OpenCV

Теперь мы хотим нарисовать прямоугольник вокруг каждого распознанного текстового элемента на своем исходном изображении. overay_ron_text () Функция будет объяснена задача задачи.

def overlay_ocr_text(img_path, save_name):
    '''loads an image, recognizes text, and overlays the text on the image.'''
    
    # loads image
    img = cv2.imread(img_path)
    img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
    
    dpi = 80
    fig_width, fig_height = int(img.shape[0]/dpi), int(img.shape[1]/dpi)
    plt.figure()
    f, axarr = plt.subplots(1,2, figsize=(fig_width, fig_height)) 
    axarr[0].imshow(img)

Во-первых, мы используем модуль OPENCV для загрузки изображения в качестве Numpy Array и исправления его цветных каналов. Массив назначен переменной IMG Отказ Мы хотим отображать два изображения – исходное изображение и исходное изображение с распознанными текстами. подломы Способ MATPLOTLIB используется для отображения более одного рисунка за раз. Imshow Метод Аксар [0] Переменная отображает исходное изображение.

# recognize text
    result = recognize_text(img_path)

    # if OCR prob is over 0.5, overlay bounding box and text
    for (bbox, text, prob) in result:
        if prob >= 0.5:
            # display 
            print(f'Detected text: {text} (Probability: {prob:.2f})')

            # get top-left and bottom-right bbox vertices
            (top_left, top_right, bottom_right, bottom_left) = bbox
            top_left = (int(top_left[0]), int(top_left[1]))
            bottom_right = (int(bottom_right[0]), int(bottom_right[1]))

            # create a rectangle for bbox display
            cv2.rectangle(img=img, pt1=top_left, pt2=bottom_right, color=(255, 0, 0), thickness=10)

            # put recognized text
            cv2.putText(img=img, text=text, org=(top_left[0], top_left[1] - 10), fontFace=cv2.FONT_HERSHEY_SIMPLEX, fontScale=1, color=(255, 0, 0), thickness=8)

распознать_text () Функция возвращает выход OCR и присваивает его Результат Переменная. А для Цикл создан для прохождения каждого текстового элемента, содержащегося в переменной. Признанные текстовые элементы отображаются только в том случае, если их уровни достоверности OCR выше 0,5 ( ZOB.5 ). Затем получены верхние левые и нижние правые вершины каждой ограничительной коробки. Они преобразуются на кортежи целочисленных ценностей (как требуется OpenCV).

Прямоугольник Способ создает зеленую ограничивающую коробку для каждого обнаруженного текстового элемента. PutText Метод отображает распознанный текст над его соответствующей ограничивающей коробкой. Как все это сделано в для петля, операция повторяется для каждого распознанного текста в Результат Переменная.

# show and save image
    axarr[1].imshow(img)
    plt.savefig(f'./output/{save_name}_overlay.jpg', bbox_inches='tight')

Наконец, overay_ron_text () Функция отображает каждый созданный текстовый и ограничивающий коробку. Imshow Метод Аксар [1] Переменная отображает окончательное изображение. Поскольку обе левые, так и правые изображения находятся в одном Subplot, они отображаются как одно окончательное изображение. SaveFig Способ хранит окончательное изображение в определенный локальный каталог.

Насколько хорошо проводил EasedOrr?

Цифры ниже показывают, насколько хорошо EaseOrr выполняет для различных видов изображений. Мы проверим библиотеку по почерке, цифру, электронному фактуре и открытому знаку. Для полного обзора, пожалуйста, обратитесь к демонстрационной ноутбуке в данном репо GitHub.

EasedOrrous обнаруживает большую часть текста на рисунке 7 правильно, кроме текста на правой стороне.

EaseOrran, удается обнаружить каждый текст на рисунке 5. Но текстовая последовательность не совсем правильная.

EasedOrr определяет все на рисунке 6 правильно. Это относительно большое изображение с четкими печатными цифрами и текстами, что делает OCR лучше.

EaseOrran, удается обнаружить каждый текст на счете точно без предварительной обработки изображений.

Опять же, EaseOrtic Nails его для рисунка 8. Каждый текст на рисунке правильно обнаружен.

У нас было впечатление, что easeOrce отлично выполняет на изображениях с ясным текстом. Работает нормально без необходимости предварительного назначения изображений, которые экономит время и стоимость.

Бонус: распознавание текста к речи

Выходы из OCR могут быть дополнительно используются с помощью простого приложения распознавания текстовой речи. Это преобразует текст в голосовое высказывание. Во-первых, нам нужно установить модуль PYTTSX3 [4] следующим образом:

!pip install pyttsx3

Реализация может быть сделана в пять строк кода:

import pyttsx3

engine = pyttsx3.init()
engine.setProperty('rate', 100)
engine.say(sentence)
engine.runAndWait()

Код инициализирует двигатель TTS и назначает его переменного двигателя. SetProperty Метод определяет скорость высказывания. Скажи Метод регистрирует текстовое предложение, которое будет произносится. Наконец, Runandwait Способ выполняет операцию текстовой речи.

Заключение

В этой статье объясняется, как извлечь текстовые элементы из изображений, используя easeocr. Он также показывает, как накладывать распознанный текст на изображениях с использованием OPENCV. Простой текстовой речью также вводится в качестве расширенного приложения для выхода OCR.

Рекомендации

[1] https://github.com/madmaze/pytesseract.

[2] https://github.com/jaidedai/easyocr.

[3] https://pytorch.org/get-started/locally/

[4] https://pypi.org/project/pyttsx3/