Hogyan végezzünk OCR-t Tesseract, OpenCV és Python PlatoBlockchain Data Intelligence segítségével. Függőleges keresés. Ai.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

Ebben a blogbejegyzésben megpróbáljuk elmagyarázni a leggyakrabban használt Tesseract Engine mögött meghúzódó technológiát, amelyet az optikai karakterfelismerés terén kutatott legújabb ismeretekkel bővítettek. Ez a cikk útmutatóként/oktatóanyagként is szolgál az OCR pythonban való megvalósításához a Tesseract motor használatával. A következő modulokat fogjuk végigjárni:

  • A Tesseact OCR funkciói
  • Előfeldolgozás az OCR-hez OpenCV használatával
  • Tesseract futtatása CLI-vel és Python-nal
  • A Tesseract motor korlátai

Tartalomjegyzék

Bevezetés

OCR = Optikai karakterfelismerő. Más szóval, az OCR-rendszerek egy kétdimenziós szövegképet alakítanak át, amely géppel nyomtatott vagy kézzel írt szöveget tartalmazhat a képábrázolásból géppel olvasható szöveggé. Az OCR mint folyamat általában több részfolyamatból áll, hogy a lehető legpontosabban hajtsa végre. Az alfolyamatok a következők:

  • A kép előfeldolgozása
  • Szöveghonosítás
  • Karakterszegmentáció
  • Karakterfelismerés
  • Post feldolgozás

A fenti listában szereplő részfolyamatok természetesen eltérőek lehetnek, de ezek nagyjából az automatikus karakterfelismerés megközelítéséhez szükséges lépések. Az OCR szoftverben a fő cél az összes egyedi szó azonosítása és rögzítése különböző nyelveken az írott szöveg karaktereiből.

Csaknem két évtizede az optikai karakterfelismerő rendszereket széles körben használják a számítógépes rendszerekbe történő automatikus szövegbevitel biztosítására. Mégis ennyi idő alatt a hagyományos OCR-rendszerek (pl zónális OCR). Az arányosan elosztott betűtípusok (amely gyakorlatilag az összes betűtípust magában foglalja), a lézernyomtató-betűkészletek és még sok nem arányos írógép-betűkészlet is ezeknek a rendszereknek a hatókörén kívül maradt. Ennek eredményeként a hagyományos OCR soha nem ért el kisebb hatást a digitális formátumba konvertálandó dokumentumok teljes számára.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
Optikai karakterfelismerési folyamat (jóvoltából)

A következő generációs OCR motorok nagyon jól kezelik ezeket a fent említett problémákat a mély tanulás területén végzett legújabb kutatások felhasználásával. A mélymodellek és a nyilvánosan elérhető hatalmas adatkészletek kombinációjának kihasználásával a modellek a legkorszerűbb pontosságot érik el az adott feladatok során. Manapság arra is van lehetőség szintetikus adatokat generál különböző betűtípusokkal, generatív ellenséges hálózatok és néhány más generatív megközelítés használatával.

Az optikai karakterfelismerés továbbra is a kihívást jelentő probléma amikor a szöveg kötetlen környezetben fordul elő, mint pl természetes jelenetek, a geometriai torzulások, az összetett hátterek és a változatos betűtípusok miatt. A technológia még mindig hatalmas lehetőségeket rejt magában a mély tanuláson alapuló OCR-hez hasonló különféle felhasználási esetek miatt


OCR-problémára gondol? Szeretné csökkenteni szervezete adatbeviteli költségeit? Irány a Nanonetek és OCR-modelleket készíteni kivonat szöveget a képekből or adatok kinyerése PDF-ekből AI alapú PDF OCR!


Nyílt forráskódú OCR-eszközök

Van egy csomó optikai karakter felismerés szoftver elérhető. Nem találtam minőségi összehasonlítást közöttük, de írok néhányról, ami a leginkább fejlesztőbarátnak tűnik.

Tesseract – nyílt forráskódú OCR-motor, amely népszerűvé vált az OCR-fejlesztők körében. Annak ellenére, hogy néha fájdalmas lehet a megvalósítás és a módosítás, a leghosszabb ideig nem volt túl sok ingyenes és hatékony OCR-alternatíva a piacon. A Tesseract Ph.D. kutatási projekt a HP Labsban, Bristolban. A HP fejlesztette 1984 és 1994 között. 2005-ben a HP kiadta a Tesseract nyílt forráskódú szoftvert. 2006 óta a Google fejleszti.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
google trendek összehasonlítása a különböző nyílt forráskódú OCR-eszközökhöz

