Как распознавать с помощью Tesseract, OpenCV и Python PlatoBlockchain Data Intelligence. Вертикальный поиск. Ай.

Как распознавать с помощью Tesseract, OpenCV и Python

Как распознавать с помощью Tesseract, OpenCV и Python

В этом сообщении мы попытаемся объяснить технологию, лежащую в основе наиболее часто используемого движка Tesseract, который был обновлен с учетом последних знаний в области оптического распознавания символов. Эта статья также послужит руководством / руководством по внедрению OCR в python с использованием движка Tesseract. Мы будем проходить через следующие модули:

  • Tesseract OCR Особенности
  • Предварительная обработка для распознавания текста с использованием OpenCV
  • Запуск Tesseract с помощью CLI и Python
  • Ограничения двигателя Тессеракта

Содержание

Введение

распознавание символов = Оптическое распознавание символов. Другими словами, системы оптического распознавания символов преобразуют двухмерное изображение текста, которое может содержать напечатанный или написанный от руки текст, из графического представления в машиночитаемый текст. OCR как процесс обычно состоит из нескольких подпроцессов, которые необходимо выполнять максимально точно. Подпроцессы:

  • Предварительная обработка изображения
  • Локализация текста
  • Сегментация персонажей
  • Распознавание персонажей
  • Постобработки

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

В течение почти двух десятилетий системы оптического распознавания символов широко использовались для автоматического ввода текста в компьютеризированные системы. Тем не менее, за все это время обычные системы OCR (такие как зональное ОКР) так и не смогли преодолеть свою неспособность читать больше, чем несколько шрифтов и форматов страниц. Пропорциональный шрифт (который включает практически все набранные копии), шрифты для лазерных принтеров и даже многие непропорциональные шрифты для пишущих машинок остались вне досягаемости этих систем. И в результате традиционное распознавание символов никогда не достигало большего, чем незначительное влияние на общее количество документов, нуждающихся в преобразовании в цифровую форму.

Как распознавать с помощью Tesseract, OpenCV и Python
Оптический процесс распознавания символов (Courtesy)

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

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


У вас есть проблемы с OCR? Хотите снизить затраты на ввод данных вашей организации? Направляйтесь к Нанонеты и создавать модели OCR для извлекать текст из изображений or извлекать данные из PDF-файлов на основе ИИ Распознавание PDF-файлов!


OCR-инструменты с открытым исходным кодом

Есть много оптическое распознавание символов программное обеспечение доступно. Я не нашел никакого сравнения качества между ними, но я напишу о некоторых из них, которые кажутся наиболее удобными для разработчиков.

Тессеракт - движок OCR с открытым исходным кодом, завоевавший популярность среди разработчиков OCR. Несмотря на то, что иногда может быть сложно внедрить и изменить, на рынке долгое время не было слишком много бесплатных и мощных альтернатив OCR. Тессеракт начинал как доктор философии. исследовательский проект в HP Labs, Бристоль. Он приобрел популярность и был разработан HP в период с 1984 по 1994 год. В 2005 году HP выпустила Tesseract как программное обеспечение с открытым исходным кодом. С 2006 года разрабатывается компанией Google.

Как распознавать с помощью Tesseract, OpenCV и Python
Сравнение тенденций Google для различных инструментов OCR с открытым исходным кодом

ОКРопус - OCRopus - это система OCR с открытым исходным кодом, позволяющая легко оценивать и повторно использовать компоненты OCR как исследователями, так и компаниями. Коллекция программ анализа документов, а не система оптического распознавания символов "под ключ". Чтобы применить его к своим документам, вам, возможно, потребуется выполнить некоторую предварительную обработку изображений и, возможно, также обучить новые модели. В дополнение к самим сценариям распознавания существует несколько сценариев для наземного редактирования и исправления истинности, измерения частоты ошибок, определения матриц путаницы, которые легко использовать и редактировать.


Глазной - Ocular лучше всего работает с документами, напечатанными с помощью ручного пресса, в том числе с документами, написанными на нескольких языках. Он работает с использованием командной строки. Это современная историческая система распознавания текста. Его основными характеристиками являются:

  • Обучение без надзора неизвестных шрифтов: требуются только изображения документа и корпус текста.
  • Способность обрабатывать шумные документы: непоследовательное рисование, интервалы, вертикальное выравнивание
  • Поддержка многоязычных документов, в том числе тех, которые имеют значительное переключение кода на уровне слов.
  • Неуправляемое изучение шаблонов орфографических вариаций, включая архаичное правописание и стенографию принтера.
  • Одновременная совместная транскрипция в дипломатической (буквальной) и нормализованной формах.


