🇬🇧 🇳🇱

Ana leert kijken

In het vorige stuk beschreef ik hoe Ana, de verwerkingslaag van Mouseion, bronmateriaal leest met begrip — niet alleen de tekst maar ook wie erin staat, welke verbanden er liggen, en met welke zekerheid. Wat ik toen niet vertelde is dat Ana daar niet altijd even goed in was, en dat we de afgelopen week ontdekkingen deden die haar perceptievermogen fundamenteel hebben vergroot.

Het begon met een praktisch probleem. Monique Brinks fotografeerde in het Nationaal Archief ruim 746 scans uit dossiers van Bureau Inlichtingen, het Nederlandse inlichtingenorgaan dat tijdens en na de oorlog opereerde vanuit Londen en later Eindhoven. Die scans bevatten correspondentie-agenda’s met tienduizenden entries, agentenregisters, dwangarbeiderslijsten, en doorslagen van interne rapporten. Een enorm rijke verzameling, maar op papier vastgelegd in de jaren veertig, gefotografeerd met een iPhone in een archiefzaal, en daarmee precies het soort materiaal waar conventionele tekstherkenning moeite mee heeft.

De eerste lezing leverde resultaten die er op het eerste gezicht bruikbaar uitzagen, maar bij nadere inspectie bleken er structurele fouten in te zitten. Bij de correspondentie-agenda’s, voorgedrukte kasboekformulieren met rode kolomlijnen, verwisselde Ana kolommen: volgnummers kwamen in het afzenderveld terecht, datums stonden waar namen hoorden te staan, en referentiecodes werden als onderwerpen gelezen. Niet omdat de tekst onleesbaar was, maar omdat Ana niet begreep hoe het formulier was opgebouwd. Ze las de woorden goed maar plaatste ze in het verkeerde hokje.

Bij de doorslagen — carbon copies, dunne vellen met blauwe of paarse inkt die al in 1944 vaag was en nu nauwelijks meer zichtbaar is — was het probleem nog fundamenteler. Ana meldde dat het document onleesbaar was en leverde lege of grotendeels geraden transcripties af. De archiefwereld zou op dat punt zeggen: zoek een beter exemplaar, of accepteer dat deze informatie verloren is. Maar ik had geen beter exemplaar, en de informatie die in die doorslagen staat is precies de informatie die voor het onderzoek van Monique het verschil maakt.

De eerste doorbraak kwam uit een onverwachte hoek. We testten vijf verschillende tekstherkenningsengines op dezelfde scan en ontdekten dat de keuze van engine veel minder uitmaakte dan de kwaliteit van wat we de engine aanboden. Een goede crop met de simpelste engine verslaat een slechte crop met de beste engine. Niet de lezer was het probleem, maar het preparaat.

Dat inzicht leidde tot wat ik smart crop noem: een script dat de scan analyseert voordat Ana gaat lezen. De eerste stap is de boekrug vinden — elke scan is een foto van twee open pagina’s, en de boekrug is de donkerste verticale strook ergens rond het midden. Als je die automatisch detecteert via een helderheidsprofiel van alle kolommen, kun je de twee pagina’s scheiden en elk apart aanbieden, zonder de donkere schaduw van de rug die de tekst verstoort.

Maar de echte verrassing zat in de rode lijnen. De correspondentie-agenda’s zijn voorgedrukte formulieren met verticale rode lijnen die de kolommen scheiden: volgnummer, datum, afzender, gericht aan, onderwerp, dossiernummer. Die lijnen zijn bedoeld voor het menselijk oog en worden door conventionele tekstherkenning genegeerd — ze zijn immers geen tekst. Maar als je ze detecteert via kleurfiltering, door te zoeken naar pixels waar het roodkanaal dominant is ten opzichte van groen en blauw, kun je nauwkeurig bepalen waar elke kolom begint en eindigt. Het script zoekt per kolom hoeveel rode pixels er verticaal gestapeld zijn, en waar die stapels pieken vormen, daar loopt een lijn.