OCRopus – Az OCRopus egy nyílt forráskódú OCR-rendszer, amely lehetővé teszi az OCR-komponensek egyszerű értékelését és újrafelhasználását mind a kutatók, mind a vállalatok számára. Dokumentumelemző programok gyűjteménye, nem kulcsrakész OCR-rendszer. A dokumentumokra való alkalmazásához szükség lehet némi kép-előfeldolgozásra, és esetleg új modellek betanítására is. Magukon a felismerési szkripteken kívül számos könnyen használható és szerkeszthető szkript létezik az igazság szerkesztésére és javítására, a hibaarányok mérésére, a zavaros mátrixok meghatározására.


Szem – Az Ocular a kézi préssel nyomtatott dokumentumokon működik a legjobban, beleértve a több nyelven írt dokumentumokat is. A parancssor használatával működik. Ez egy korszerű történelmi OCR rendszer. Elsődleges jellemzői a következők:

  • Ismeretlen betűtípusok felügyelet nélküli tanulása: csak dokumentumképekre és szövegkorpuszra van szükség.
  • Képes kezelni a zajos dokumentumokat: következetlen tinta, térköz, függőleges igazítás
  • Többnyelvű dokumentumok támogatása, beleértve azokat is, amelyek jelentős szószintű kódváltással rendelkeznek.
  • Az ortográfiai variációs minták felügyelet nélküli tanulása, beleértve az archaikus írásmódokat és a nyomdai gyorsírást.
  • Egyidejű, közös átírás diplomáciai (szó szerinti) és normalizált formákba.


SwiftOCR – Megemlítem a Swiftben írt OCR motort is, mivel hatalmas fejlesztések zajlanak a Swift, mint a mélytanuláshoz használt fejlesztő programozási nyelv használatának előmozdításában. Nézze meg blog hogy többet megtudjon, miért. A SwiftOCR egy gyors és egyszerű OCR-könyvtár, amely neurális hálózatokat használ képfelismerésre. A SwiftOCR azt állítja, hogy motorjuk felülmúlja a jól ismert Tessaract könyvtárat.

Ebben a blogbejegyzésben bemutatjuk összpontosítson a Tesseact OCR-re és tudjon meg többet arról, hogyan működik és hogyan használható.


Tesseact OCR

A Tesseract egy nyílt forráskódú szövegfelismerő (OCR) motor, amely az Apache 2.0 licenc alatt érhető el. Használható közvetlenül, vagy (programozók számára) egy API segítségével nyomtatott szöveg képekből történő kinyerésére. Sokféle nyelvet támogat. A Tesseract nem rendelkezik beépített grafikus felhasználói felülettel, de számos elérhető a 3rd Party oldal. A Tesseract számos programozási nyelvvel és keretrendszerrel kompatibilis a megtalálható burkolólapokon keresztül itt. Használható a meglévő elrendezéselemzéssel egy nagy dokumentumon belüli szöveg felismerésére, vagy egy külső szövegérzékelővel együtt használható szöveg felismerésére egyetlen szövegsor képéről.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
OCR folyamatfolyamat az API létrehozásához a Tesseract segítségével a blogbejegyzés

A Tesseract 4.00 új neurális hálózati alrendszert tartalmaz, amely szövegsorfelismerőként van konfigurálva. Eredete ben van Az OCRopus Python-alapú LSTM-je megvalósítását, de áttervezték a Tesseract számára C++ nyelven. A Tesseract neurális hálózati rendszere a TensorFlow előtti, de kompatibilis vele, mivel létezik egy VGSL (Variable Graph Specification Language) nevű hálózatleíró nyelv, amely a TensorFlow számára is elérhető.

Az egyetlen karaktert tartalmazó kép felismeréséhez általában konvolúciós neurális hálózatot (CNN) használunk. A tetszőleges hosszúságú szöveg karakterek sorozata, és az ilyen problémákat az RNN-ek segítségével oldják meg, az LSTM pedig az RNN népszerű formája. Olvassa el ezt a bejegyzést, hogy többet megtudjon róla LSTM.