SwiftOCR - Я также упомяну движок OCR, написанный на Swift, поскольку сейчас ведутся огромные разработки по продвижению использования Swift в качестве языка программирования разработки, используемого для глубокого обучения. Проверять, выписываться Блог чтобы узнать больше почему. SwiftOCR - это быстрая и простая библиотека OCR, которая использует нейронные сети для распознавания изображений. SwiftOCR утверждает, что их движок превосходит хорошо известную библиотеку Tessaract.

В этом сообщении мы разместим сосредоточиться на Tesseract OCR и узнайте больше о том, как это работает и как это используется.


Tesseract OCR

Tesseract — это механизм распознавания текста (OCR) с открытым исходным кодом, доступный по лицензии Apache 2.0. Его можно использовать напрямую или (для программистов) с помощью API для извлечения печатного текста из изображений. Он поддерживает множество языков. Tesseract не имеет встроенного графического интерфейса, но есть несколько доступных на веб-сайте. 3-я страница, Tesseract совместим со многими языками программирования и средами через обертки, которые можно найти здесь, Он может использоваться с существующим анализом макета для распознавания текста в большом документе, или он может использоваться в сочетании с внешним детектором текста для распознавания текста из изображения одной текстовой строки.

Как распознавать с помощью Tesseract, OpenCV и Python
OCR Process Flow для создания API с помощью Tesseract из блоге

Tesseract 4.00 включает новую подсистему нейронной сети, настроенную как распознаватель текстовых строк. Это имеет свои истоки в LSTM на основе Python OCRopus реализация, но была переработана для Tesseract в C ++. Нейросетевая система в Tesseract предшествует TensorFlow, но совместима с ней, так как существует язык описания сети, называемый Variable Graph Specification Language (VGSL), который также доступен для TensorFlow.

Чтобы распознать изображение, содержащее один символ, мы обычно используем сверточную нейронную сеть (CNN). Текст произвольной длины представляет собой последовательность символов, и такие проблемы решаются с использованием RNN, а LSTM является популярной формой RNN. Прочтите этот пост, чтобы узнать больше о LSTM.


Технология - как это работает

LSTM отлично подходят для изучения последовательностей, но сильно тормозят, когда число состояний слишком велико. Есть эмпирические результаты, которые предполагают, что лучше попросить LSTM выучить длинную последовательность, чем короткую последовательность многих классов. Tesseract был разработан на основе модели OCRopus в Python, которая была ответвлением от LSMT в C ++ под названием CLSTM. CLSTM - это реализация модели рекуррентных нейронных сетей LSTM в C ++, использующая библиотеку Eigen для численных вычислений.

Как распознавать с помощью Tesseract, OpenCV и Python
Тессеракт 3 OCR процесс от бумаги

Legacy Tesseract 3.x зависел от многоступенчатого процесса, в котором мы можем различать этапы:

  • Поиск слова
  • Нахождение линии
  • Классификация персонажей

Поиск слов осуществлялся путем организации текстовых строк в капли, а строки и области анализировались на фиксированный или пропорциональный текст. Текстовые строки разбиваются на слова по-разному в зависимости от типа межстрочного интервала. Затем распознавание происходит как двухпроходный процесс. На первом проходе делается попытка распознать каждое слово по очереди. Каждое удовлетворительное слово передается адаптивному классификатору в качестве обучающих данных. Затем адаптивный классификатор получает возможность более точно распознать текст внизу страницы.

Модернизация инструмента Tesseract была попыткой очистки кода и добавления новой модели LSTM. Входное изображение обрабатывается в виде блоков (прямоугольников) построчно, подается в модель LSTM и выдает выходные данные. На изображении ниже мы можем визуализировать, как это работает.

Как распознавать с помощью Tesseract, OpenCV и Python
Как Tesseract использует модель LSTM presentation

После добавления нового обучающего инструмента и обучения модели большим количеством данных и шрифтов, Tesseract достигает лучшей производительности. Тем не менее, недостаточно хорош для работы с рукописным текстом и странными шрифтами. Можно провести тонкую настройку или переобучить верхние слои для экспериментов.


Установка Тессеракта

Установить tesseract в Windows легко с помощью предварительно скомпилированных двоичных файлов здесь, Не забудьте отредактировать переменную окружения «путь» и добавить путь к тессеракту. Для установки Linux или Mac он устанавливается с несколько команд.

После установки убедитесь, что все работает, введя команду в терминале или cmd:

$ tesseract --version

И вы увидите вывод, похожий на:

tesseract 4.0.0
leptonica-1.76.0
libjpeg 9c : libpng 1.6.34 : libtiff 4.0.9 : zlib 1.2.8
Found AVX2
Found AVX
Found SSE

После этого вы можете установить оболочку Python для tesseract, используя pip.
$ pip install pytesseract

Библиотека Tesseract поставляется с удобным инструментом командной строки, который называется tesseract. Мы можем использовать этот инструмент для распознавания изображений, а выходные данные сохраняются в текстовом файле. Если мы хотим интегрировать Tesseract в наш код C ++ или Python, мы будем использовать API Tesseract.


Запуск Тессеракта с CLI

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

$ tesseract image_path stdout

Чтобы записать выходной текст в файл:

$ tesseract image_path text_result.txt

Чтобы указать название языковой модели, напишите ярлык языка после -l флаг, по умолчанию он принимает английский язык:

$ tesseract image_path text_result.txt -l eng

По умолчанию Tesseract ожидает страницу текста при сегментации изображения. Если вы просто хотите распознать небольшую область, попробуйте другой режим сегментации, используя –Psm аргумент. Есть 14 доступных режимов, которые можно найти здесь, По умолчанию Tesseract полностью автоматизирует сегментацию страницы, но не выполняет ориентацию и обнаружение сценариев. Чтобы указать параметр, введите следующее:

$ tesseract image_path text_result.txt -l eng --psm 6

Еще один важный аргумент - режим OCR Engine (oem). Tesseract 4 имеет два механизма распознавания текста - механизм Legacy Tesseract и механизм LSTM. С помощью опции –oem можно выбрать четыре режима работы.
0 Только устаревший движок.
1 Нейронные сети Только движок LSTM.
2 движка Legacy + LSTM.
3 По умолчанию, в зависимости от того, что доступно.

Как распознавать с помощью Tesseract, OpenCV и Python
Результат движка Tesseract OCR

OCR с Pytesseract и OpenCV

Pytesseract - это оболочка для Tesseract-OCR Engine. Он также полезен в качестве автономного сценария вызова для тессеракта, поскольку может читать все типы изображений, поддерживаемые библиотеками изображений Pillow и Leptonica, включая jpeg, png, gif, bmp, tiff и другие. Подробнее о подходе Python читайте здесь, Код для этого урока можно найти в этом хранилище.

import cv2 import pytesseract img = cv2.imread('image.jpg') # Adding custom options
custom_config = r'--oem 3 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Предварительная обработка для Tesseract

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

Это включает в себя изменение масштаба, бинаризацию, удаление шума, выравнивание и т. Д.

Чтобы предварительно обработать изображение для OCR, используйте любую из следующих функций python или выполните Документация OpenCV.

