OCR:n tekeminen Tesseractin, OpenCV:n ja Python PlatoBlockchain Data Intelligencen avulla. Pystysuuntainen haku. Ai.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

Tässä blogiviestissä yritämme selittää eniten käytetyn Tesseract-moottorin takana olevaa tekniikkaa, jota päivitettiin viimeisimmällä optisen merkkitunnistuksen tutkimuksella. Tämä artikkeli toimii myös oppaana / opastusta siitä, kuinka OCR toteutetaan pythonissa Tesseract-moottorin avulla. Kävelemme seuraavien moduulien läpi:

  • Tesseract OCR-ominaisuudet
  • Esikäsittely OCR: lle OpenCV: tä käyttämällä
  • Käynnissä Tesseract CLI: n ja Pythonin kanssa
  • Tesseract-moottorin rajoitukset

Sisällysluettelo

esittely

OCR = Optinen luku. Toisin sanoen OCR-järjestelmät muuntavat kaksiulotteisen tekstikuvan, joka voi sisältää koneella painettua tai käsin kirjoitettua tekstiä sen kuvaesityksestä koneellisesti luettavaksi tekstiksi. OCR prosessina koostuu yleensä useista osaprosesseista, jotka suoritetaan mahdollisimman tarkasti. Alaprosessit ovat:

  • Kuvan esikäsittely
  • Tekstin lokalisointi
  • Merkkien segmentointi
  • Merkkien tunnistaminen
  • Jälkikäsittelyä

Edellä olevan luettelon alaprosessit voivat tietysti vaihdella, mutta nämä ovat karkeasti tarvittavia vaiheita lähestyäksesi automaattista merkkitunnistusta. OCR-ohjelmistossa sen päätavoite on tunnistaa ja kaapata kaikki ainutlaatuiset sanat eri kielillä kirjoitetuista tekstimerkeistä.

Lähes kahden vuosikymmenen ajan optisia merkintunnistusjärjestelmiä on käytetty laajalti automaattisen tekstin syöttämiseen tietokonejärjestelmiin. Silti kaiken tämän ajan perinteiset OCR-järjestelmät (esim vyöhykekohtainen OCR) eivät ole koskaan voineet kyvyttömyydestään lukea enemmän kuin kourallinen kirjasimia ja sivumuotoja. Suhteellisen välimatkan päässä olevat kirjasit (joka sisältää käytännössä kaikki kopiot), lasertulostinfontit ja jopa monet epäsuhteelliset kirjoituskonefontit ovat jääneet näiden järjestelmien ulottumattomiin. Tämän seurauksena perinteinen tekstintunnistus ei ole koskaan saavuttanut muuta kuin marginaalista vaikutusta digitaaliseen muotoon muunnettavien asiakirjojen kokonaismäärään.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Merkkien optisen tunnistuksen prosessi (kohteliaisuus)

Seuraavan sukupolven OCR-moottorit käsittelevät edellä mainitut ongelmat todella hyvin hyödyntämällä viimeisintä tutkimusta syvän oppimisen alalla. Hyödyntämällä syvien mallien ja julkisesti saatavien valtavien tietojoukkojen yhdistelmää mallit saavuttavat huipputeknisen tarkkuuden tietyissä tehtävissä. Nykyään se on myös mahdollista tuottaa synteettistä tietoa eri kirjasimilla, jotka käyttävät generatiivisia kilpailevia verkkoja ja muutamaa muuta generatiivista lähestymistapaa.

Merkkien optinen tunnistaminen on edelleen haastava ongelma kun teksti esiintyy rajoittamattomissa ympäristöissä, kuten luonnolliset kohtaukset, johtuen geometrisista vääristymistä, monimutkaisista taustoista ja monipuolisista kirjasimista. Teknologialla on edelleen valtava potentiaali johtuen syvän oppimisen perustuvan OCR: n monista käyttötapauksista


Onko sinulla OCR-ongelma mielessä? Haluatko vähentää organisaatiosi tiedonsyöttökustannuksia? Suuntaa kohti Nanonetit ja rakentaa OCR-malleja poimi teksti kuvista or poimia tietoja PDF-tiedostoista AI-pohjaisella PDF -tekstintunnistus!


Avoimen lähdekoodin OCR-työkalut

On paljon optinen hahmon tunnistus ohjelmisto saatavana. En löytänyt laadullista vertailua niiden välillä, mutta kirjoitan niistä, jotka näyttävät olevan kehittäjäystävällisimpiä.