Technológia – Hogyan működik

Az LSTM-ek nagyszerűek a szekvenciák megtanulásában, de nagyon lelassulnak, ha az állapotok száma túl nagy. Vannak empirikus eredmények, amelyek azt sugallják, hogy jobb, ha egy LSTM-et kérünk meg egy hosszú sorozat megtanulására, mint egy sok osztályból álló rövid sorozatot. A Tesseract a Python OCRopus modelljéből fejlődött ki, amely a C++ nyelvű LSMT elágazása volt, az úgynevezett CLSTM. A CLSTM az LSTM visszatérő neurális hálózat modelljének C++ nyelvű megvalósítása, amely az Eigen könyvtárat használja numerikus számításokhoz.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
Tesseact 3 OCR folyamat innen papír

Az örökölt Tesseract 3.x a többlépcsős folyamattól függött, ahol meg tudjuk különböztetni a lépéseket:

  • Szókeresés
  • Vonalkeresés
  • Karakterek besorolása

A szókeresés a szövegsorok blobokba rendezésével történt, a sorok és régiók pedig rögzített hangmagasságú vagy arányos szöveget elemeznek. A szövegsorokat a karaktertávolságtól függően eltérően bontják szavakra. A felismerés ezután kétmenetes folyamatként megy végbe. Az első lépésben minden szót sorra megkísérelnek felismerni. Minden kielégítő szó egy adaptív osztályozóba kerül oktatási adatként. Az adaptív osztályozó ezután lehetőséget kap arra, hogy pontosabban felismerje az oldal alsó részén található szöveget.

A Tesseract eszköz modernizálása a kódtisztításra és egy új LSTM-modell hozzáadására tett erőfeszítést. A bemeneti kép dobozokban (téglalap) kerül feldolgozásra, soronként betáplálva az LSTM modellbe, és kimenetet adva. Az alábbi képen láthatjuk, hogyan működik.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
Hogyan használja a Tesseract az LSTM-modellt bemutatás

Egy új oktatóeszköz hozzáadása és a modell sok adattal és betűtípussal való betanítása után a Tesseract jobb teljesítményt ér el. Ennek ellenére nem elég jó ahhoz, hogy kézzel írt szövegeken és furcsa betűtípusokon dolgozzon. Lehetőség van a felső rétegek finomhangolására vagy átképzésére a kísérletezéshez.


A Tesseact telepítése

A tesseract telepítése Windows rendszeren egyszerű az előre lefordított binárisok segítségével itt. Ne felejtse el szerkeszteni a „path” környezeti változót, és hozzáadni a tesseract elérési útját. Linux vagy Mac telepítéshez a következővel van telepítve néhány parancsot.

A telepítés után ellenőrizze, hogy minden működik-e a parancs beírásával a terminálba vagy a cmd-be:

$ tesseract --version

És hasonló kimenetet fog látni:

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

Ezután telepítheti a tesseract python-burkolóját a pip használatával.
$ pip install pytesseract

A Tesseract könyvtárat a tesseract nevű praktikus parancssori eszközzel szállítjuk. Ezzel az eszközzel OCR-t végezhetünk a képeken, és a kimenetet egy szöveges fájlban tároljuk. Ha integrálni akarjuk a Tesseractot a C++ vagy Python kódunkba, akkor a Tesseract API-ját fogjuk használni.


Tesseact futtatása CLI-vel

Hívja a képen látható Tesserac motort a következővel image_path és konvertálja a képet szöveggé, soronként írva a parancssorba a következő beírásával:

$ tesseract image_path stdout

A kimeneti szöveg fájlba írásához:

$ tesseract image_path text_result.txt

A nyelvmodell nevének megadásához írja be a nyelvi parancsikont utána -l zászló, alapértelmezés szerint angol nyelvet használ:

$ tesseract image_path text_result.txt -l eng

Alapértelmezés szerint a Tesseract egy oldalnyi szöveget vár a kép szegmentálásakor. Ha csak egy kis régiót szeretne OCR-re állítani, próbáljon ki egy másik szegmentálási módot a – psm érv. 14 mód áll rendelkezésre, amelyek megtalálhatók itt. Alapértelmezés szerint a Tesseract teljesen automatizálja az oldalszegmentálást, de nem végez tájolást és szkriptészlelést. A paraméter megadásához írja be a következőt:

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