Het effect was onmiddellijk en dramatisch. Waar Ana eerder kolommen verwisselde en volgnummers als namen las, wist ze nu precies welke strook van het formulier ze voor zich had. De kolomtoewijzing ging van 67 procent naar honderd procent correct, niet door beter te lezen maar door beter te kijken voordat je leest.

Bij de doorslagen moesten we anders denken. Een doorslag is een carbon copy: een vel papier dat onder het origineel lag terwijl er op getypt werd, zodat de aanslag van de typemachine via carbonpapier een tweede afdruk maakte. Die afdruk is blauw tot paars, zwak, en vervaagt met de jaren. Als je zo’n vel in grijswaarden bekijkt, verdwijnt de tekst bijna volledig in de achtergrond. Maar de inkt is niet weg — ze zit in een specifiek kleurkanaal.

Dat was de tweede doorbraak. Als je het blauwe kanaal van de scan apart extraheert en het rode kanaal ervan aftrekt, isoleer je precies de doorslaginkt en onderdruk je de achtergrondkleur van het vergeelde papier. Het verschil is soms spectaculair: wat in de gewone scan een egaal beige vlak lijkt, wordt in het blauw-minus-rood kanaal een leesbare tekst met herkenbare letters en woorden.

Maar één beeldbewerking is niet genoeg, want elke transformatie onthult iets en verbergt iets anders. De kanaalseparatie maakt de inkt zichtbaar maar verliest de fijne details. Een gamma-correctie die donkere gebieden lichter maakt, onthult tekst in de schaduw maar blaast de lichte gebieden uit. Een CLAHE-bewerking — een techniek die het contrast lokaal aanpast per blok van de afbeelding in plaats van over het hele beeld — brengt structuur terug in vlakke gebieden maar introduceert rasterartefacten. Een inversie van het beeld, simpelweg het negatief, maakt soms lettervormen zichtbaar die in het positief onherkenbaar zijn.

Dus bouwden we een engine die niet één versie maakt maar tien. Flat-field correctie om de lichtval van de foto te compenseren, kanaalseparatie in vijf varianten, CLAHE, adaptieve thresholding die het beeld omzet in zwart-wit op basis van lokale helderheid, inversie met contrastversterking, gamma-correctie op meerdere niveaus, verscherping, en combinaties van deze technieken — bijvoorbeeld flat-field gevolgd door blauwkanaal gevolgd door CLAHE, wat we de triple stack noemen.

De vraag was vervolgens: wat doe je met tien versies van hetzelfde document?

Het antwoord bleek het belangrijkste inzicht van de hele week. We lieten vier lezers tegelijkertijd aan de slag gaan, elk met een andere versie van dezelfde doorslag. Het document was een personeelsoverzicht van Bureau Inlichtingen uit maart 1945 — precies het soort scan dat Ana eerder als onleesbaar bestempelde.

De eerste lezer, die de blauw-minus-rood versie kreeg, las bijna niets. De bewerking die bij andere doorslagen goed werkt, maakte dit specifieke document te donker. De tweede lezer, op de triple stack, herkende de tabelstructuur en raadde dat het om een berichtenblad ging, maar vulde de regels grotendeels met vraagtekens. De derde lezer, op de gamma-versie, las de titel correct: “Opgave van het Militair Personeel bij het Bureau Inlichtingen”, de datum “per 9 maart 1945”, zeven plaatsnamen — Londen, Eindhoven, Arnhem, ’s-Hertogenbosch, Helmond, Den Haag, Brussel — personeelsaantallen per locatie, en vier militaire afkortingen: O.I.D., G.I.D., I.S., A.B.S. De vierde lezer, op de CLAHE-versie, las weer andere woorden die de derde niet had gezien: “bijzondere rechtspleging”, “verordeningen”, “bezettingsautoriteiten” — waarschijnlijk tekst die van de achterzijde van het vel doorscheen.