Tesseract - avoimen lähdekoodin OCR-moottori, joka on saanut suosiota OCR-kehittäjien keskuudessa. Vaikka toisinaan toteutus ja muokkaaminen voi olla tuskallista, markkinoilla ei ollut pisin aikaa vapaita ja tehokkaita tekstintunnistusvaihtoehtoja. Tesseract aloitti tohtorina. tutkimusprojekti HP Labsissa, Bristol. Se sai suosion, ja HP ​​kehitti sen vuosien 1984 ja 1994 välillä. Vuonna 2005 HP julkaisi Tesseractin avoimen lähdekoodin ohjelmistona. Vuodesta 2006 lähtien sitä on kehittänyt Google.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
google-suuntausten vertailu eri avoimen lähdekoodin OCR-työkaluille

OCRopus - OCRopus on avoimen lähdekoodin OCR-järjestelmä, jonka avulla sekä tutkijat että yritykset voivat helposti arvioida ja käyttää OCR-komponentteja uudelleen. Kokoelma dokumenttianalyysiohjelmia, ei avaimet käteen -näppäinjärjestelmää. Jotta voit käyttää sitä asiakirjoihisi, joudut ehkä tekemään joitain kuvan esikäsittelyjä ja mahdollisesti myös kouluttamaan uusia malleja. Itse tunnistuskomentosarjojen lisäksi on olemassa useita skriptejä totuuden muokkaamiseen ja korjaamiseen, virheiden mittaamiseen, helppokäyttöisten ja muokattavien sekaannusmatriisien määrittämiseen.


silmä- - Okulaari toimii parhaiten käsinpuristetuilla asiakirjoilla, mukaan lukien useilla kielillä kirjoitetut asiakirjat. Se toimii komentorivillä. Se on uusinta historiallista tekstintunnistusjärjestelmää. Sen pääominaisuudet ovat:

  • Tuntematon fontti ilman opastusta: edellyttää vain asiakirjakuvia ja tekstikokoelmaa.
  • Kyky käsitellä meluisia asiakirjoja: epäjohdonmukainen muste, välit, pystysuuntainen kohdistus
  • Tuki monikielisille asiakirjoille, myös sellaisille, joilla on huomattava sanatason koodinvaihto.
  • Ortografisten variaatiomallien, mukaan lukien arkaaiset oikeinkirjoitukset ja tulostimen pikakirjoitukset, ilman ohjausta.
  • Samanaikainen, yhteinen kopiointi sekä diplomaattisiin (kirjaimellisiin) että normalisoituihin muotoihin.


SwiftOCR - Mainitsen myös Swift-kirjoitettu OCR-moottori, koska Swiftin käytön edistämisessä syvälle oppimiseen käytetyn kehitysohjelmointikielen kehityksessä on edistytty huomattavasti. Tarkista blogi selvittääksesi miksi. SwiftOCR on nopea ja yksinkertainen tekstintunnistuskirjasto, joka käyttää hermoverkkoja kuvan tunnistamiseen. SwiftOCR väittää, että heidän moottorinsa on parempi kuin tunnettu Tessaract-kirjasto.

Tässä blogiviestissä laitamme keskity Tesseract-tekstintunnistimeen ja saat lisätietoja sen toiminnasta ja käytöstä.


Tesseract OCR

Tesseract on avoimen lähdekoodin tekstintunnistusmoottori (OCR), joka on saatavilla Apache 2.0 -lisenssillä. Sitä voidaan käyttää suoraan tai (ohjelmoijille) API:n avulla painetun tekstin poimimiseen kuvista. Se tukee monia erilaisia ​​kieliä. Tesseractissa ei ole sisäänrakennettua käyttöliittymää, mutta niitä on saatavilla useita 3.Party-sivu. Tesseract on yhteensopiva monien ohjelmointikielten ja -kehysten kanssa löydettävien kääreiden kautta tätä. Sitä voidaan käyttää olemassa olevan asetteluanalyysin avulla tekstin tunnistamiseen suuressa asiakirjassa tai sitä voidaan käyttää yhdessä ulkoisen tekstintunnistimen kanssa tekstin tunnistamiseksi yhden tekstirivin kuvasta.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
OCR-prosessivuo rakentaa sovellusliittymää Tesseract-sovelluksella a blogi

Tesseract 4.00 sisältää uuden neuroverkkoalijärjestelmän, joka on konfiguroitu tekstirivin tunnistimeksi. Sen juuret ovat OCRopusin Python-pohjainen LSTM toteutusta, mutta se on suunniteltu uudelleen Tesseractille C ++: ssa. Tesseractin hermoverkkojärjestelmä edeltää TensorFlow-ohjelmaa, mutta on sen kanssa yhteensopiva, koska on olemassa verkonkuvauskieli, nimeltään Variable Graph Specification Language (VGSL), joka on saatavana myös TensorFlow-versiolle.

