Optische tekenherkenning met Tesseract

1. Overzicht

Met de vooruitgang van technologie in AI en machine learning hebben we tools nodig om tekst in afbeeldingen te herkennen.

In deze zelfstudie verkennen we Tesseract, een engine voor optische tekenherkenning (OCR), met een paar voorbeelden van beeld-naar-tekstverwerking.

2. Tesseract

Tesseract is een open-source OCR-engine die door HP is ontwikkeld herkent meer dan 100 talen, samen met de ondersteuning van ideografische en rechts-naar-links talen. Ook, we kunnen Tesseract trainen om andere talen te herkennen.

Het bevat twee OCR-engines voor beeldverwerking - een LSTM (Long Short Term Memory) OCR-engine en een oudere OCR-engine die werkt door tekenpatronen te herkennen.

De OCR-engine gebruikt de Leptonica-bibliotheek om de afbeeldingen en ondersteuningen te openen verschillende uitvoerformaten zoals platte tekst, hOCR (HTML voor OCR), PDF en TSV.

3. Installatie

Tesseract is beschikbaar om te downloaden / installeren op alle belangrijke besturingssystemen.

Als we bijvoorbeeld macOS gebruiken, kunnen we de OCR-engine installeren met Homebrew:

brew installeren tesseract 

We zullen zien dat het pakket standaard een set taalgegevensbestanden bevat, zoals Engels, en oriëntatie en scriptdetectie (OSD):

==> tesseract installeren ==> //homebrew.bintray.com/bottles/tesseract-4.1.1.high_sierra.bottle.tar.gz ==> Gieten tesseract-4.1.1.high_sierra.bottle.tar.gz = => Voorbehoud Deze formule bevat alleen de taalgegevensbestanden "eng", "osd" en "snum". Als je andere ondersteunde talen nodig hebt, voer je `brew install tesseract-lang` uit. ==> Samenvatting /usr/local/Cellar/tesseract/4.1.1: 65 bestanden, 29,9 MB

We kunnen echter het tesseract-lang module voor ondersteuning van andere talen:

brew install tesseract-lang

Voor Linux kunnen we Tesseract installeren met behulp van de jammie opdracht:

yum installeer tesseract

Laten we op dezelfde manier taalondersteuning toevoegen:

yum installeer tesseract-langpack-eng yum installeer tesseract-langpack-spa

Hier hebben we de taalgetrainde gegevens voor Engels en Spaans toegevoegd.

Voor Windows kunnen we de installatieprogramma's krijgen van Tesseract bij UB Mannheim.

4. Tesseract-opdrachtregel

4.1. Rennen

We kunnen de opdrachtregelhulpprogramma Tesseract gebruiken om tekst uit afbeeldingen te extraheren.

Laten we bijvoorbeeld een momentopname van onze website maken:

Vervolgens voeren we het tesseract commando om het baeldung.png snapshot en schrijf de tekst in het output.txt het dossier:

tesseract baeldung.png uitvoer

De output.txt bestand zal er als volgt uitzien:

een REST met Spring Learn Spring (nieuw!) De canonieke referentie voor het bouwen van een API van productiekwaliteit met Spring. Van geen ervaring tot daadwerkelijk dingen bouwen. y Java wekelijkse beoordelingen

We kunnen zien dat Tesseract niet de volledige inhoud van de afbeelding heeft verwerkt. Omdat de nauwkeurigheid van de uitvoer is afhankelijk van verschillende parameters, zoals de beeldkwaliteit, taal, paginasegmentatie, getrainde gegevens en engine die wordt gebruikt voor beeldverwerking.

4.2. Taalondersteuning

Standaard gebruikt de OCR-engine Engels bij het verwerken van de afbeeldingen. We kunnen de taal echter aangeven door de -l argument:

Laten we eens kijken naar een ander voorbeeld met meertalige tekst:

Laten we eerst de afbeelding verwerken met de standaard Engelse taal:

tesseract multiLanguageText.png uitvoer 

De uitvoer ziet er als volgt uit:

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

Laten we vervolgens de afbeelding verwerken met de Portugese taal:

tesseract multiLanguageText.png uitvoer -l por

De OCR-engine detecteert dus ook Portugese letters:

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

Evenzo kunnen we een combinatie van talen declareren:

tesseract multiLanguageText.png uitvoer -l spa + por

Hier gebruikt de OCR-engine voornamelijk Spaans en vervolgens Portugees voor beeldverwerking. De uitvoer kan echter verschillen op basis van de volgorde van de talen die we specificeren.

4.3. Paginasegmentatiemodus

Tesseract ondersteunt verschillende modi voor paginasegmentatie, zoals OSD, automatische paginasegmentatie en beperkte tekst.

