Zo'n 2.800 downloads per week. Meer stelt de bekendste opensourcetool om persoonsgegevens uit een afbeelding te halen wereldwijd niet voor, volgens de pakketindex van Snyk. Niet per maand. Per week. Zet dat getal naast het aantal gescande contracten, kopieën van identiteitsbewijzen en getekende toestemmingsformulieren die op dit moment in Nederlandse archiefkasten liggen, en u ziet geen technologische achterstand. U ziet een markt die zijn klant allang gekozen heeft, en die klant is niet degene met het document in handen.
De extractieaanname
Open de documentatie van welk gerenommeerd hulpmiddel dan ook en kijk naar de eerste functieaanroep. Die verwacht een tekenreeks. U geeft tekst, u krijgt posities terug — tekens 40 tot 51 zijn een naam. Dat is een schone, eerlijke interface, en voor het werk waarvoor zij bedoeld is, is het de juiste.
Maar let op wat zij veronderstelt. Zij veronderstelt dat de tekst al bestaat. Iemand heeft de pagina al in tekens veranderd. Noem het de extractieaanname: de hele categorie begint één stap ná het moeilijkste deel van het werk, en zegt nooit hardop wie die stap geacht wordt te zetten.
Voor een ontwikkelaar is dat geen probleem, want de ontwikkelaar is die iemand. Hij heeft een databasekolom, een chatlog, een JSON-veld. Tekst is het terrein waar zijn probleem toch al woont. Voor wie een gescande pdf vasthoudt is de aanname het hele probleem — en die is stilzwijgend aan hem toebedeeld.
De aanwijzing staat in de installatie-instructies
Presidio — de feitelijke standaard, ontstaan bij Microsoft en inmiddels beheerd door de gemeenschap — heeft wel degelijk een module voor afbeeldingen, en die is goed gemaakt. Lees hoe u hem draaiend krijgt: installeer het Python-pakket en installeer daarna apart Tesseract OCR voor uw besturingssysteem, in een recente versie; de documentatie noemt tests met v5.2.0. De variant voor medische beelden draagt nog een voorbehoud: hij lakt de pixels, maar schoont de persoonsgegevens niet op die mogelijk nog in de metadata van het bestand staan.
Elk van die zinnen is bruikbaar voor een ingenieur. Geen ervan is leesbaar voor een HR-adviseur met veertig gescande arbeidsovereenkomsten op haar bureau. Dat is geen documentatiefout. Het is een uitspraak over voor wie het product bedoeld is, en een eerlijke.
De grote cloudleveranciers doen hetzelfde, met meer omzet eraan vast: zij verkopen u tekstherkenning als de ene dienst en entiteitsherkenning als de andere, en laten de bedrading ertussen aan u over. Twee producten, één integratieproject, één factuur. Het samenbouwen — precies waar de fouten daadwerkelijk ontstaan — is door de opzet het probleem van de klant.
Het antwoord van de marktleider: het moeilijke deel doet u zelf
Adobe Acrobat is waar de meeste mensen het echt proberen, en het antwoord daar bestaat uit twee stappen: laat eerst tekstherkenning over het gescande document lopen en gebruik daarna Zoeken en lakken. Oftewel: doet u de extractie zelf, dan nemen wij het daarna over. Dezelfde aanname, nu met een mens in de naad.
In die naad wonen de supportvragen. De herkenning mislukt geruisloos op een fax met weinig contrast. De zoekopdracht vindt elf van de veertien namen omdat de twaalfde met een gebroken ligatuur is gelezen. Nergens verschijnt een foutmelding. Er wordt van u gevraagd de kwaliteitscontrole te zijn van een proces dat u nooit is getoond.
Wij maakten dezelfde aanname. De onze was erger.
Ik zou dit graag als buitenstaander schrijven. Dat kan ik niet: ook wij hebben de extractieaanname uitgeleverd, op drie afzonderlijke plekken, en we kwamen er pas achter door te gaan meten.
Onze detectieketen moest beslissen of een pagina het waard was als afbeelding gelezen te worden, en stelde de verkeerde vraag — «staat hier een grote afbeelding?» — met oppervlakte als maat voor belang. Een bedrijfsnaam in een briefhoofdstrook beslaat ongeveer een half procent van een A4'tje. Die glipte er zo doorheen. Grootte was nooit de vraag. De vraag is of er tekst óver de afbeelding is getekend: tekst erover betekent watermerk of achtergrond, geen tekst erover betekent dat de tekstextractie daar blind is, hoe groot het ook is.
Erger nog: de functie die moest controleren of een pagina überhaupt ingesloten afbeeldingen bevatte, riep een methode aan die onze pdf-bibliotheek niet had. De fout werd op debugniveau ingeslikt. Zij antwoordde «hier staan geen afbeeldingen», al net zo lang als die afhankelijkheid vastgezet stond — ook op een pagina die voor 65 procent uit beeld bestond. Een stille onwaarheid is niet te onderscheiden van een juist antwoord, en precies zo heeft zij het overleefd.
En wanneer iemand met de hand een lakvlak over een gescand briefhoofd trok, las onze editor de tekstlaag van de pagina, vond niets binnen het vlak en legde niets vast. De gebruiker wees precies aan wat hij het liefst kwijt wilde, en wij verwijderden het stilletjes niet. Op een pagina die we zojuist gelezen hadden — en waarvan we de woorden daarna hadden weggegooid.
Drie fouten, één oorzaak, en het is dezelfde als die van de markt: wij grepen naar de tekst en behandelden de afbeelding als de stap van iemand anders.
Wie de stille misser betaalt
Een hulpmiddel dat vastloopt is vervelend. Een hulpmiddel dat «geen persoonsgegevens gevonden» meldt op een pagina vol namen is iets anders: het faalt niet, het geeft een schone gezondheidsverklaring af en verschuift de aansprakelijkheid naar iemand die haar niet kan controleren.
Bedenk wie er werkelijk gescande documenten beheert. Niet het platformteam van een grootbank; daar zitten ingenieurs en daar is de tekst er al. Het zijn het advocatenkantoor met twee man, de huisartsenpraktijk die intakeformulieren digitaliseert, de klantmanager met een kopie van een identiteitsbewijs, de HR-medewerker met getekende aanstellingsbrieven. De documenten in beeldvorm zijn onevenredig vaak de gevoelige, en wie ze beheert kan al even onevenredig vaak niet de integratie schrijven die de hele gereedschapsmarkt van hem veronderstelt.
Zij kunnen de gevolgen ook het slechtst opvangen. De ingenieur die een lakketen verkeerd bedraadt schrijft een ticket. Degene wiens kopie-identiteitsbewijs ongelakt de deur uit ging stapt naar de Autoriteit Persoonsgegevens, en onder de AVG moet het datalek binnen 72 uur gemeld worden.
Wat er verandert als je voor de andere klant bouwt
De invoer verandert. De werkeenheid wordt de pagina zoals die is, afbeelding en al, en niet een tekenreeks die iemand anders had moeten aanleveren.
Concreet: tekstherkenning is geen voorafgaande stap die de gebruiker start, zij zit ín de keten. Een met de hand getrokken vlak dat geen woorden vangt, leest zijn eigen pagina opnieuw, zodat een handmatige correctie nooit stilletjes niets kan doen. Herkende namen worden rechthoeken die over de pixels geschilderd worden, met daaronder een nieuw doorzoekbare tekstlaag zodat het bestand bruikbaar blijft. Wilt u de mechaniek in plaats van het betoog, dan hebben we die beschreven in gescande pdf's en afbeeldingen zwartlakken.
Niets hiervan is slimmer dan wat de makers van Presidio hebben gebouwd. Het zijn dezelfde onderdelen, geordend voor iemand die nooit een terminal zou openen. En het draait op de machine waar het document toch al staat, wat bij de kopie van een paspoort geen voorkeur is.
Veelgestelde vragen
Waarom missen lakhulpmiddelen tekst in afbeeldingen?
Omdat de meeste nooit naar de afbeelding kijken. Hun ingangspunt accepteert tekst, dus een gescande pagina arriveert zonder iets om te doorzoeken en vertrekt met «niets gevonden», geruisloos. De afbeelding moet de invoer zijn, niet een stap die de gebruiker vooraf uitvoert.
Is de afbeeldingsmodule van Presidio daar niet juist voor?
Ja, en hij werkt. Het is ook een Python-pakket dat verwacht dat u zelf een tekstherkenningsmotor installeert: een redelijk verzoek aan een ontwikkelaar en een onmogelijk verzoek aan de meeste mensen met scans in de kast. Waar zijn tekstmotor past en waar niet, schreven we in waarom we onze eigen motor bouwden in plaats van Presidio mee te leveren.
Waarom telt lokale verwerking zwaarder bij gescande documenten?
Omdat scans naar het gevoelige neigen: identiteitsbewijzen, medische intake, getekende overeenkomsten. Ze naar een dienst sturen om er de geheimen uit te laten halen betekent dat de geheimen eerst bij die dienst aankomen, en dat is het risico dat u neemt wanneer het document zelf het gevoelige is.
De kern
Dat een pdf vol afbeeldingen zo moeilijk te lakken is, komt niet doordat het probleem onopgelost zou zijn. Elk onderdeel bestaat al jaren. Het komt doordat de onderdelen zijn ontworpen en geprijsd voor ontwikkelaars die met tekststromen werken, en doordat het samenbouwen — het dure deel, het deel dat stukgaat — is overgelaten aan wie het bestand toevallig in handen had.
De meesten van hen zijn geen ontwikkelaars. Het is iemand aan een balie die een kopie maakt van een document dat een vreemde zojuist heeft aangereikt omdat hij iets nodig had: werk, zorg, een woning. Die persoon heeft niet ingestemd met een verwerkingsketen. Hij heeft ingestemd met één kantoor dat op één middag zorgvuldig omgaat met een vel papier dat over hem gaat. Wat wij bouwen zou die zorgvuldigheid vanzelfsprekend moeten maken, en niet iets wat je pas verdient als je technisch genoeg bent.
promptShield voert tekstherkenning, detectie en lakken van gescande pdf's en afbeeldingen uit op uw eigen apparaat — geen pakket te installeren, geen aparte herkenningsstap vooraf, en niets dat wordt geüpload. Probeer het op de scan die uw huidige hulpmiddel schoon noemt.