Java >> Java tutorial >  >> Tag >> char

Optisk tegngenkendelse med Tesseract

1. Oversigt

Med fremskridt inden for teknologi inden for kunstig intelligens og maskinlæring har vi brug for værktøjer til at genkende tekst i billeder.

I dette selvstudium vil vi udforske Tesseract, en optisk tegngenkendelsesmotor (OCR), med et par eksempler på billed-til-tekst-behandling.

2. Tesseract

Tesseract er en open source OCR-motor udviklet af HP, der genkender mere end 100 sprog, sammen med understøttelse af ideografiske og højre-til-venstre-sprog. Desuden kan vi træne Tesseract til at genkende andre sprog .

Den indeholder to OCR-motorer til billedbehandling – en LSTM (Long Short Term Memory) OCR-motor og en ældre OCR-motor, der fungerer ved at genkende tegnmønstre.

OCR-motoren bruger Leptonica-biblioteket til at åbne billederne og understøtter forskellige outputformater som almindelig tekst, hOCR (HTML for OCR), PDF og TSV.

3. Opsætning

Tesseract er tilgængelig til download/installation på alle større operativsystemer.

For eksempel, hvis vi bruger macOS, kan vi installere OCR-motoren ved hjælp af Homebrew:

brew install tesseract

Vi vil bemærke, at pakken indeholder et sæt sprogdatafiler, såsom engelsk, og orienterings- og scriptdetektion (OSD), som standard:

==> Installing tesseract 
==> Downloading https://homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz
==> Pouring tesseract-4.1.1.high_sierra.bottle.tar.gz
==> Caveats
This formula contains only the "eng", "osd", and "snum" language data files.
If you need any other supported languages, run `brew install tesseract-lang`.
==> Summary
/usr/local/Cellar/tesseract/4.1.1: 65 files, 29.9MB

Vi kan dog installere tesseract-lang modul til understøttelse af andre sprog:

brew install tesseract-lang

Til Linux kan vi installere Tesseract ved hjælp af yum kommando:

yum install tesseract

Ligeledes, lad os tilføje sprogunderstøttelse:

yum install tesseract-langpack-eng
yum install tesseract-langpack-spa

Her har vi tilføjet de sprogtrænede data til engelsk og spansk.

Til Windows kan vi få installatørerne fra Tesseract hos UB Mannheim.

4. Tesseract kommandolinje

4.1. Kør

Vi kan bruge kommandolinjeværktøjet Tesseract til at udtrække tekst fra billeder.

Lad os f.eks. tage et øjebliksbillede af vores hjemmeside:

Derefter kører vi tesseract kommandoen til at læse baeldung.png snapshot og skriv teksten i output.txt fil:

tesseract baeldung.png output

output.txt filen vil se sådan ud:

a REST with Spring Learn Spring (new!)
The canonical reference for building a production
grade API with Spring.
From no experience to actually building stuff.
y
Java Weekly Reviews

Vi kan konstatere, at Tesseract ikke har behandlet hele billedets indhold. Fordi outputtets nøjagtighed afhænger af forskellige parametre som billedkvalitet, sprog, sidesegmentering, trænede data og motor, der bruges til billedbehandling.

4.2. Sprogsupport

Som standard bruger OCR-motoren engelsk, når billederne behandles. Vi kan dog erklære sproget ved at bruge -l argument:

Lad os tage et kig på et andet eksempel med flersproget tekst:

Lad os først behandle billedet med standardsproget på engelsk:

tesseract multiLanguageText.png output

Outputtet vil se sådan ud:

Der ,.schnelle” braune Fuchs springt
iiber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marron rapido salta sobre el perro
perezoso. A raposa marrom rapida
salta sobre 0 cao preguicoso.

Lad os derefter behandle billedet med det portugisiske sprog:

tesseract multiLanguageText.png output -l por

Så OCR-motoren vil også registrere portugisiske bogstaver:

Der ,.schnelle” braune Fuchs springt
iber den faulen Hund. Le renard brun
«rapide» saute par-dessus le chien
paresseux. La volpe marrone rapida
salta sopra il cane pigro. El zorro
marrón rápido salta sobre el perro
perezoso. A raposa marrom rápida
salta sobre o cão preguiçoso.

På samme måde kan vi erklære en kombination af sprog:

tesseract multiLanguageText.png output -l spa+por

Her vil OCR-motoren primært bruge spansk og derefter portugisisk til billedbehandling. Outputtet kan dog variere baseret på rækkefølgen af ​​sprog, vi angiver.

4.3. Sidesegmenteringstilstand