Van még egy fontos érv, az OCR motor mód (oem). A Tesseract 4 két OCR motorral rendelkezik – a Legacy Tesseract motorral és az LSTM motorral. Négy működési mód közül választhat az –oem opcióval.
0 Csak régi motor.
1 Csak neurális hálós LSTM motor.
2 Legacy + LSTM motor.
3 Alapértelmezett, a rendelkezésre álló adatok alapján.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
A Tesseract OCR motor eredménye

OCR Pytesseract és OpenCV segítségével

A Pytesseract a Tesseract-OCR Engine csomagolóanyaga. Hasznos önálló meghívó szkriptként is a tesseracthoz, mivel képes olvasni a Pillow és Leptonica képkönyvtárak által támogatott összes képtípust, beleértve a jpeg-et, png-t, gif-et, bmp-t, tiff-et és másokat. További információ a Python megközelítésről olvassa el itt. Ennek az oktatóanyagnak a kódja itt található raktár.

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)

Előfeldolgozás a Tesseract számára

Annak elkerülése érdekében, hogy a tesseract kimeneti pontossága minden módon csökkenjen, meg kell győződnie arról, hogy a kép megfelelő előfeldolgozott.

Ez magában foglalja az átskálázást, a binarizálást, a zajeltávolítást, a torzítást stb.

A kép OCR-hez történő előfeldolgozásához használja a következő python-függvények bármelyikét, vagy kövesse a OpenCV dokumentáció.

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) 

Nézzünk egy példát, hogy jobban lássuk a dolgokat. Így néz ki az eredeti képünk –

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
Az Aurebesh írásrendszer

Előfeldolgozás után a következő kóddal

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

és a kapott képeket ábrázolva a következő eredményeket kapjuk.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
A kép előfeldolgozás után

Az eredeti kép kimenete így néz ki -

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

Így néz ki a kimenet a különböző előfeldolgozott képekhez –

Canny edge kép (nem olyan jó)-

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

küszöbös kép –

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

Nyitó kép -

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


Dobozok készítése a szöveg körül

A Pytesseract használatával a következő módon kaphatja meg az OCR-eredmények határolókeret-információit kód.

Az alábbi szkript minden, a tesseract által az OCR során észlelt karakterhez megadja a határolókeret-információkat.

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)

Ha karakterek helyett szavakat szeretne dobozokat, a függvény image_to_data jól fog jönni. Használhatja a image_to_data függvény a pytesseract által megadott kimeneti típussal Output.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

OCR-problémára gondol? Számlákat, PDF-eket vagy rendszámtáblákat szeretne digitalizálni? Irány a Nanonetek és készítsen OCR modelleket ingyen!


A fenti mintaszámlaképet fogjuk használni tesseract kimeneteink teszteléséhez.

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())

Ennek a következő kimenetet kell adnia -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Ezzel a szótárral minden szót észlelhetünk, a határoló mezőre vonatkozó információkat, a bennük lévő szöveget és az egyes szavak megbízhatósági pontszámait.

A dobozokat az alábbi kód segítségével ábrázolhatja -

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)

Így nézne ki ez egy számlaminta képén.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével


Szövegesablon egyeztetés

Vegyük a példát, amikor megpróbáljuk megtalálni a dátum helyét a képen. Itt a sablonunk egy reguláris kifejezés minta lesz, amelyet az OCR-eredményeinkkel egyeztetünk, hogy megtaláljuk a megfelelő határolókereteket. Használjuk a regex modul és a image_to_data funkciót ehhez.

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)

Ahogy az várható volt, a képen a számla dátuma körül egy dobozt kapunk.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

Oldalszegmentálási módok

Egy oldal szövege többféleképpen is elemezhető. A tesseract api több oldalszegmentálási módot biztosít, ha csak egy kis területen vagy eltérő tájolásban szeretné futtatni az OCR-t stb.

Íme a támogatott oldalszegmentálási módok listája tesseract szerint –