Yhden merkin sisältävän kuvan tunnistamiseksi käytämme tyypillisesti konvoluutiohermoverkkoa (CNN). Mielivaltaisen pituinen teksti on merkkijono, ja tällaiset ongelmat ratkaistaan ​​käyttämällä RNN: ää ja LSTM on suosittu RNN: n muoto. Lue tämä viesti oppiaksesi lisää LSTM.


Teknologia - miten se toimii

LSTM: t oppivat sekvenssejä hyvin, mutta hidastavat paljon, kun tilojen lukumäärä on liian suuri. On olemassa empiirisiä tuloksia, jotka viittaavat siihen, että on parempi kysyä LSTM: ltä oppimaan pitkä jakso kuin lyhyt jakso monista luokista. Tesseract kehitettiin OCRopus-mallista Pythonissa, joka oli LSMT: n haarukka C ++: ssa, nimeltään CLSTM. CLSTM on LSTM-toistuvan hermoverkkomallin toteutus C ++: ssa, käyttämällä Eigen-kirjastoa numeerisiin laskutoimituksiin.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Tesseract 3 OCR-prosessi alkaen paperi

Legacy Tesseract 3.x oli riippuvainen monivaiheisesta prosessista, jossa voimme erottaa vaiheet:

  • Sanahaku
  • Linjahaku
  • Merkkien luokittelu

Sanahaku tehtiin järjestämällä tekstirivit bloboihin, ja rivit ja alueet analysoitiin kiinteän sävelkorkeuden tai suhteellisen tekstin suhteen. Tekstirivit jaotellaan sanoiksi eri tavalla merkkivälin mukaan. Tunnistaminen etenee sitten kaksipitkäprosessina. Ensimmäisessä vaiheessa jokainen sana yritetään tunnistaa vuorotellen. Jokainen tyydyttävä sana välitetään adaptiiviselle luokittelijalle harjoitustietoina. Mukautuva luokitin saa sitten mahdollisuuden tunnistaa tarkemmin teksti sivun alaosassa.

Tesseract-työkalun nykyaikaistaminen oli pyrkimys koodin puhdistukseen ja uuden LSTM-mallin lisäämiseen. Syöttökuva käsitellään laatikoissa (suorakulmio) rivi riviltä syöttämällä LSTM-malliin ja antamalla lähtö. Alla olevassa kuvassa voimme visualisoida sen toiminnan.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Kuinka Tesseract käyttää LSTM-mallia esitys

Kun olet lisännyt uuden harjoitustyökalun ja kouluttanut mallin, jolla on paljon tietoja ja fontteja, Tesseract saavuttaa paremman suorituskyvyn. Silti, ei tarpeeksi hyvä käsittelemään käsin kirjoitettua tekstiä ja outoja fontteja. Yläkerroksia on mahdollista hienosäätää tai uudelleenkokeilla kokeilua varten.


Tesseractin asentaminen

Tesseractin asentaminen Windowsiin on helppoa löydettyjen esikäännettyjen binaarien avulla tätä. Muista muokata ”path” -ympäristömuuttujaa ja lisätä tesseract path. Linux- tai Mac-asennukseen se asennetaan muutama komento.

Asennuksen jälkeen tarkista, että kaikki toimii, kirjoittamalla komento terminaaliin tai cmd:

$ tesseract --version

Ja näet tulosteen, joka on samanlainen:

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

Tämän jälkeen voit asentaa python-kääreen tesseraktin pip-avulla.
$ pip install pytesseract

Tesseract-kirjasto toimitetaan kätevällä komentorivityökalulla, nimeltään tesseract. Voimme käyttää tätä työkalua tekstintunnistuksen suorittamiseen kuville ja tulosteet tallennetaan tekstitiedostoon. Jos haluamme integroida Tesseractin C ++- tai Python-koodiin, käytämme Tesseractin sovellusliittymää.


Käynnissä Tesseract CLI: n kanssa

Soita kuvan Tesseract-moottorille IMAGE_PATH ja muunna kuva tekstiksi, kirjoittamalla rivi riviltä komentokehotteeseen kirjoittamalla seuraava:

$ tesseract image_path stdout

Tulostetekstin kirjoittaminen tiedostoon:

$ tesseract image_path text_result.txt

Määritä kielimallin nimi kirjoittamalla kielen pikakuvakkeen jälkeen -l lippu, oletuksena se vie englannin kielen:

$ tesseract image_path text_result.txt -l eng

Oletuksena Tesseract odottaa sivun tekstiä segmentoidessaan kuvaa. Jos haluat vain OCR:n pienen alueen, kokeile toista segmentointitilaa käyttämällä -psm Perustelu. Saatavana on 14 tilaa tätä. Oletusarvoisesti Tesseract automatisoi sivun segmentoinnin täysin, mutta ei suorita suuntausta ja komentosarjojen havaitsemista. Määritä parametri kirjoittamalla seuraava:

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

