Як OCR за допомогою Tesseract, OpenCV і Python PlatoBlockchain Data Intelligence. Вертикальний пошук. Ai.

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python

У цьому блозі ми спробуємо пояснити технологію, яка лежить в основі найбільш використовуваного Tesseract Engine, який був оновлений за допомогою останніх знань, досліджених в області оптичного розпізнавання символів. Ця стаття також слугуватиме інструкцією/підручником щодо того, як реалізувати OCR у python за допомогою двигуна Tesseract. Ми пройдемося по наступних модулях:

  • Функції Tesseract OCR
  • Попередня обробка для OCR за допомогою OpenCV
  • Запуск Tesseract з CLI та Python
  • Обмеження двигуна Tesseract

Зміст

Вступ

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

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

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

Протягом майже двох десятиліть системи оптичного розпізнавання символів широко використовувалися для забезпечення автоматизованого введення тексту в комп’ютеризовані системи. Проте за весь цей час традиційні системи OCR (як зональний OCR) ніколи не подолали свою нездатність читати більше кількох шрифтів і форматів сторінок. Шрифт із пропорційним інтервалом (який включає практично всі набірні копії), шрифти для лазерних принтерів і навіть багато непропорційних шрифтів друкарської машинки залишилися поза межами досяжності цих систем. І як наслідок, звичайне розпізнавання тексту ніколи не досягало більш ніж незначного впливу на загальну кількість документів, які потребують перетворення в цифрову форму.

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python
Процес оптичного розпізнавання символів (з люб'язності)

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

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


Маєте на увазі проблему OCR? Хочете зменшити витрати вашої організації на введення даних? Перейдіть до Нанонети і створювати моделі OCR витягнути текст із зображень or витягти дані з PDF -файлів на основі AI PDF OCR!


Інструменти OCR з відкритим кодом

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

Тессеракт – механізм OCR з відкритим кодом, який завоював популярність серед розробників OCR. Незважаючи на те, що іноді впроваджувати та змінювати це може бути боляче, на ринку не було надто багато безкоштовних і потужних альтернатив OCR протягом найдовшого часу. Тессеракт почав як доктор філософії. дослідницький проект у HP Labs, Брістоль. Він набув популярності і був розроблений HP між 1984 і 1994 роками. У 2005 році HP випустила Tesseract як програмне забезпечення з відкритим вихідним кодом. З 2006 року його розробляє Google.

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python
порівняння тенденцій google для різних інструментів OCR з відкритим кодом

OCRopus – OCRopus – це система OCR з відкритим кодом, яка дозволяє легко оцінювати та повторно використовувати компоненти OCR як дослідниками, так і компаніями. Набір програм аналізу документів, а не система розпізнавання тексту під ключ. Щоб застосувати його до документів, вам може знадобитися виконати попередню обробку зображень і, можливо, також навчити нові моделі. На додаток до самих сценаріїв розпізнавання існує кілька сценаріїв для редагування та виправлення наземної істини, вимірювання частоти помилок, визначення матриць плутанини, які прості у використанні та редагуванні.


окуляр – Ocular найкраще працює на документах, надрукованих за допомогою ручного преса, у тому числі написаних кількома мовами. Він працює за допомогою командного рядка. Це найсучасніша історична система OCR. Його основними характеристиками є:

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


SwiftOCR – Я також згадаю механізм OCR, написаний на Swift, оскільки йде величезний розвиток у просуванні використання Swift як мови програмування розробки, яка використовується для глибокого навчання. Перевіряти блозі щоб дізнатися більше чому. SwiftOCR — це швидка та проста бібліотека OCR, яка використовує нейронні мережі для розпізнавання зображень. SwiftOCR стверджує, що їх движок перевершує відому бібліотеку Tessaract.

У цьому блозі ми розмістимо зосередитися на Tesseract OCR і дізнайтеся більше про те, як це працює та як використовується.


Tesseract OCR

Tesseract — це система розпізнавання тексту з відкритим кодом (OCR), доступна за ліцензією Apache 2.0. Його можна використовувати безпосередньо або (для програмістів) за допомогою API для отримання друкованого тексту із зображень. Він підтримує широкий спектр мов. Tesseract не має вбудованого графічного інтерфейсу, але є кілька доступних у Сторінка третьої сторони. Tesseract сумісний з багатьма мовами програмування та фреймворками через обгортки, які можна знайти тут. Його можна використовувати з наявним аналізом макета для розпізнавання тексту у великому документі, або його можна використовувати разом із зовнішнім детектором тексту для розпізнавання тексту із зображення одного текстового рядка.

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python
Потік процесу OCR для створення API за допомогою Tesseract з a блог

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
Процес OCR Tesseract 3 від папір

Застарілий Tesseract 3.x залежав від багатоетапного процесу, де ми можемо розрізняти кроки:

  • Пошук слів
  • Пошук лінії
  • Класифікація персонажів

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

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

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python
Як Tesseract використовує модель LSTM Presentation

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


Встановлення Tesseract

Встановити tesseract на Windows легко за допомогою знайдених попередньо скомпільованих двійкових файлів тут. Не забудьте відредагувати змінну середовища “path” і додати шлях тессеракта. Для встановлення 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.


Запуск Tesseract з CLI

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

$ tesseract image_path stdout

Щоб записати вихідний текст у файл:

$ tesseract image_path text_result.txt

Щоб вказати назву моделі мови, напишіть ярлик мови після -l прапор, за замовчуванням він приймає англійську мову:

$ tesseract image_path text_result.txt -l eng

За замовчуванням Tesseract очікує сторінки тексту, коли сегментує зображення. Якщо ви просто хочете розпізнати невелику область, спробуйте інший режим сегментації, використовуючи –псм аргумент. Доступно 14 режимів, які можна знайти тут. За замовчуванням Tesseract повністю автоматизує сегментацію сторінки, але не визначає орієнтацію та визначення сценарію. Щоб вказати параметр, введіть наступне:

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

Є також ще один важливий аргумент, режим роботи механізму OCR (oem). Tesseract 4 має два механізми OCR — Legacy Tesseract і LSTM. За допомогою параметра –oem можна вибрати чотири режими роботи.
0 Лише застарілий двигун.
1 Лише двигун нейронних мереж LSTM.
2 двигуни Legacy + LSTM.
3 За замовчуванням, залежно від доступного.

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python
Результат роботи механізму OCR Tesseract

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

Ось як виглядає вихід для різних попередньо оброблених зображень –

Зображення з яскравим краєм (не дуже добре) -

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, використовуючи наступне код.

Наведений нижче сценарій надасть вам інформацію про рамки для кожного символу, виявленого тессерактом під час 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

Режими сегментації сторінок

Існує кілька способів аналізу сторінки тексту. Tesseract api надає кілька режимів сегментації сторінок, якщо ви хочете запустити OCR лише в невеликій області або в різних орієнтаціях тощо.

Ось список підтримуваних режимів сегментації сторінок тессерактом –

0 Тільки визначення орієнтації та сценарію (OSD).
1 Автоматична сегментація сторінок за допомогою екранного меню.
2 Автоматична сегментація сторінки, але без OSD або OCR.
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

Щоб завантажити teseract для певної мови, використовуйте

$ sudo apt-get install tesseract-ocr-LANG

де LANG – це трибуквенний код потрібної мови. Ви можете дізнатися значення LANG тут.

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

примітки – Лише мови, які мають a .traineddata формат файлів підтримується teseract.

Щоб вказати мову, якою потрібно вивести OCR, скористайтеся -l LANG аргумент у конфігурації, де LANG — це 3-буквенний код мови, яку ви хочете використовувати.

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 Параметр є основною мовою.

На жаль, у teseract немає функції автоматичного визначення мови тексту на зображенні. Альтернативне рішення надається іншим модулем Python під назвою langdetect який можна встановити через pip.

$ pip install langdetect

Цей модуль знову ж таки не визначає мову тексту за допомогою зображення, але потребує введення рядка для визначення мови. Найкращий спосіб зробити це – спочатку використати тессеракт, щоб отримати текст 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 Tesseract.

Ці моделі працюють лише з механізмом OCR LSTM Tesseract 4.

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

використовувати tessdata_fast моделі замість tessdata, все, що вам потрібно зробити, це завантажити ваш tessdata_fast файл мовних даних з тут і помістіть його всередину $TESSDATA_PREFIX каталог.


Вам потрібно оцифрувати документи, квитанції чи рахунки-фактури, але лінь кодувати? Перейдіть до Нанонети і будуйте моделі OCR безкоштовно!


Навчання Tesseract на користувацьких даних

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

Щоб успішно запустити навчальний посібник Tesseract 4.0 LSTM, вам потрібно мати робочу інсталяцію Tesseract 4 і Tesseract 4 Training Tools, а також мати навчальні сценарії та необхідні навчальні файли даних у певних каталогах. Відвідати репозиторій github для файлів та інструментів.

Tesseract 4.00 займає від кількох днів до кількох тижнів для навчання з нуля. Навіть з усіма цими новими навчальними даними, ось кілька варіантів навчання:

  • Точна настройка – Починаючи з наявної навченої мови, потренуйтеся на ваших конкретних додаткових даних. Наприклад, навчання на рукописному наборі даних і деяких додаткових шрифтах.
  • Зрізати верхній шар – з мережі та перенавчити новий верхній рівень, використовуючи нові дані. Якщо точне налаштування не працює, це, швидше за все, наступний найкращий варіант. Аналогія, чому це корисно, візьмемо для прикладу моделі, навчені на наборі даних ImageNet. Мета полягає в тому, щоб побудувати класифікатор кота чи собаки, нижні шари в моделі хороші для низькорівневої абстракції, як-от кути, горизонтальні та вертикальні лінії, але вищі шари в моделі поєднують ці функції та виявляють котячі чи собачі вуха, очі, ніс і так далі. Перенавчаючи лише найвищі рівні, ви використовуєте знання з нижчих рівнів і поєднуєте їх із новим набором даних.
  • Перенавчання з нуля – Це дуже повільний підхід, якщо у вас немає дуже репрезентативного та достатньо великого навчального набору для вашої проблеми. Найкращий ресурс для навчання з нуля – це слідкувати за цим репозиторій github.

Посібник про те, як тренуватися на ваших користувацьких даних і створювати .traineddata файли можна знайти тут, тут та тут.

У цьому блозі ми не будемо розповідати про код для навчання за допомогою Tesseract.

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python

Обмеження Тессеракта

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

Обмеження Tesseract підсумовані в списку.

  • OCR не настільки точний, як деякі доступні нам комерційні рішення.
  • Погано працює із зображеннями, які мають артефакти, зокрема часткову оклюзію, спотворену перспективу та складний фон.
  • Він не здатний розпізнавати почерк.
  • Він може виявити брехню і повідомити про це як вихід OCR.
  • Якщо документ містить мови за межами тих, які вказані в аргументах -l LANG, результати можуть бути поганими.
  • Це не завжди добре аналізувати природний порядок читання документів. Наприклад, він може не розпізнати, що документ містить два стовпці, і спробувати об’єднати текст між стовпцями.
  • Сканування низької якості може призвести до низької якості OCR.
  • Він не розкриває інформацію про те, до якого сімейства шрифтів належить текст.


Звичайно, є кращий, набагато простіший та інтуїтивніший спосіб виконання завдань OCR.


OCR з нанонетами

Як розпізнавати текст за допомогою Tesseract, OpenCV і Python

Команда API OCR Nanonets дозволяє легко створювати моделі OCR. Вам не доведеться турбуватися про попередню обробку зображень або піклуватися про відповідність шаблонів або створення механізмів на основі правил, щоб підвищити точність моделі OCR.

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

Використання графічного інтерфейсу: https://app.nanonets.com/

Ви також можете використовувати API Nanonets-OCR, виконавши наведені нижче дії: ‌

Крок 1: Клонуйте Repo, встановіть залежності

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:
Щоб відповісти на запитання щодо розпізнавання текстів не англійською мовою, ми оновили подальші списки для читання.

Часова мітка:

Більше від ШІ та машинне навчання