0 Csak tájékozódás és szkriptészlelés (OSD).
1 Automatikus oldalszegmentálás OSD-vel.
2 Automatikus oldalszegmentálás, de nincs OSD vagy OCR.
3 Teljesen automatikus oldalszegmentálás, de nincs OSD. (Alapértelmezett)
4 Tételezzünk fel egyetlen változó méretű szövegoszlopot.
5 Tételezzünk fel egyetlen egységes, függőlegesen igazított szövegblokkot.
6 Tételezzünk fel egyetlen egységes szövegtömböt.
7 Kezelje a képet egyetlen szövegsorként.
8 Kezelje a képet egyetlen szóként.
9 Kezelje a képet egyetlen szóként egy körben.
10 Kezelje a képet egyetlen karakterként.
11 Ritka szöveg. Keresse meg a lehető legtöbb szöveget meghatározott sorrendben.
12 Ritka szöveg OSD-vel.
13 Nyers sor. Kezelje a képet egyetlen szövegsorként, megkerülve a Tesseract-specifikus feltöréseket.

Az oldalszegmentálási mód megváltoztatásához módosítsa a --psm argumentumot az egyéni konfigurációs karakterláncban a fent említett módkódok bármelyikéhez.


Tájolás és script észlelése

Érzékelheti a szöveg tájolását a képen, valamint azt a szkriptet is, amelyben meg van írva. A következő kép -
Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
a következő kód futtatása után -

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)

a következő kimenetet nyomtatja ki.

angle: 90
script: Latin

Csak számjegyek észlelése

Vegyük például ezt a képet -
Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
A képből kivont szöveg így néz ki.

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

Csak a számjegyeket ismerheti fel, ha módosítja a konfigurációt a következőre

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

A kimenet így fog kinézni.

-- . 43876324
172018
0 76496234

Karakterek engedélyezése

Tegyük fel, hogy csak bizonyos karaktereket akar észlelni az adott képről, a többit pedig figyelmen kívül hagyja. Megadhatja a karakterek fehérlistáját (itt csak a kisbetűket használtuk a-tól z-ig) a következő konfigurációval.

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

Kimenet -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Karakterek feketelistázása

Ha biztos benne, hogy bizonyos karakterek vagy kifejezések biztosan nem jelennek meg a szövegben (ellenkező esetben az OCR rossz szöveget ad vissza a tiltólistán szereplő karakterek helyett), a következő konfigurációval feketelistára teheti ezeket a karaktereket.

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

Kimenet -

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

Érzékelés több nyelven

A terminálba beírva ellenőrizheti az elérhető nyelveket

$ tesseract --list-langs

A tesseract letöltése egy adott nyelvhasználathoz

$ sudo apt-get install tesseract-ocr-LANG

ahol a LANG a szükséges nyelv hárombetűs kódja. Megtudhatja a LANG értékeket itt.

Letöltheti .traindata fájlt a kívánt nyelvhez itt és helyezze be $TESSDATA_PREFIX könyvtárban (ennek meg kell egyeznie azzal, ahol a tessdata könyvtár telepítve van), és készen kell állnia a használatra.

Megjegyzések – Csak azok a nyelvek, amelyek a .traineddata fájlformátumot a tesseract támogatja.

Az OCR kimenet nyelvének megadásához használja a -l LANG argumentum a konfigurációban, ahol a LANG a használni kívánt nyelv 3 betűs kódja.

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

Vegyük például ezt a képet -
Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével
Több nyelven is dolgozhat a LANG paraméter megváltoztatásával –

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

és a következő kimenetet kapod -

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

Megjegyzések – Az előbb megadott nyelv -l paraméter az elsődleges nyelv.

Sajnos a tesseract nem rendelkezik olyan funkcióval, amely automatikusan észleli a szöveg nyelvét a képen. Alternatív megoldást kínál egy másik python modul, az úgynevezett langdetect amely pip-en keresztül telepíthető.

$ pip install langdetect

Ez a modul ismét nem érzékeli a szöveg nyelvét kép segítségével, hanem karakterlánc bevitelre van szüksége a nyelv észleléséhez. Ennek legjobb módja az, ha először a tesseract segítségével lekéri az OCR-szöveget bármilyen nyelven, amiről úgy érzi, langdetect hogy megtudja, milyen nyelvek szerepelnek az OCR-szövegben, majd futtassa újra az OCR-t a talált nyelvekkel.

Tegyük fel, hogy van egy szövegünk, amelyről azt hittük, angol és portugál.

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)

Ennek ki kell adnia a szövegben szereplő nyelvek listáját és azok valószínűségét.

[en:0.714282468983554, es:0.2857145605644145]