On myös yksi tärkeä argumentti, OCR-moottoritila (OEM). Tesseract 4: llä on kaksi OCR-moottoria - Legacy Tesseract -moottori ja LSTM-moottori. Voit valita neljä toimintatapaa käyttämällä -vaihtoehtoa.
0 Vain vanha moottori.
1 Vain hermoverkot LSTM-moottori.
2 vanhaa + LSTM-moottoria.
3 Oletus, käytettävissä olevan perusteella.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Tesseract OCR -moottorin tulos

OCR Pytesseractilla ja OpenCV: llä

Pytesseract on kääre Tesseract-OCR-moottorille. Se on hyödyllinen myös erillisenä kutsukirjelmänä teraseraktille, koska se pystyy lukemaan kaikki tyypit, joita Pillow- ja Leptonica-kuvankäsikirjasto tukee, mukaan lukien jpeg, png, gif, bmp, tiff ja muut. Lisätietoja Python-lähestymistavasta lue tätä. Tämän opetusohjelman koodi löytyy tästä säilytyspaikka.

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)

Esikäsittely Tesseractille

Jotta vältyt kaikilta tavoilta, joilla tekstiversion tulostetarkkuus voi laskea, sinun on varmistettava, että kuva on asianmukainen esikäsiteltävissä.

Tähän sisältyy mitoitus, binaarisointi, kohinanpoisto, laskeutuminen jne.

Jos haluat esikäsitellä kuvan OCR: lle, käytä mitä tahansa seuraavista python-toiminnoista tai seuraa OpenCV-dokumentaatio.

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) 

Työstetään esimerkin kanssa nähdäksemme asiat paremmin. Alkuperäinen kuvamme näyttää tältä -

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Aurebeshin kirjoitusjärjestelmä

Esikäsittelyn jälkeen seuraavalla koodilla

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

ja tulostamalla kuvat, saamme seuraavat tulokset.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Kuva esikäsittelyn jälkeen

Alkuperäisen kuvan lähtö näyttää tältä -

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

Tältä näyttää eri esikäsiteltyjen kuvien tulos –

Canny reunakuva (ei niin hyvä) -

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

Thresholded kuva -

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

Alkukuva -

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


Laatikoiden saaminen tekstin ympärille

Pytesseract-ohjelmalla voit saada raja-laatikotiedot OCR-tuloksille seuraavilla tavoilla koodi.

Seuraava komentosarja antaa sinulle raja-laatikotiedot jokaisesta merkistä, jonka tesserakti havaitsee tekstintunnistuksen aikana.

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)

Jos haluat sanojen ympärille ruudut merkkien sijaan, toiminto image_to_data on hyödyllinen. Voit käyttää image_to_data toiminto, jonka lähtötyyppi on määritelty pytesseractilla Output.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

Onko mielessäsi tekstintunnistusongelma? Haluatko digitalisoida laskut, PDF-tiedostot tai rekisterikilvet? Siirry kohtaan Nanonetit ja rakenna OCR-malleja ilmaiseksi!


Käytämme yllä olevaa laskukuvaa testataksemme tesseraktituotoksemme.

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

Tämän pitäisi antaa sinulle seuraava tulos -
dict_keys(['level', 'page_num', 'block_num', 'par_num', 'line_num', 'word_num', 'left', 'top', 'width', 'height', 'conf', 'text'])

Tämän sanakirjan avulla voimme saada jokaisen sanan havaittua, niiden rajakentän tiedot, niihin sisältyvän tekstin ja luotettavuuspisteet.

Voit piirtää ruudut alla olevan koodin avulla -

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)

Tältä tämä näyttäisi esimerkkilaskun kuvassa.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla


Tekstipohja vastaa

Ota esimerkki yrittäessäsi löytää missä päivämäärä on kuvassa. Täällä malli on säännöllinen lausekekaavio, joka sovitetaan OCR-tuloksiin sopivien raja-laatikoiden löytämiseksi. Käytämme regex moduuli ja image_to_data toiminto tätä varten.

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)

Odotetusti saadaan yksi laatikko kuvassa olevan laskun päivämäärän ympärille.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

Sivun segmentointitilat

Tekstisivu voidaan analysoida monella tapaa. Tesseract api tarjoaa useita sivujen segmentointitiloja, jos haluat suorittaa tekstintunnistuksen vain pienellä alueella tai erilaisissa suuntauksissa jne.

Tässä on luettelo tuetuista sivun segmentointitiloista tesseractin mukaan -

