Geen upload, 100% lokaal, geen account

Artikel

OCR-nauwkeurigheid verbeteren: herstel de afbeelding vóór je de tekst herkent

OCR is niet beter dan de afbeelding die je het geeft. Een scheve, laagcontrasterende, ruisige scan produceert onbegrijpelijke tekst, ongeacht hoe goed de engine is. Dit zijn de maatregelen die werkelijk verschil maken, in de volgorde om ze uit te voeren, allemaal lokaal in je browser.

Waarom OCR moeite heeft met echte scans

Een OCR-engine zoals Tesseract is getraind op schone, horizontale, hoogcontrasterende tekst. Hij verdeelt een pagina in regels, regels in woorden en woorden in tekenvormen, en vergelijkt elke vorm met zijn getrainde model. Echte scans doorbreken die aannames: de pagina staat een paar graden scheef, de belichting is ongelijkmatig, de resolutie is laag, en de rand van het scannerbed of de tegenoverliggende pagina voegt donker ruis toe. Elk van deze problemen zorgt ervoor dat de stap voor regel- en tekensegmentatie foute gissingen maakt, en een fout in de segmentatie leidt tot een keten van fout herkende tekens. De oplossing is zelden een andere engine: het gaat erom de afbeelding voor te bereiden zodat de aannames van de engine kloppen. In de praktijk heeft voorverwerking meer invloed op de nauwkeurigheid dan de keuze van de OCR-engine.

Diagram van de OCR-voorverwerkingspipeline: een scan doorloopt de stappen oriëntatie, scheefstelcorrectie, bijsnijden en grijswaarden voordat het herkenningsmotor wordt bereikt.

Begin met resolutie: streef naar 300 DPI

Tesseract werkt het beste bij circa 300 DPI voor gewone lopende tekst. Onder ruwweg 200 DPI vloeien de streken van elk glief samen met hun buren en daalt de nauwkeurigheid sterk. Als je de scan zelf beheert, stel de scanner dan eerst in op 300 DPI, het is de keuze met de grootste afzonderlijke impact. Als je alleen een lageresolutie-afbeelding hebt, kan opschalen geen detail terugbrengen dat nooit is vastgelegd, maar een gematigde opschaling kan de engine nog steeds helpen aanrakende tekens te scheiden doordat segmentatie meer pixels heeft om mee te werken. Zeer kleine druk profiteert van 400 tot 600 DPI; daarboven vergroot je alleen het bestand zonder nauwkeurigheidswinst. Wanneer de bron een PDF is, rasteriseer dan elke pagina eerst naar een afbeelding op de gewenste DPI, en voer daarna OCR uit op die afbeelding.

Zorg voor de juiste oriëntatie

Als de pagina 90, 180 of 270 graden gedraaid is, leest de engine zijdelings of ondersteboven en geeft onzinnige uitvoer. Tesseract heeft een oriëntatie- en schriftdetectiestap (OSD) die de rotatie kan schatten, maar die is onbetrouwbaar bij schaarse tekst, formulieren of pagina's die worden gedomineerd door afbeeldingen. De pagina zelf rechtop draaien elimineert het giswerk. Deze stap is verliesvrij en onmiddellijk: draaien met een veelvoud van 90 graden herplaatst bestaande pixels naar nieuwe posities, zonder kwaliteitsverlies en zonder hersampling. Doe dit vóór het rechtzetten, want rechtzetten gaat ervan uit dat de tekst al globaal horizontaal staat.

Rechtzetten: corrigeer de kleine schuinstand

Zelfs een schuinstand van 2 tot 3 graden, het soort dat ontstaat als een pagina iets scheef wordt ingevoerd, schaadt OCR: de stap voor horizontale regeldetectie splitst één tekstregel in twee, of voegt twee regels samen tot één. Rechtzetten meet de dominante hoek van de tekstregels (doorgaans met projectieprofielanalyse of Hough-transformatie) en draait de pagina terug naar horizontaal. Anders dan een draai van 90 graden is rechtzetten een kleine rotatie over een willekeurige hoek, waardoor pixels worden gehersampled en er een kleine hoeveelheid onscherpte ontstaat. Die ruil is bijna altijd de moeite waard, omdat horizontale regels schoon worden gesegmenteerd en de nauwkeurigheidswinst de lichte vervaging ruimschoots overtreft. Rechtzetten na het corrigeren van de oriëntatie en vóór het bijsnijden.

Voor en na scheefstelcorrectie: een tekstpagina links een paar graden gekanteld, rechts horizontaal rechtgezet zodat de regels horizontaal staan.