által használt nyelvi kódok langdetect kövesse az ISO 639-1 kódokat. Az összehasonlításhoz ellenőrizze ezt és a ezt. Azt találtuk, hogy a szövegben használt nyelv az angol és a spanyol.

A szöveget újra megkapjuk a konfiguráció módosításával

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

Megjegyzések – A Tesseract rosszul teljesít, ha egy többnyelvű képen a konfigurációban megadott nyelvek hibásak vagy egyáltalán nem szerepelnek. Ez eléggé félrevezetheti a langdetect modult is.


A tessdata_fast használata

Ha a sebesség komoly gondot okoz Önnek, lecserélheti tessdata nyelvi modelljeit tessdata_fast modellekre, amelyek a tessdata modellek 8 bites egész változatai.

A tessdata_fast szerint GitHub -

Ez az adattár a betanított modellek gyors egészszámú változatait tartalmazza a Tesseract nyílt forráskódú OCR-motor.

Ezek a modellek csak a Tesseract 4 LSTM OCR motorjával működnek.

  • Ezek egy kompromisszum a sebesség/pontosság tekintetében, hogy mi kínálja a legjobb „ár-érték arányt” a sebesség és a pontosság tekintetében.
  • Egyes nyelvek esetében ez még mindig a legjobb, de a legtöbb számára nem.
  • A „legjobb ár-érték arányú” hálózati konfigurációt ezután egész számokkal egészítettük ki a további sebesség érdekében.
  • A legtöbb felhasználó ezeket a betanított adatfájlokat fogja használni az OCR elvégzéséhez, és ezeket a Linux disztribúciók részeként szállítják, pl. Ubuntu 18.04.
  • Finomhangolás/növekményes képzés NEM ezekből lehetséges fast modellek, mivel ezek 8 bites egész számok.
  • Az ebben a tárolóban található modellek használatakor csak az új LSTM-alapú OCR-motor támogatott. Az örökség tesseract motor nem támogatott ezeknél a fájloknál, így a Tesseract 0 és 2 oem-módjai nem működnek velük.

Használata tessdata_fast modellek helyett tessdata, mindössze annyit kell tennie, hogy letölti a tessdata_fast nyelvi adatfájlból itt és helyezze a saját belsejébe $TESSDATA_PREFIX könyvtárban.


Dokumentumokat, nyugtákat vagy számlákat szeretne digitalizálni, de lusta kódolni? Irány a Nanonetek és készítsen OCR modelleket ingyen!


A Tesseract oktatása az egyéni adatokról

A Tesseract 4.00 új neurális hálózat alapú felismerő motort tartalmaz, amely lényegesen nagyobb pontosságot biztosít a dokumentumképeken. A neurális hálózatok lényegesen több betanítási adatot igényelnek, és sokkal lassabban edzenek, mint az alap Tesseract. A latin nyelvű nyelvek esetében a rendelkezésre álló modelladatokat körülbelül 400000 4500 szövegsorra képezték ki, amelyek körülbelül XNUMX betűtípust ölelnek fel.

A Tesseract 4.0 LSTM oktatási oktatóanyag sikeres futtatásához rendelkeznie kell a Tesseract 4 és a Tesseract 4 Training Tools működőképes telepítésével, valamint bizonyos könyvtárakban a betanítási szkriptekkel és a szükséges betanított adatfájlokkal. Látogatás github repo fájlokhoz és eszközökhöz.

A Tesseract 4.00 néhány naptól néhány hétig tart a nulláról való edzéshez. Még ezekkel az új edzési adatokkal együtt is van néhány edzési lehetőség:

  • Finomhangolás – Egy meglévő betanított nyelvből kiindulva tanulja meg konkrét további adatait. Például egy kézzel írott adatkészlet és néhány további betűtípus oktatása.
  • Vágja le a felső réteget – a hálózatból, és az új adatok felhasználásával új felső réteget képezzen át. Ha a finomhangolás nem működik, valószínűleg ez a következő legjobb lehetőség. Az analógia, hogy miért hasznos ez, vegyük az ImageNet adatkészleten betanított modelleket. A cél egy macska vagy kutya osztályozó felépítése, a modell alsóbb rétegei alacsony szintű absztrakciót tesznek lehetővé, mint a sarkok, vízszintes és függőleges vonalak, de a modell magasabb rétegei kombinálják ezeket a jellemzőket, és észlelik a macska vagy a kutya fülét, szemét, orrát. stb. Ha csak a felső rétegeket tanítja át, akkor az alsóbb rétegekből származó tudást használja fel, és kombinálja az új, eltérő adatkészlettel.
  • Tanuljon újra a semmiből – Ez egy nagyon lassú megközelítés, hacsak nem rendelkezik egy nagyon reprezentatív és kellően kiterjedt edzéskészlettel a problémájára. A nulláról való képzés legjobb forrása ennek követése github repo.