0 Vain suunta ja skriptien tunnistus (OSD).
1 Automaattinen sivun segmentointi OSD: n avulla.
2 Automaattinen sivun segmentointi, mutta ei OSD: tä tai OCR: ää.
3 Täysin automaattinen sivujen segmentointi, mutta ei OSD: tä. (Oletus)
4 Oletetaan, että yksi sarake tekstiä on erikokoisia.
5 Oletetaan, että yksi yhtenäinen lause pystysuunnassa tasattua tekstiä.
6 Oletetaan, että yksi yhtenäinen tekstilohko.
7 Käsittele kuvaa yhtenä tekstirivinä.
8 Käsittele kuvaa yhtenä sanana.
9 Käsittele kuvaa yhtenä sanana ympyrässä.
10 Käsittele kuvaa yhtenä merkkinä.
11 Harvaa tekstiä. Etsi mahdollisimman paljon tekstiä tietyssä järjestyksessä.
12 Harvinainen teksti OSD: llä.
13 Raakalinja. Käsittele kuvaa yhtenä tekstirivinä ohittamalla Tesseract-kohtaiset hakkerit.

Voit muuttaa sivun segmentointitilaa muuttamalla --psm argumentti mukautetussa konfigurointijonossa mihin tahansa edellä mainituista moodikoodeista.


Tunnista suunta ja komentosarja

Voit havaita kuvan tekstin suunnan ja myös komentosarjan, johon se on kirjoitettu. Seuraava kuva -
OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
seuraavan koodin läpi käymisen jälkeen -

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)

tulostaa seuraavan tulosteen.

angle: 90
script: Latin

Tunnista vain numerot

Otetaan esimerkiksi tämä kuva -
OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Tästä kuvasta otettu teksti näyttää tältä.

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

Voit tunnistaa vain numerot muuttamalla konfiguraation seuraavalle

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

Lähtö näyttää tältä.

-- . 43876324
172018
0 76496234

Valkoisten luetteloiden merkit

Sano, että haluat tunnistaa vain tietyt merkit annetusta kuvasta ja jättää huomiotta loput. Voit määrittää sallittujen merkkien luettelosi (tässä olemme käyttäneet kaikkia pieniä merkkejä välillä a - z) käyttämällä seuraavia asetuksia.

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

Tulos -

customername
roject
tnvoleeno
ated alliumenergyservices
e
thovo

Musta lista merkit

Jos olet varma, että jotkut merkit tai lausekkeet eivät ehdottomasti ilmesty tekstissäsi (muuten OCR palauttaa väärän tekstin mustalle listalle merkittyjen merkkien sijasta), voit lisätä nämä merkit mustalle listalle käyttämällä seuraavia asetuksia.

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

Tulos -

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

Tunnista useilla kielillä

Voit tarkistaa käytettävissä olevat kielet kirjoittamalla tämän terminaaliin

$ tesseract --list-langs

Tesseractin lataaminen tiettyä kielikäyttöä varten

$ sudo apt-get install tesseract-ocr-LANG

missä LANG on tarvitsemasi kielen kolmen kirjaimen koodi. Voit selvittää LANG-arvot tätä.

Voit ladata .traindata tiedosto haluamallesi kielelle tätä ja aseta se sisään $TESSDATA_PREFIX hakemisto (tämän pitäisi olla sama kuin missä tessdata hakemisto on asennettu), ja sen pitäisi olla käyttövalmis.

Huomautuksia - Vain kielet, joilla on .traineddata tesseract tukee tiedostomuotoa.

Määritä kieli, jolla tarvitset OCR-tulostetta, -l LANG argumentti konfiguraatiossa, jossa LANG on 3-kirjaiminen koodi sille kielelle, jota haluat käyttää.

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

Otetaan esimerkiksi tämä kuva -
OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla
Voit työskennellä useiden kielten kanssa muuttamalla LANG-parametria sellaisenaan -

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

ja saat seuraavan tuloksen -

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

Huomautuksia - kieli, joka on ensin määritelty -l parametri on ensisijainen kieli.

Valitettavasti tesseractilla ei ole ominaisuutta, joka havaitsisi kuvan tekstin kielen automaattisesti. Vaihtoehtoisen ratkaisun tarjoaa toinen python-moduuli nimeltään langdetect joka voidaan asentaa pip.

$ pip install langdetect

Tämä moduuli taas ei tunnista tekstin kieltä kuvan avulla, mutta tarvitsee merkkijonon kielen havaitsemiseksi. Paras tapa tehdä tämä on ensin käyttää tesseractia saadaksesi tekstintunnistusteksti millä tahansa kielillä, jonka saatat tuntea olevani siellä, käyttämällä langdetect löytääksesi, mitkä kielet sisältyvät tekstintunnistustekstiin, ja suorita sitten tekstintunnistus uudelleen löydettyjen kielten kanssa.