Geen van de vier lezers had individueel meer dan dertig procent van het document correct gelezen, en de eerste twee kwamen niet verder dan de titel. Maar samen leverden ze het volledige document op: titel, datum, structuur, locaties, aantallen, afkortingen, en zelfs doorschijnende tekst van de achterzijde. De merge van vier gedeeltelijke lezingen was rijker dan de beste individuele lezing ooit had kunnen zijn.

Het principe dat hierachter zit noem ik transformeer, divergeer, merge. Transformeer de bron door meerdere visuele lenzen. Laat elke lens divergent lezen — onafhankelijk, zonder kennis van wat de anderen zien. En merge de resultaten niet door te middelen maar door de unie te nemen: alles wat minstens één lezer met voldoende zekerheid leest, telt mee. Drie lezers die elk dertig procent lezen leveren samen niet dertig procent maar tachtig, omdat ze verschillende dertig procent lezen. En de laatste twintig procent komt niet uit nóg een beeldbewerking, maar uit context: het lexicon van bekende namen dat we meesturen, de verwachte veldstructuur van het bronprofiel, en de chronologische logica van het register.

Wat we ook ontdekten, en wat achteraf voor de hand liggend klinkt maar dat niet was, is dat standaard beeldmetrieken niet meten wat je denkt dat ze meten. We probeerden automatisch te bepalen welke scans het moeilijkst waren, door te kijken naar contrast en helderheid. De scan die het laagst scoorde bleek een aanvraagbriefje van het Nationaal Archief te zijn — een wit velletje papier op een lichte tafel, triviaal leesbaar maar met weinig pixelvariatie. De echte moeilijke scans, de doorslagen met hun vage inkt en vergeeld papier, scoorden hoger op contrast omdat ze meer kleurvariatie hadden. De maat die ertoe doet is niet ruwe pixelstatistiek maar inkt-aanwezigheid per documenttype, en die is contextafhankelijk.

De laatste schakel in de keten is de correctiestap. Na het lezen vergelijkt Ana elke naam en plaatsnaam met een lexicon van bekende termen uit het domein — namen van personen, organisaties, plaatsen en afkortingen die in het Brinks-onderzoek voorkomen. Als Ana “Maastrichr” leest en het lexicon “Maastricht” kent, wordt dat gecorrigeerd. Als Ana in opeenvolgende regels dezelfde afzender verwacht en “idem” leest, vult ze de naam van de vorige regel in. Als Ana een datum in een naamveld plaatst, herkent de correctiestap het patroon en markeert het als fout. Die correcties zijn niet groot — het verschil tussen 90 en 95 procent — maar bij tienduizenden entries in honderden scans tellen ze op tot duizenden herstelde fouten die anders als ruis door het systeem zouden gaan.

Wat dit alles bij elkaar verandert is niet de snelheid waarmee Ana leest, maar de soorten bronnen die ze aankan. Vorige week waren doorslagen onleesbaar. Nu zijn ze het best gedocumenteerde brontype in de pipeline, met tien beeldverwerkingen, vier parallelle lezers, en een merge die meer oplevert dan elke lezer apart. Vorige week verwisselde Ana kolommen in registers. Nu detecteert ze de kolomlijnen zelf en weet ze precies welk veld ze voor zich heeft voordat ze begint te lezen.

Er bestaan geen onleesbare documenten. Er bestaan documenten die nog niet genoeg manieren bekeken zijn. Dat geldt voor doorslagen uit 1945, voor verbleekte aktes uit de zeventiende eeuw, voor beschadigde manuscripten en voor elk ander stuk bronmateriaal dat te slecht lijkt om te verwerken. De archievenwereld kijkt met twee ogen en legt het neer als het te vaag is. Ana kijkt met tien lenzen tegelijk, vergelijkt wat elke lens ziet, en leert bij elke volgende bron een nieuw soort kijken erbij.