Útmutató az egyéni adatok képzéséhez és létrehozásához .traineddata fájlok találhatók itt, itt és a itt.

Ebben a blogbejegyzésben nem foglalkozunk a Tesseract használatával kapcsolatos képzés kódjával.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

A Tesseact korlátai

A Tesseact akkor működik a legjobban, ha az előtérben lévő szöveget a háttérből egyértelműen szegmentálják. A gyakorlatban rendkívül nagy kihívást jelenthet az ilyen típusú beállítások garantálása. Számos oka lehet annak, ha nem kap jó minőségű kimenetet a Tesseract-ból, például ha a kép zajos a háttérben. Minél jobb a képminőség (méret, kontraszt, villámlás), annál jobb a felismerés. Egy kis előfeldolgozást igényel az OCR-eredmények javítása, a képeket megfelelően méretezni kell, a lehető legnagyobb képkontrasztot, és a szöveget vízszintesen kell igazítani. A Tesseact OCR meglehetősen erős, de a következő korlátozásokkal rendelkezik.

Tesseract korlátozások összegezve a listában.

  • Az OCR nem olyan pontos, mint néhány, a számunkra elérhető kereskedelmi megoldás.
  • Nem működik jól a műtermékek által érintett képekkel, beleértve a részleges elzáródást, a torz perspektívát és az összetett hátteret.
  • Nem képes felismerni a kézírást.
  • Lehet, hogy halandzsát talál, és ezt OCR kimenetként jelenti.
  • Ha egy dokumentum a -l LANG argumentumban megadottakon kívüli nyelveket is tartalmaz, az eredmények gyengeek lehetnek.
  • Nem mindig alkalmas a dokumentumok természetes olvasási sorrendjének elemzésére. Például előfordulhat, hogy nem ismeri fel, hogy egy dokumentum két oszlopot tartalmaz, és megpróbálhat szöveget egyesíteni az oszlopok között.
  • A rossz minőségű beolvasások rossz minőségű OCR-t eredményezhetnek.
  • Nem ad információt arról, hogy melyik betűtípuscsaládhoz tartozik a szöveg.


Természetesen van egy jobb, sokkal egyszerűbb és intuitívabb módja az OCR-feladatok végrehajtásának.


OCR nanonetekkel

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

A Nanonets OCR API lehetővé teszi az OCR modellek egyszerű készítését. Az OCR-modell pontosságának növelése érdekében nem kell aggódnia a képek előfeldolgozása miatt, sem az egyező sablonok miatt, vagy szabályalapú motorokat kell felépítenie.

Feltöltheti adatait, megjegyzéseket fűzhet hozzájuk, beállíthatja a modellt betanításra, és megvárhatja az előrejelzéseket a böngésző alapú felhasználói felületen keresztül anélkül, hogy egyetlen kódsort írna, aggódna a GPU-k miatt vagy megkeresné a megfelelő architektúrákat a mély tanulási modellekhez. Ezenkívül megszerezheti az egyes előrejelzések JSON-válaszait, hogy integrálja azokat saját rendszereivel, és gépi tanulással hajtott alkalmazásokat építsen a legkorszerűbb algoritmusokra és erős infrastruktúrára.

A GUI használata: https://app.nanonets.com/

A Nanonets-OCR API-t is használhatja az alábbi lépések követésével:‌

1. lépés: A Repo klónozása, a függőségek telepítése

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

2. lépés: Szerezze meg ingyenes API-kulcsát
Szerezze be ingyenes API-kulcsát innen http://app.nanonets.com/#/keys

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

3. lépés: Állítsa be az API-kulcsot környezeti változóként

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

4. lépés: Hozzon létre egy új modellt

python ./code/create-model.py

Jegyzet: Ez létrehoz egy MODEL_ID-t, amelyre szüksége van a következő lépéshez