import cv2
import numpy as np img = cv2.imread('image.jpg') # get grayscale image
def get_grayscale(image): return cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) # noise removal
def remove_noise(image): return cv2.medianBlur(image,5) #thresholding
def thresholding(image): return cv2.threshold(image, 0, 255, cv2.THRESH_BINARY + cv2.THRESH_OTSU)[1] #dilation
def dilate(image): kernel = np.ones((5,5),np.uint8) return cv2.dilate(image, kernel, iterations = 1) #erosion
def erode(image): kernel = np.ones((5,5),np.uint8) return cv2.erode(image, kernel, iterations = 1) #opening - erosion followed by dilation
def opening(image): kernel = np.ones((5,5),np.uint8) return cv2.morphologyEx(image, cv2.MORPH_OPEN, kernel) #canny edge detection
def canny(image): return cv2.Canny(image, 100, 200) #skew correction
def deskew(image): coords = np.column_stack(np.where(image > 0)) angle = cv2.minAreaRect(coords)[-1] if angle < -45: angle = -(90 + angle) else: angle = -angle (h, w) = image.shape[:2] center = (w // 2, h // 2) M = cv2.getRotationMatrix2D(center, angle, 1.0) rotated = cv2.warpAffine(image, M, (w, h), flags=cv2.INTER_CUBIC, borderMode=cv2.BORDER_REPLICATE) return rotated #template matching
def match_template(image, template): return cv2.matchTemplate(image, template, cv2.TM_CCOEFF_NORMED) 

Давайте работать с примером, чтобы увидеть вещи лучше. Вот как выглядит наше исходное изображение —

Как распознавать с помощью Tesseract, OpenCV и Python
Система письма Ауребеш

После предварительной обработки с помощью следующего кода

image = cv2.imread('aurebesh.jpg') gray = get_grayscale(image)
thresh = thresholding(gray)
opening = opening(gray)
canny = canny(gray)

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

Как распознавать с помощью Tesseract, OpenCV и Python
Изображение после предварительной обработки

Результат для исходного изображения выглядит так -

GALACTIC BASIC
(AUREBESH) RE HFVMEVEIiZwoyv Ze
ABC DE F GH I JK LM
N—0- PQ RST Uv WX
2 | Ff 8 G& Pf fF § 5 op 7
ee
5, jf FF Ty ee ee
=
334 477 OED

Вот как выглядит результат для различных предварительно обработанных изображений:

Изображение Canny Edge (не очень хорошо) -

CAE Cn Cae AS
(AUREBESE) EA Na
oe SS
(Ne CI (ENE
a, ee oe ea
2
a a A: rc
|, |
a
Sear eo/e ecm emclomt Cia cuoomct mi im

Изображение с пороговым значением -

GALACTIC BASIC
(AVREBESH)
RS 7FVMeEVEi1iFf o£
A B C D EF GH IJ K LM
AOoder7Nnvroroava
N O P Q@R S$ TU VW XK Y¥ Z
7 ee For 8 Ro Pf F Boao om #
0 12 3 4 5 6 7 8 9 , . !
>» 1kr7 @ by FEN
2? S$ ( Por Foy of ee
ASGSANDIE
CH AE EO KH NG OO SH TH

Начальное изображение -

GALACTIC BASIC
(AUREZEBELSH)
KEE VTMEUOU EB iw oN es
A BC D EF F @ H | J K LT Ww
AOGdrcrT7WTt HYOAVa4
WO P Q R BS T U VW WK y Z
i J
Oo 1 2 3 46 8 7 SC Ps,
VY ir- -rp,ptUuY?
a a a
AGoOAnNnoOID
CH AE BO KH ®@ OO SH TH


Получение рамок вокруг текста

Используя Pytesseract, вы можете получить ограничивающую информацию для результатов OCR, используя следующие код.

Сценарий ниже предоставит вам ограничивающую информацию для каждого символа, обнаруженного тессерактом во время распознавания текста.

import cv2
import pytesseract img = cv2.imread('image.jpg') h, w, c = img.shape
boxes = pytesseract.image_to_boxes(img) for b in boxes.splitlines(): b = b.split(' ') img = cv2.rectangle(img, (int(b[1]), h - int(b[2])), (int(b[3]), h - int(b[4])), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Если вам нужны рамки вокруг слов вместо символов, функция image_to_data пригодится. Вы можете использовать image_to_data функция с типом вывода, указанным с помощью pytesseract Output.

Как распознавать с помощью Tesseract, OpenCV и Python

Имейте в виду проблему распознавания текста? Хотите оцифровать счета, PDF-файлы или номерные знаки? Направляйтесь к Нанонеты и создавать модели OCR бесплатно!


Мы будем использовать образец изображения счета-фактуры выше, чтобы проверить наши результаты Тессеракт.

import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg') d = pytesseract.image_to_data(img, output_type=Output.DICT)
print(d.keys())

Это должно дать вам следующий результат -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

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

Вы можете построить коробки, используя приведенный ниже код -

n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

Вот как это будет выглядеть для изображения образца счета.

Как распознавать с помощью Tesseract, OpenCV и Python


Соответствие текстового шаблона

Возьмите пример попытки найти дату на изображении. Здесь наш шаблон будет шаблоном регулярного выражения, который мы сопоставим с нашими результатами OCR, чтобы найти соответствующие ограничивающие рамки. Мы будем использовать regex модуль и image_to_data Функция для этого.

import re
import cv2
import pytesseract
from pytesseract import Output img = cv2.imread('invoice-sample.jpg')
d = pytesseract.image_to_data(img, output_type=Output.DICT)
keys = list(d.keys()) date_pattern = '^(0[1-9]|[12][0-9]|3[01])/(0[1-9]|1[012])/(19|20)dd$' n_boxes = len(d['text'])
for i in range(n_boxes): if int(d['conf'][i]) > 60: if re.match(date_pattern, d['text'][i]): (x, y, w, h) = (d['left'][i], d['top'][i], d['width'][i], d['height'][i]) img = cv2.rectangle(img, (x, y), (x + w, y + h), (0, 255, 0), 2) cv2.imshow('img', img)
cv2.waitKey(0)

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

Как распознавать с помощью Tesseract, OpenCV и Python

Режимы сегментации страницы

Существует несколько способов анализа страницы текста. API-интерфейс tesseract предоставляет несколько режимов сегментации страниц, если вы хотите запустить OCR только в небольшом регионе или в разных ориентациях и т. Д.

Вот список поддерживаемых tesseract режимов сегментации страниц:

0 Только ориентация и обнаружение сценария (OSD).
1 Автоматическая сегментация страниц с помощью экранного меню.
2 Автоматическая сегментация страниц, но без экранного меню или распознавания текста.
3 Полностью автоматическая сегментация страниц, но без экранного меню. (По умолчанию)
4 Предположим, что один столбец текста переменного размера.
5 Предположим, что это единый однородный блок вертикально выровненного текста.
6 Предположим, что это один однородный блок текста.
7 Рассматривайте изображение как одну текстовую строку.
8 Относитесь к изображению как к одному слову.
9 Рассматривайте изображение как отдельное слово в круге.
10 Относитесь к изображению как к одному символу.
11 Редкий текст. Найдите как можно больше текста в произвольном порядке.
12 Разреженный текст с экранным меню.
13 Необработанная линия. Относитесь к изображению как к одной текстовой строке, минуя хаки, специфичные для Tesseract.

Чтобы изменить режим сегментации страницы, измените --psm аргумент в вашей пользовательской строке конфигурации для любого из вышеупомянутых кодов режима.


Определить ориентацию и сценарий

Вы можете определить ориентацию текста на вашем изображении, а также сценарий, в котором он написан. Следующее изображение -
Как распознавать с помощью Tesseract, OpenCV и Python
после выполнения следующего кода -

osd = pytesseract.image_to_osd(img)
angle = re.search('(?<=Rotate: )d+', osd).group(0)
script = re.search('(?<=Script: )d+', osd).group(0)
print("angle: ", angle)
print("script: ", script)

напечатает следующий вывод.

angle: 90
script: Latin

Определить только цифры

Возьмем, к примеру, это изображение -
Как распознавать с помощью Tesseract, OpenCV и Python
Текст, извлеченный из этого изображения, выглядит следующим образом.

‘Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no 43876324
Dated 17%h Nov2018
Pono 76496234

Вы можете распознать только цифры, изменив конфигурацию на следующую

custom_config = r'--oem 3 --psm 6 outputbase digits'
print(pytesseract.image_to_string(img, config=custom_config))

Вывод будет выглядеть так.

-- . 43876324
172018
0 76496234

Белые символы

Скажем, вы хотите обнаружить только определенные символы из данного изображения и игнорировать остальные. Вы можете указать свой белый список символов (здесь мы использовали все строчные буквы только от a до z), используя следующую конфигурацию.

custom_config = r'-c tessedit_char_whitelist=abcdefghijklmnopqrstuvwxyz --psm 6'
print(pytesseract.image_to_string(img, config=custom_config))

Вывод -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Черные списки персонажей

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

custom_config = r'-c tessedit_char_blacklist=0123456789 --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Вывод -

Customer name Hallium Energy services
Project NEHINS-HIB-HSA
lavoice no
Dated %h Nov%
Pono

Обнаружение на нескольких языках

Вы можете проверить доступные языки, набрав это в терминале

$ tesseract --list-langs

Чтобы скачать тессеракт для определенного языка, используйте

$ sudo apt-get install tesseract-ocr-LANG

где LANG - трехбуквенный код нужного вам языка. Вы можете узнать значения LANG здесь.

Вы можете скачать .traindata файл для языка, который вам нужен от здесь и поместите его в $TESSDATA_PREFIX каталог (это должно быть так же, как где tessdata каталог установлен) и он должен быть готов к использованию.

Внимание - Только языки, у которых есть .traineddata Формат файла поддерживается Tesseract.

Чтобы указать язык, на котором требуется выводить OCR, используйте -l LANG Аргумент в конфигурации, где LANG - это трехбуквенный код для языка, который вы хотите использовать.

custom_config = r'-l eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

Возьмем, к примеру, это изображение -
Как распознавать с помощью Tesseract, OpenCV и Python
Вы можете работать с несколькими языками, изменив параметр LANG как таковой -

custom_config = r'-l grc+tha+eng --psm 6'
pytesseract.image_to_string(img, config=custom_config)

и вы получите следующий результат -

Here’s some Greek: Οδιο διστα ιμπεδιτ φιμ ει, αδ φελ αβχορρεανθ ελωκυενθιαμ, εξ εσε εξερσι γυ-
βεργρεν ηας. Ατ μει σολετ σριπτορεμ. ἴυς αλια λαβωρε θε. Σιθ κυωτ νυσκυαμ
τρασυνδια αν, ὠμνιυμ ελιγενδι τιν πρι. Παρτεμ φερθερεμ συσιπιαντὺυρ εξ ιυς,ναμ
%0790 แ ร เง ๑ ๕ 80 ๕ 6 ๑ อ 06 ส 0 เง น อ ๓ , πρω πρωπριαε σαεφολα ιδ. Ατ πρι δολορ νυ-
σκυαμ. 6 Thai Here’s some Thai: ν᾿ ค อ ร ั ป ซั น จ ุ ้ ย โป ร ด ิ ว เซ อ ร ์ ส ถา ป ั ต ย ์ จ ๊ า บ แจ ็ ก พ ็ อ ต ม ้ า ห ิ น อ ่ อ น ซา ก ุ ร ะ ค ั น ถ ธ ุ ร ะ ฟิ ด ส ต า ร ์ ท ง ี ้ บ อ ย
ค อ ต อ ื ่ ม แป ร ั ส ั ง โฆ ค ํ า ส า ป แฟ น ซี ศิ ล ป ว ั ฒ น ธร ร ม ไฟ ล ท ์ จ ิ ๊ ก โก ๋ ก ั บ ด ั ก เจ ล พ ล ็ อ ต ม า ม ่ า ซา ก ุ ร ะ ด ี ล เล อ
ร ์ ซี น ด ั ม พ ์ แฮ ป ป ี ้ เอ ๊ ้ า ะ อ ุ ร ั ง ค ธา ต ุ ซิ ม ฟิ น ิ ก ซ์ เท ร ล เล ่ อ ร ์ อ ว อ ร ์ ด แค น ย อ น ส ม า พ ั น ธ์ ค ร ั ว ซอ ง ฮั ม อ า
ข่ า เอ ็ ก ซ์ เพ ร ส

Внимание - Язык, указанный первым для -l Параметр является основным языком.

К сожалению, у tesseract нет функции автоматического определения языка текста на изображении. Альтернативное решение предоставляется другим модулем Python, который называется langdetect который может быть установлен через пункт.

$ pip install langdetect

Опять же, этот модуль не определяет язык текста с помощью изображения, но требует ввода строки для определения языка. Лучший способ сделать это - сначала использовать tesseract для получения текста OCR на любых языках, которые вы там чувствуете, используя langdetect чтобы узнать, какие языки включены в текст OCR, а затем снова запустите OCR с найденными языками.

Скажем, у нас есть текст, который, как мы думали, был на английском и португальском языках.

custom_config = r'-l eng+por --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config) from langdetect import detect_langs
detect_langs(txt)

Это должно вывести список языков в тексте и их вероятности.

[en:0.714282468983554, es:0.2857145605644145]

Языковые коды, используемые langdetect следуйте кодам ISO 639-1. Для сравнения, пожалуйста, проверьте этой и этой, Мы находим, что используемый в тексте язык - английский и испанский.

Мы снова получаем текст, изменив конфигурацию на

custom_config = r'-l eng+spa --psm 6'
txt = pytesseract.image_to_string(img, config=custom_config)

Внимание — Tesseract плохо работает, когда в образе с несколькими языками языки, указанные в конфиге, указаны неправильно или вообще не упоминаются. Это также может немного ввести в заблуждение модуль langdetect.


Использование tessdata_fast

Если скорость для вас важна, вы можете заменить свои модели языка tessdata на модели tessdata_fast, которые являются 8-битными целочисленными версиями моделей tessdata.

Согласно tessdata_fast GitHub

Этот репозиторий содержит быстрые целочисленные версии обученных моделей для Тессеракт с открытым исходным кодом OCR Engine.

Эти модели работают только с механизмом распознавания текста LSTM от Tesseract 4.

  • Это компромисс скорости/точности в том, что предлагает наилучшее соотношение цены и качества по скорости и точности.
  • Для некоторых языков это все еще лучше, но для большинства нет.
  • Конфигурация сети «наилучшее соотношение цены и качества» затем была преобразована в целое число для повышения скорости.
  • Большинство пользователей захотят использовать эти обученные файлы данных для распознавания текста, и они будут поставляться как часть дистрибутивов Linux, например. Убунту 18.04.
  • Тонкая настройка / дополнительная тренировка НЕ возможно из этих fast модели, так как они 8-битные целые.
  • При использовании моделей в этом хранилище поддерживается только новый механизм OCR на основе LSTM. Наследие tesseract движок не поддерживается этими файлами, поэтому OEM-режимы Tesseract '0' и '2' не будут работать с ними.

Использовать tessdata_fast модели вместо tessdataвсе, что вам нужно сделать, это загрузить tessdata_fast файл языковых данных из здесь и поместите его в свой $TESSDATA_PREFIX каталог.


Нужно оцифровать документы, квитанции или счета, но лень кодировать? Направляйтесь к Нанонеты и создавать модели OCR бесплатно!


Тренинг Тессеракт по пользовательским данным

Tesseract 4.00 включает новый механизм распознавания на основе нейронной сети, который обеспечивает значительно более высокую точность изображений изображений. Нейронные сети требуют значительно больше обучающих данных и обучаются намного медленнее, чем базовый Тессеракт. Для языков на основе латиницы предоставленные данные о моделях были обучены примерно на 400000 текстовых строк, охватывающих около 4500 шрифтов.

Чтобы успешно запустить учебное пособие по Tesseract 4.0 LSTM, у вас должна быть работающая установка учебных средств Tesseract 4 и Tesseract 4, а также сценарии обучения и необходимые файлы обученных данных в определенных каталогах. Посещение GitHub репо для файлов и инструментов.

Tesseract 4.00 занимает от нескольких дней до нескольких недель для обучения с нуля. Даже со всеми этими новыми данными обучения, поэтому здесь есть несколько вариантов для обучения:

  • Тонкая настройка - Начиная с уже имеющегося обученного языка, тренируйтесь на ваших конкретных дополнительных данных. Например, обучение на рукописном наборе данных и некоторых дополнительных шрифтах.
  • Отрезать верхний слой – из сети и переобучить новый верхний слой, используя новые данные. Если тонкая настройка не работает, это, скорее всего, следующий лучший вариант. Аналогия, почему это полезно, возьмем для примера модели, обученные на наборе данных ImageNet. Цель состоит в том, чтобы построить классификатор кошек или собак, нижние слои в модели хороши для низкоуровневой абстракции, такой как углы, горизонтальные и вертикальные линии, но более высокие слои в модели объединяют эти функции и обнаруживают кошачьи или собачьи уши, глаза, нос. и так далее. Переобучая только верхние слои, вы используете знания из нижних слоев и комбинируете их с новым другим набором данных.
  • Возрождение с нуля - Это очень медленный подход, если у вас нет очень репрезентативного и достаточно большого обучающего набора для вашей проблемы. Лучший ресурс для обучения с нуля - следовать этому GitHub репо.

Руководство о том, как тренироваться на ваших пользовательских данных и создавать .traineddata файлы можно найти здесь, здесь и здесь.

Мы не будем описывать код для обучения с использованием Tesseract в этом сообщении в блоге.

Как распознавать с помощью Tesseract, OpenCV и Python

Ограничения Тессеракта

Тессеракт работает лучше всего, когда есть чистая сегментация текста переднего плана от фона. На практике может быть чрезвычайно сложно гарантировать эти типы установки. Существует множество причин, по которым вы можете не получить хорошее качество изображения от Tesseract, например, если изображение имеет шум на заднем плане. Чем лучше качество изображения (размер, контрастность, молния), тем лучше результат распознавания. Для улучшения результатов распознавания требуется небольшая предварительная обработка, изображения должны быть соответствующим образом масштабированы, иметь как можно большую контрастность изображения, а текст должен быть выровнен по горизонтали. Тессеракт OCR довольно мощный, но имеет следующие ограничения.

Ограничения Тессеракта суммированы в списке.

  • OCR не так точен, как некоторые доступные нам коммерческие решения.
  • Плохо справляется с изображениями, на которые влияют артефакты, включая частичную окклюзию, искаженную перспективу и сложный фон.
  • Он не способен распознавать почерк.
  • Он может найти бред и сообщить об этом как вывод OCR.
  • Если документ содержит языки, отличные от указанных в аргументах -l LANG, результаты могут быть плохими.
  • Не всегда хорошо анализировать естественный порядок чтения документов. Например, он может не распознать, что документ содержит два столбца, и может попытаться объединить текст по столбцам.
  • Сканирование низкого качества может привести к ухудшению качества распознавания.
  • Он не раскрывает информацию о том, к чему относится текст семейства шрифтов.


Конечно, есть лучший, гораздо более простой и интуитивно понятный способ выполнения задач OCR.


OCR с нанонцами

Как распознавать с помощью Tesseract, OpenCV и Python

Ассоциация API нанонетов OCR позволяет с легкостью создавать модели OCR. Вам не нужно беспокоиться о предварительной обработке ваших изображений или беспокоиться о соответствии шаблонов или построении движков на основе правил для повышения точности вашей модели распознавания.

Вы можете загружать свои данные, аннотировать их, настраивать модель для обучения и ждать получения прогнозов через пользовательский интерфейс на основе браузера, не написав ни единой строки кода, не заботясь о графических процессорах или находя подходящую архитектуру для своих моделей глубокого обучения. Вы также можете получить ответы JSON для каждого прогноза, чтобы интегрировать его с вашими собственными системами и создавать приложения для машинного обучения, основанные на современных алгоритмах и мощной инфраструктуре.

Использование GUI: https://app.nanonets.com/

Вы также можете использовать API-интерфейс Nanonets-OCR, выполнив следующие действия: ‌

Шаг 1: клонировать репо, установить зависимости

git clone https://github.com/NanoNets/nanonets-ocr-sample-python.git
cd nanonets-ocr-sample-python
sudo pip install requests tqdm

Шаг 2: Получите бесплатный ключ API
Получите ваш бесплатный ключ API от http://app.nanonets.com/#/keys

Как распознавать с помощью Tesseract, OpenCV и Python

Шаг 3. Установите ключ API в качестве переменной среды

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Шаг 4: Создайте новую модель

python ./code/create-model.py

Примечание: Это генерирует MODEL_ID, который вам нужен для следующего шага

Шаг 5. Добавьте идентификатор модели в качестве переменной среды

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Примечание: вы получите YOUR_MODEL_ID с предыдущего шага

Шаг 6: Загрузить данные обучения
Данные обучения находятся в images (файлы изображений) и annotations (аннотации для файлов изображений)

python ./code/upload-training.py

Шаг 7: Модель поезда
Как только изображения были загружены, начните обучение модели

python ./code/train-model.py

Шаг 8: Получить модельное состояние
На тренировку модели уходит ~ 2 часа. Вы получите электронное письмо, когда модель будет обучена. Тем временем вы проверяете состояние модели

python ./code/model-state.py

Шаг 9: сделайте прогноз
После того, как модель обучена. Вы можете делать прогнозы, используя модель

python ./code/prediction.py ./images/151.jpg


Нанонцы и люди в петле

‌‌Экран «Умеренный» помогает процессам внесения исправлений и внесения изменений, а также снижает нагрузку на проверяющего вручную почти на 90 % и снижает затраты организации на 50 %.

Как распознавать с помощью Tesseract, OpenCV и Python

Особенности включают

  1. Отслеживать прогнозы, которые являются правильными
  2. Отследить, какие из них являются неправильными
  3. Внести исправления в неточные
  4. Удалить те, которые не правы
  5. Заполните пропущенные прогнозы
  6. Фильтр изображений с диапазонами дат
  7. Получите количество модерируемых изображений против не модерируемых

Все поля структурированы в простой в использовании графический интерфейс, который позволяет пользователю воспользоваться преимуществами технологии OCR и помочь улучшить ее по ходу работы без необходимости набирать какой-либо код или понимать, как эта технология работает.


У вас есть проблемы с OCR? Хотите снизить затраты на ввод данных вашей организации? Направляйтесь к Нанонеты и создавать модели OCR для извлекать текст из изображений or извлекать данные из PDF-файлов!


Заключение

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

Tesseract хорошо работает, когда изображения документов соответствуют следующим правилам:

  • Очистить сегментацию текста переднего плана от фона
  • Выровнены по горизонтали и соответственно масштабированы
  • Качественное изображение без размытия и шума

Последний выпуск Tesseract 4.0 поддерживает OCR на основе глубокого обучения, что значительно точнее. Сам механизм OCR построен на сети с кратковременной памятью (LSTM), своего рода рекуррентной нейронной сетью (RNN).

Tesseract идеально подходит для сканирования чистых документов и поставляется с довольно высокой точностью и изменчивостью шрифта, поскольку его обучение было комплексным. Я бы сказал, что Tesseract - инструмент для перехода, если ваша задача - сканирование книг, документов и печатного текста на чистом белом фоне.


Дальнейшее чтение

Обновление:
Многие люди спрашивали нас, как они могут получить дату в виде текста или использовать, когда она определяет дату или любые другие конкретные данные, чтобы они могли добавить их в список.
Вот ответ:
В коде для рисования ограничивающей рамки вокруг поля даты вы заметите строку, которая соответствует шаблону регулярного выражения с d['text']. Он рисует коробку только в том случае, если шаблон совпадает. Вы можете просто извлечь значения из d['text'] как только шаблон совпадет, и добавьте их в список.

Обновление 2:
Чтобы ответить на вопросы, связанные с распознаванием символов не на английском языке, мы обновили дополнительные списки для чтения.

Отметка времени:

Больше от ИИ и машинное обучение