We kunnen de paginasegmentatiemodus declareren door de –Psm argument met een waarde van 0 tot 13 voor verschillende modi:

tesseract multiLanguageText.png uitvoer --psm 1

Door hier een waarde van 1 te definiëren, hebben we de automatische paginasegmentatie met OSD voor beeldverwerking verklaard.

Laten we eens kijken naar alle ondersteunde paginasegmentatiemodi:

4.4. OCR-motormodus

Evenzo kunnen we verschillende engine-modi gebruiken, zoals legacy en LSTM-engine tijdens het verwerken van de afbeeldingen.

Hiervoor kunnen we de -Oem argument met een waarde van 0 tot 3:

tesseract multiLanguageText.png uitvoer --oem 1

De OCR-engine-modi zijn:

4.5. Tessdata

Tesseract bevat twee sets getrainde gegevens voor de LSTM OCR-engine: de best getrainde LSTM-modellen en snelle integer-versies van getrainde LSTM-modellen.

De eerste zorgt voor een betere nauwkeurigheid en de laatste biedt een betere snelheid bij de beeldverwerking.

Tesseract biedt ook gecombineerde getrainde gegevens met ondersteuning voor zowel legacy als LSTM OCR-engine.

Als we de Legacy OCR-engine gebruiken zonder de ondersteunende getrainde gegevens te verstrekken, genereert Tesseract een foutmelding:

Fout: Tesseract (legacy) engine aangevraagd, maar componenten zijn niet aanwezig in /usr/local/share/tessdata/eng.traineddata !! Laden van taal 'eng' Tesseract kon geen talen laden!

We moeten dus het vereiste .getrainde gegevens bestanden en bewaar ze in de standaard tessdata locatie of geef de locatie aan met behulp van de –Tessdata-dir argument:

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

4.6. Uitvoer

We kunnen een argument declareren om het vereiste uitvoerformaat te krijgen.

Om bijvoorbeeld doorzoekbare PDF-uitvoer te krijgen:

tesseract multiLanguageText.png uitvoer pdf

Hierdoor wordt het output.pdf bestand met de doorzoekbare tekstlaag (met herkende tekst) op de geleverde afbeelding.

Evenzo voor hOCR-uitvoer:

tesseract multiLanguageText.png uitvoer hocr

We kunnen ook gebruiken tesseract - helpen en tesseract –help-extra opdrachten voor meer informatie over het gebruik van de opdrachtregel tesseract.

5. Tess4J

Tess4J is een Java-wrapper voor de Tesseract-API's die OCR-ondersteuning biedt voor verschillende afbeeldingsindelingen zoals JPEG, GIF, PNG en BMP.

Laten we eerst het laatste toevoegen tess4j Maven afhankelijkheid van onze pom.xml:

 net.sourceforge.tess4j tess4j 4.5.1 

Vervolgens kunnen we de Tesseract klasse verzorgd door tess4j om de afbeelding te verwerken:

Bestandsafbeelding = nieuw bestand ("src / main / resources / images / multiLanguageText.png"); Tesseract tesseract = nieuwe Tesseract (); tesseract.setDatapath ("src / main / resources / tessdata"); tesseract.setLanguage ("eng"); tesseract.setPageSegMode (1); tesseract.setOcrEngineMode (1); String resultaat = tesseract.doOCR (afbeelding);

Hier hebben we de waarde van de datapad naar de directorylocatie die osd.getrainde gegevens en eng. getrainde gegevens bestanden.

Ten slotte kunnen we het Draad output van de verwerkte afbeelding:

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

Bovendien kunnen we de setHocr methode om de HTML-uitvoer te krijgen:

tesseract.setHocr (waar);

Standaard verwerkt de bibliotheek de volledige afbeelding. We kunnen echter een bepaald gedeelte van de afbeelding verwerken door de java.awt.Rectangle object tijdens het aanroepen van het doOCR methode:

resultaat = tesseract.doOCR (imageFile, nieuwe rechthoek (1200, 200));

Net als bij Tess4J kunnen we Tesseract Platform gebruiken om Tesseract in Java-applicaties te integreren. Dit is een JNI-wrapper van de Tesseract-API's op basis van de JavaCPP Presets-bibliotheek.

6. Conclusie

In dit artikel hebben we de Tesseract OCR-engine verkend met een paar voorbeelden van beeldverwerking.

Eerst hebben we de tesseract opdrachtregelprogramma om de afbeeldingen te verwerken, samen met een reeks argumenten zoals -l, –Psm en -Oem.

Vervolgens hebben we onderzocht tess4j, een Java-wrapper om Tesseract in Java-applicaties te integreren.

Zoals gewoonlijk zijn alle code-implementaties beschikbaar op GitHub.