5. lépés: Adja hozzá a modellazonosítót környezeti változóként

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Jegyzet: megkapja az előző lépésből származó YOUR_MODEL_ID-t

6. lépés: Töltse fel a képzési adatokat
Az edzésadatok a következőben találhatók: images (képfájlok) és annotations (jegyzetek a képfájlokhoz)

python ./code/upload-training.py

7. lépés: Vonatmodell
A képek feltöltése után kezdje el a modell betanítását

python ./code/train-model.py

8. lépés: Get Model State
A modell edzése ~2 órát vesz igénybe. A modell betanítása után e-mailt fog kapni. Közben ellenőrizze a modell állapotát

python ./code/model-state.py

9. lépés: Készítsen előrejelzést
Miután a modellt betanították. A modell segítségével előrejelzéseket készíthet

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


Nanonetek és emberek a hurokban

A „Mérsékelt” képernyő segíti a korrekciós és beviteli folyamatokat, és közel 90%-kal csökkenti a manuális felülvizsgáló munkáját, és 50%-kal csökkenti a szervezet költségeit.

Hogyan végezzünk OCR-t Tesseract, OpenCV és Python segítségével

Jellemzők

  1. Kövesse nyomon a helyes előrejelzéseket
  2. Kövesse nyomon, melyik hibás
  3. Javítsa ki a pontatlanokat
  4. Törölje a hibásakat
  5. Töltse ki a hiányzó előrejelzéseket
  6. Képek szűrése dátumtartományokkal
  7. Szerezze meg a moderált képek számát a nem moderált képekhez képest

Az összes mező egy könnyen használható grafikus felhasználói felületbe van felszerelve, amely lehetővé teszi a felhasználó számára, hogy kihasználja az OCR technológia előnyeit, és segítsen annak jobbá tételében, anélkül, hogy kódot kellene begépelnie vagy megértenie a technológia működését.


OCR-problémára gondol? Szeretné csökkenteni szervezete adatbeviteli költségeit? Irány a Nanonetek és OCR-modelleket készíteni kivonat szöveget a képekből or adatok kinyerése PDF-ekből!


Következtetés

Ahogy a mély tanulás a számítógépes látás szinte minden aspektusára hatással volt, ugyanez igaz a karakterfelismerésre és a kézírás-felismerésre is. A mélytanuláson alapuló modellek példátlan, a hagyományosnál messze túlmutató szövegfelismerési pontosságot tudtak elérni információ kinyerése és a gépi tanulási képfeldolgozás megközelít.

A Tesseact jól teljesít, ha a dokumentum képei követik a következő irányelveket:

  • Tisztítsa meg az előtérben lévő szöveg szegmentálását a háttértől
  • Vízszintesen igazítva és megfelelően méretezve
  • Kiváló minőségű kép elmosódás és zaj nélkül

A Tesseract 4.0 legújabb kiadása támogatja a mély tanuláson alapuló OCR-t, amely lényegesen pontosabb. Maga az OCR motor egy hosszú rövid távú memória (LSTM) hálózatra, egyfajta Recurrent Neural Network (RNN) hálózatra épül.

A Tesseract tökéletes tiszta dokumentumok szkennelésére, és meglehetősen nagy pontossággal és betűtípus-változékonysággal rendelkezik, mivel a képzés átfogó volt. Azt mondanám, hogy a Tesseract egy használható eszköz, ha az Ön feladata könyvek, dokumentumok és nyomtatott szövegek beolvasása tiszta fehér háttéren.


További olvasnivalók

Frissítés:
Sokan kérdezték tőlünk, hogyan tudnának dátumot lekérni szöveg formájában, vagy a dátumot, vagy bármilyen más konkrét adatot használva, hogy hozzáfűzzék a listához.
Íme a válasz:
A dátummező köré határolókeretet rajzoló kódban egy vonalat fog látni, amely megegyezik a szabályos kifejezéssel d['text']. Csak akkor rajzol dobozt, ha a minta egyezik. Egyszerűen kivonhatja az értékeket d['text'] ha a minta megegyezik, és csatolja őket egy listához.

Frissítés 2:
A nem angol nyelvű OCR-rel kapcsolatos kérdések megválaszolásához további olvasmánylistákat frissítettünk.

Időbélyeg:

Még több AI és gépi tanulás