Sanotaan, että meillä on teksti, jonka luulimme olevan englanniksi ja portugaliksi.

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)

Tämän pitäisi tuottaa luettelo tekstissä olevista kielistä ja niiden todennäköisyyksistä.

[en:0.714282468983554, es:0.2857145605644145]

Kielikoodit, joita langdetect noudata ISO 639-1 -koodeja. Tarkista vertailun vuoksi tätä ja tätä. Huomaamme, että tekstissä käytetään sen sijaan englantia ja espanjaa.

Saamme tekstin uudelleen vaihtamalla asetukseksi

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

Huomautuksia – Tesseract toimii huonosti, kun kuvassa, jossa on useita kieliä, määrityksissä määritetyt kielet ovat vääriä tai niitä ei mainita ollenkaan. Tämä voi myös johtaa harhaan langdetect-moduulia.


Käyttämällä tessdata_fast

Jos nopeus on sinulle tärkeä huolenaihe, voit korvata tessdata-kielimallisi tessdata_fast-malleilla, jotka ovat tessdata-mallien 8-bittisiä kokonaislukumuotoja.

Mukaan tessdata_fast GitHub -

Tämä arkisto sisältää nopeasti koulutettujen mallien kokonaislukuversioita Tesseract Open Source OCR -moottori.

Nämä mallit toimivat vain Tesseract 4: n LSTM OCR -moottorin kanssa.

  • Nämä ovat nopeuden/tarkkuuden kompromissi sen suhteen, mikä tarjosi parhaan "vastineen rahalle" nopeuden ja tarkkuuden suhteen.
  • Joillekin kielille tämä on edelleen parasta, mutta useimmille ei.
  • "Parhaan vastineen rahalle" -verkkokokoonpano määritettiin sitten kokonaislukuina nopeuden lisäämiseksi.
  • Suurin osa käyttäjistä haluaa käyttää näitä koulutettuja datatiedostoja tekstintunnistuksen tekemiseen, ja ne toimitetaan osana Linux-jakelua, esim. Ubuntu 18.04.
  • Hienosäätö / lisäharjoittelu tulee ÄLÄ olla mahdollista näistä fast mallit, koska ne ovat 8-bittisiä kokonaislukuja.
  • Kun käytät tässä arkistossa olevia malleja, vain uutta LSTM-pohjaista OCR-moottoria tuetaan. Perintö tesseract moottoria ei tueta näillä tiedostoilla, joten Tesseractin oem-tilat '0' ja '2' eivät toimi niiden kanssa.

Käyttää tessdata_fast mallit tessdata, sinun tarvitsee vain ladata tessdata_fast kielitiedosto osoitteesta tätä ja laita se sisälle $TESSDATA_PREFIX hakemistoon.


Tarvitseeko digitoida asiakirjat, kuitit tai laskut, mutta liian laiska koodaamaan? Siirry kohtaan Nanonetit ja rakenna OCR-malleja ilmaiseksi!


Koulutuksen mukautettujen tietojen käyttäminen

Tesseract 4.00 sisältää uuden neuroverkkoon perustuvan tunnistusmoottorin, joka tarjoaa huomattavasti suuremman tarkkuuden asiakirjakuville. Neuraaliverkot vaativat huomattavasti enemmän harjoitustietoa ja harjoittavat paljon hitaammin kuin Tesseract-perustiedot. Latinalaisille kielille toimitetut nykyiset mallitiedot on koulutettu noin 400000 tekstirivillä, jotka kattavat noin 4500 kirjasinta.

Tesseract 4.0 LSTM -harjoitteluohjelman onnistuneeksi suorittamiseen tarvitaan Tesseract 4: n ja Tesseract 4: n koulutusvälineiden toimiva asennus, ja myös harjoituskomentosarjat ja tarvittavat koulutetut tiedostot tietyissä hakemistoissa. Vierailla github-repo tiedostoille ja työkaluille.

Tesseract 4.00 kestää muutamasta päivästä pariin viikkoon harjoittelua tyhjästä. Kaikista näistä uusista koulutustiedoista huolimatta tässä on muutama vaihtoehto harjoittelulle:

  • Hienosäätö - Harjoittele erityisiä lisätietojasi jo olemassa olevalla koulutetulla kielellä. Esimerkiksi käsin kirjoitetun tietojoukon ja joidenkin ylimääräisten kirjasinten koulutus.
  • Leikkaa ylin kerros – verkosta ja kouluttaa uudelleen uusi yläkerros käyttämällä uusia tietoja. Jos hienosäätö ei toimi, tämä on todennäköisesti seuraavaksi paras vaihtoehto. Analogia miksi tämä on hyödyllistä, ota esimerkkinä ImageNet-tietojoukossa koulutetut mallit. Tavoitteena on rakentaa kissan tai koiran luokitin, mallin alemmat kerrokset ovat hyviä matalan tason abstraktiossa kulmina, vaaka- ja pystyviivoina, mutta mallin korkeammat kerrokset yhdistävät näitä ominaisuuksia ja havaitsevat kissan tai koiran korvat, silmät, nenän. ja niin edelleen. Kouluttamalla uudelleen vain ylimmät tasot käytät alempien kerrosten tietoa ja yhdistät uuteen erilaiseen tietojoukkoon.
  • Siirry takaisin tyhjästä - Tämä on erittäin hidas lähestymistapa, ellei sinulla ole hyvin edustavaa ja riittävän suurta koulutusjoukkoa ongelmaasi varten. Paras resurssi harjoitteluun alusta alkaen on tämän seuraaminen github-repo.