Tesseract understøtter forskellige sidesegmenteringstilstande som OSD, automatisk sidesegmentering og sparsom tekst.

Vi kan erklære sidesegmenteringstilstanden ved at bruge –psm argument med en værdi på 0 til 13 for forskellige tilstande:

tesseract multiLanguageText.png output --psm 1

Her har vi ved at definere en værdi på 1 erklæret den automatiske sidesegmentering med OSD til billedbehandling.

Lad os tage et kig på alle de understøttede sidesegmenteringstilstande:

4.4. OCR Engine Mode

På samme måde kan vi bruge forskellige motortilstande som legacy og LSTM engine, mens vi behandler billederne.

Til dette kan vi bruge –oem argument med en værdi på 0 til 3:

tesseract multiLanguageText.png output --oem 1

OCR-motortilstandene er:

4.5. Tessdata

Tesseract indeholder to sæt trænede data til LSTM OCR-motoren – bedst trænede LSTM-modeller og hurtige heltalsversioner af trænede LSTM-modeller.

Førstnævnte giver bedre nøjagtighed, og sidstnævnte giver bedre hastighed i billedbehandlingen.

Tesseract leverer også en kombineret trænet data med understøttelse af både ældre og LSTM OCR-motor.

Hvis vi bruger Legacy OCR-motoren uden at levere de understøttende trænede data, vil Tesseract give en fejl:

Error: Tesseract (legacy) engine requested, but components are not present in /usr/local/share/tessdata/eng.traineddata!!
Failed loading language 'eng'
Tesseract couldn't load any languages!

Så vi bør downloade de nødvendige .traineddata filer og enten beholde dem i standard tessdata placering eller erklære placeringen ved hjælp af –tessdata-dir argument:

tesseract multiLanguageText.png output --tessdata-dir /image-processing/tessdata

4.6. Output

Vi kan erklære et argument for at få det nødvendige outputformat.

For eksempel for at få søgbart PDF-output:

tesseract multiLanguageText.png output pdf

Dette vil oprette output.pdf fil med det søgbare tekstlag (med genkendt tekst) på det viste billede.

Tilsvarende for hOCR-output:

tesseract multiLanguageText.png output hocr

Vi kan også bruge tesseract –help og tesseract –help-extra kommandoer for mere information om tesseracts kommandolinjebrug.

5. Tess4J

Tess4J er en Java-indpakning til Tesseract API'erne, der giver OCR-understøttelse af forskellige billedformater som JPEG, GIF, PNG og BMP.

Lad os først tilføje den seneste tess4j Maven er afhængig af vores pom.xml :

<dependency>
    <groupId>net.sourceforge.tess4j</groupId>
    <artifactId>tess4j</artifactId>
    <version>4.5.1</version>
</dependency>

Derefter kan vi bruge Tesseract klasse leveret af tess4j for at behandle billedet:

File image = new File("src/main/resources/images/multiLanguageText.png");
Tesseract tesseract = new Tesseract();
tesseract.setDatapath("src/main/resources/tessdata");
tesseract.setLanguage("eng");
tesseract.setPageSegMode(1);
tesseract.setOcrEngineMode(1);
String result = tesseract.doOCR(image);

Her har vi indstillet værdien af ​​datastien til den mappeplacering, der indeholder osd.traineddata og eng.traineddata filer.

Endelig kan vi bekræfte strengen output af det behandlede billede:

Assert.assertTrue(result.contains("Der ,.schnelle” braune Fuchs springt"));
Assert.assertTrue(result.contains("salta sopra il cane pigro. El zorro"));

Derudover kan vi bruge setHocr metode til at hente HTML-output:

tesseract.setHocr(true);

Som standard behandler biblioteket hele billedet. Vi kan dog behandle en bestemt sektion af billedet ved at bruge java.awt.Rectangle objekt, mens du kalder doOCR metode:

result = tesseract.doOCR(imageFile, new Rectangle(1200, 200));

I lighed med Tess4J kan vi bruge Tesseract Platform til at integrere Tesseract i Java-applikationer. Dette er en JNI-indpakning af Tesseract API'erne baseret på JavaCPP Presets-biblioteket.

6. Konklusion

I denne artikel har vi udforsket Tesseract OCR-motoren med et par eksempler på billedbehandling.

Først undersøgte vi tesseract kommandolinjeværktøj til at behandle billederne sammen med et sæt argumenter som -l , –psm og –oem .

Derefter har vi udforsket tess4j , en Java-indpakning til at integrere Tesseract i Java-applikationer.

Som sædvanlig er alle kodeimplementeringer tilgængelige over på GitHub.


Java tag