Bijsnijden tot de tekst en ruis verwijderen

Alles wat niet de gewenste tekst is, vormt ruis die de engine verkeerd kan lezen: de donkere rand van het scannerbed, een deel van de tegenoverliggende pagina, een geniet hoekje, een vinger of een perforatiegat. Bijsnijden tot alleen het tekstblok verwijdert die valse doelen, waardoor de nauwkeurigheid verbetert en de herkenning sneller verloopt doordat de engine minder oppervlak hoeft te analyseren. Bij een document met meerdere kolommen voorkomt bijsnijden (of OCR per kolom uitvoeren) dat de engine dwars over de marge leest en twee kolommen samenvoegt tot één onbegrijpelijke regel. Snijd bij na het rechtzetten, zodat de inhoud recht in het kader staat.

Contrast, grijswaarden en hoe binarisatie werkelijk werkt

OCR werkt uiteindelijk op een binaire afbeelding: elk pixel wordt beoordeeld als inkt of papier. Tesseract doet dit intern met de methode van Otsu, die één globale drempelwaarde kiest op basis van het histogram van de afbeelding. Dat werkt goed wanneer de pagina gelijkmatig belicht is en een goed contrast heeft, en mislukt wanneer een schaduw of gekleurde achtergrond één hoek donkerder maakt dan de drempelwaarde verwacht. Wat betrouwbaar helpt is omzetten naar grijswaarden, zodat een kleurzweem de drempelwaarde niet in de war brengt, en de belichting egaliseren zodat de hele pagina aan één kant van de drempelwaarde zit. Contrast matig verhogen helpt vage tekst. Wat meestal averechts werkt is harde handmatige binarisatie: als je zelf met de verkeerde afkapwaarde naar puur zwart-wit omzet, wis je vage streken die de interne stap van de engine zou hebben behouden. Laat de engine binariseren en geef hem een egale grijswaardenafbeelding als vertrekpunt. Sunasty biedt grijswaarden voor PDF's; voor fijne contrastafstelling is een desktopeditor nog steeds beter, maar gelijkmatige belichting tijdens het scannen telt zwaarder dan welke schuifregelaar ook.

Kies de juiste taal en controleer de uitvoer

Tesseract laadt per taal en schrift een apart getraind gegevensbestand. Een Engels model over Frans of Grieks tekst draaien levert vermijdbare fouten op, met name bij tekens met accenten of niet-Latijnse tekens, dus selecteer de taal die overeenkomt met het document. Behandel de OCR-uitvoer tot slot als een concept, niet als definitief resultaat: de engine heeft geen manier om te weten of een naam correct gespeld is of dat een 0 geen O is. Lees getallen, eigennamen en alles wat juridisch of financieel belangrijk is na. Voor tabellen en meerkolomsopmaak moet je de structuur met de hand corrigeren, want OCR geeft een stroom herkende tekst terug, geen gereconstrueerde opmaak.

Tools in dit artikel

Veelgestelde vragen

Verbetert opschalen van een wazige scan OCR?

Niet veel op zichzelf. Opschalen kan geen detail herstellen dat de scan nooit heeft vastgelegd, dus een wazige afbeelding van 100 DPI blijft wazig. Een gematigde opschaling kan de engine helpen aanrakende tekens te scheiden doordat segmentatie meer pixels heeft, maar opnieuw scannen op 300 DPI is veel doeltreffender dan welke mate van opschaling ook.

Moet ik de afbeelding eerst zelf omzetten naar puur zwart-wit?

Doorgaans niet. Tesseract binariseert intern met de methode van Otsu, en een handmatige harde drempel met de verkeerde afkapwaarde wist vage streken die de engine zou hebben bewaard. Zet in plaats daarvan om naar grijswaarden en egaliseer de belichting, en laat de engine daarna zijn eigen drempelwaarde kiezen.

Mijn tekst staat zijdelings. Roteert OCR hem automatisch?

Soms. Tesseract heeft een oriëntatiedetectiestap, maar die is onbetrouwbaar bij formulieren, schaarse tekst of afbeeldingrijke pagina's. De pagina zelf rechtop draaien over 90, 180 of 270 graden is verliesvrij en elimineert het giswerk, dus dat is de veiligere keuze.

Wordt mijn document hierbij geüpload?

Nee. Draaien, rechtzetten, bijsnijden, omzetten naar grijswaarden en OCR zelf draaien allemaal in je browser. OCR gebruikt een WebAssembly-build van Tesseract, en de getrainde taaldata wordt eenmalig gedownload en gecacht. Je bestand verlaat het apparaat nooit.

Bronnen