Opas mukautettujen tietojen kouluttamiseen ja luomiseen .traineddata tiedostot löytyvät tätä, tätä ja tätä.

Emme kata Tesseract-harjoitustunnusta tässä blogiviestissä.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

Tesseractin rajoitukset

Tesseract toimii parhaiten, kun etualan teksti on segmentoitu puhdasta taustasta. Käytännössä tämäntyyppisten asennusten takaaminen voi olla erittäin haastavaa. Tesseractista ei välttämättä saada hyvälaatuista tulosta monista syistä, esimerkiksi jos kuvan taustalla on melua. Mitä parempi kuvanlaatu (koko, kontrasti, salama), sitä parempi tunnistustulos. Se vaatii jonkin verran esikäsittelyä OCR-tulosten parantamiseksi, kuvat on skaalattava asianmukaisesti, niiden kuvan kontrasti on mahdollisimman suuri ja tekstin on oltava vaakasuunnassa. Tesseract-tekstintunnistus on melko tehokas, mutta sillä on seuraavat rajoitukset.

Tesseract-rajoitukset, jotka on koottu luetteloon.

  • OCR ei ole yhtä tarkka kuin jotkut meille saatavilla olevat kaupalliset ratkaisut.
  • Ei pärjää kuvien kanssa, joihin vaikuttavat esineet, kuten osittainen tukos, vääristynyt perspektiivi ja monimutkainen tausta.
  • Se ei kykene tunnistamaan käsialaa.
  • Se voi löytää pilaantumista ja ilmoittaa tästä OCR-tulosteena.
  • Jos asiakirja sisältää kieliä, jotka eivät ole -l LANG-argumentteissa annettuja, tulokset voivat olla huonot.
  • Asiakirjojen luonnollista lukujärjestystä ei aina voida analysoida. Esimerkiksi, se ei välttämättä tunnista, että asiakirja sisältää kaksi saraketta, ja se voi yrittää yhdistää tekstin sarakkeisiin.
  • Heikkolaatuiset skannaukset voivat tuottaa huonolaatuisen tekstintunnistuksen.
  • Se ei paljasta tietoa mistä kirjasinperheen teksti kuuluu.


On tietysti parempi, paljon yksinkertaisempi ja intuitiivisempi tapa suorittaa OCR-tehtäviä.


OCR kanssa Nanonets

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

- Nanonets OCR -sovellusliittymä antaa sinun rakentaa OCR-malleja helposti. Sinun ei tarvitse huolehtia kuvien esikäsittelystä tai murehtia mallien sovittamisesta tai luoda sääntöpohjaisia ​​moottoreita lisätäksesi tekstintunnistusmallisi tarkkuutta.

Voit lähettää tietosi, merkitä ne, asettaa mallin kouluttamaan ja odottamaan ennusteiden saamista selainpohjaisen käyttöliittymän kautta kirjoittamatta yhtä koodiriviä, huolestuttamalla GPU: ista tai etsimällä oikeita arkkitehtuureja syvän oppimisen malleillesi. Voit myös hankkia kunkin ennusteen JSON-vastaukset integroidaksesi sen omaan järjestelmääsi ja rakentaaksesi koneoppimisella varustetut sovellukset, jotka on rakennettu huipputeknisille algoritmeille ja vahvalle infrastruktuurille.

Käyttöliittymän käyttö: https://app.nanonets.com/

Voit käyttää myös Nanonets-OCR-sovellusliittymää noudattamalla seuraavia vaiheita: ‌

Vaihe 1: Klooni repo, asenna riippuvuudet

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

Vaihe 2: Hanki ilmainen API-avain
Hanki ilmainen API-avain http://app.nanonets.com/#/keys

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

Vaihe 3: Aseta API-avain ympäristömuuttujaksi

export NANONETS_API_KEY=YOUR_API_KEY_GOES_HERE

Vaihe 4: Luo uusi malli

python ./code/create-model.py

Huomautus: Tämä luo mallin, jonka tarvitset seuraavaan vaiheeseen

Vaihe 5: Lisää mallitunnus ympäristömuuttujaksi

export NANONETS_MODEL_ID=YOUR_MODEL_ID

Huomautus: saat YOUR_MODEL_ID edellisestä vaiheesta

Vaihe 6: Lataa harjoitustiedot
Harjoitustiedot löytyvät images (kuvatiedostot) ja annotations (kuvatiedostojen merkinnät)

python ./code/upload-training.py

Vaihe 7: Junamalli
Kun kuvat on ladattu, aloita mallin koulutus

python ./code/train-model.py

Vaihe 8: Hanki mallitila
Malliin kuluu ~ 2 tuntia. Saat sähköpostin, kun malli on koulutettu. Sillä välin tarkistat mallin tilan

python ./code/model-state.py

Vaihe 9: Tee ennuste
Kun malli on koulutettu. Voit tehdä ennusteita mallin avulla

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


Nanoneet ja ihmiset silmukka

‌‌Moderate'-näyttö auttaa korjaus- ja syöttöprosesseja ja vähentää manuaalisen tarkistajan työtaakkaa lähes 90 % ja kustannuksia 50 % organisaatiolle.

OCR:n tekeminen Tesseractilla, OpenCV:llä ja Pythonilla

Ominaisuuksiin kuuluu

  1. Seuraa oikeita ennusteita
  2. Seuraa mitä väärässä
  3. Tee korjaukset epätarkkoihin
  4. Poista väärät
  5. Täytä puuttuvat ennusteet
  6. Suodata kuvia päivämääräalueilla
  7. Laske valvottujen kuvien lukumäärä valvottavien kuvien suhteen

Kaikki kentät on rakennettu helppokäyttöiseksi käyttöliittymäksi, jonka avulla käyttäjä voi hyödyntää OCR-tekniikkaa ja auttaa sen parantamisessa, ilman, että sinun on kirjoitettava koodia tai ymmärrettävä tekniikan toimintaa.


Onko sinulla OCR-ongelma mielessä? Haluatko vähentää organisaatiosi tiedonsyöttökustannuksia? Suuntaa kohti Nanonetit ja rakentaa OCR-malleja poimi teksti kuvista or poimia tietoja PDF-tiedostoista!


Yhteenveto

Aivan kuten syväoppiminen on vaikuttanut lähes kaikkiin tietokonenäön osa-alueisiin, sama pätee hahmojen ja käsinkirjoituksen tunnistukseen. Syväoppimiseen perustuvat mallit ovat onnistuneet saavuttamaan ennennäkemättömän tekstintunnistustarkkuuden, joka on paljon perinteistä parempi tiedonkeruu ja koneoppimisen kuvankäsittely lähestymistapoja.

Tesseract toimii hyvin, kun asiakirjakuvat seuraavat seuraavia ohjeita:

  • Puhdas etualan tekstin segmentointi taustasta
  • Vaaka-asennossa ja skaalataan sopivasti
  • Laadukas kuva ilman epäselvyyttä ja kohinaa

Tesseract 4.0: n uusin versio tukee syvälle oppimiseen perustuvaa tekstintunnistusta, joka on huomattavasti tarkempi. Itse OCR-moottori on rakennettu pitkän lyhytkestoisen muistin (LSTM) verkkoon, eräänlaiseen toistuvaan hermoverkkoon (RNN).

Tesseract on täydellinen skannata puhtaita asiakirjoja ja sisältää melko suuren tarkkuuden ja fontin vaihtelun, koska sen koulutus oli kattava. Sanoisin, että Tesseract on go-tool, jos tehtäväsi on skannata kirjoja, asiakirjoja ja painettua tekstiä puhtaalle valkoiselle taustalle.


Kirjallisuutta

Päivitys:
Monet ihmiset kysyivät meiltä, ​​kuinka he voivat saada päivämäärän tekstin muodossa tai käyttämällä sitä, kun se havaitsee päivämäärän tai muita erityisiä tietoja, jotta he voisivat lisätä luetteloon.
Tässä on vastaus:
Koodissa, jossa piirretään rajoitusruutu päivämääräruudun ympärille, huomaat viivan, joka vastaa säännöllisen lausekkeen mallia d['text']. Se piirtää laatikon vain, jos kuvio sopii yhteen. Voit yksinkertaisesti poimia arvot d['text'] kun kuvio täsmää ja liitä ne luetteloon.

Päivitys 2:
Olemme päivittäneet lisää lukuluetteloita, jotta voimme vastata muihin kuin englanninkieliseen tekstintunnistusohjelmaan liittyviin kysymyksiin.

Aikaleima:

Lisää aiheesta Tekoäly ja koneoppiminen