Zo testen we ReceiptIQ op echte kassabonnen uit vier landen
Een kassabon uit Tokio, één uit Taipei, één uit Kralendijk en één uit Calgary hebben bijna niets gemeen behalve het woord "totaal" in vier talen. Versie 2.2.0 is de eerste ReceiptIQ-release waarvan de scanpijplijn, bon voor bon, is gemeten tegen echte bonnen uit vier landen vóór hij uitkwam. Dit is wat die test vond, en wat hij repareerde.
Kassabonnen zijn niet internationaal
ReceiptIQ is begonnen in Canada, en lang gingen de regels stilzwijgend uit van Canadese bonnen: prijzen zien eruit als 12.34, de totaalregel zegt TOTAL, btw komt er onderaan bij. Toen kwamen gebruikers uit Nederland, Bonaire, Japan en Taiwan, en hun bonnen breken elk van die aannames.
- Japan en Taiwan drukken helemaal geen decimalen. Een yen-prijs is
¥1,190; een Taiwanese is483of198TX. Japanse bonnen zetten de al inbegrepen belasting (内税) als informatieregel, en het woord 合計 (totaal) komt in meer rollen voor: 合計点数 is het aantal artikelen, 合計P zijn spaarpunten. - Nederland en Bonaire gebruiken de komma als decimaalteken:
16,50,Totaal € 54,68, en op Bonaire staat het dollarteken een spatie van de cijfers:$ 55,00. - Taiwan geeft een overheidsstandaard e-factuur (統一發票) uit met factuurnummer, willekeurige code en QR-blok boven het artikeldeel, en niets daarvan is een prijs.
Niets hiervan is exotisch. Zo ziet het papier er daar nu eenmaal uit, en een scanner die er nooit tegen is gemeten, faalt op manieren die de ontwikkelaar nooit ziet.
Hoe we meten
We hebben een kleine testopstelling op een Mac gebouwd die precies dezelfde code draait als de app op je iPhone: Apple's tekstherkenning op het toestel, ReceiptIQ's eigen logica die artikelnamen aan prijzen koppelt op basis van hun positie op de bon, de controle "lijkt dit op een bon?", en de rekenkundige correcties voor kortingen, verschoven prijzen en totalen. Elke bon gaat door die pijplijn en het resultaat wordt vergeleken met wat er echt gedrukt staat.
Wat erdoorheen ging:
- 1.148 echte Japanse bonnen uit een openbare, open gelicentieerde onderzoeksdataset, met de telefoon gefotografeerd in winkels en restaurants, met winkel, datum, artikelen, belasting en totaal door mensen gelabeld.
- 973 echte Maleisische bonnen uit de ICDAR 2019-benchmark, het formaat dat onze gebruikers in Singapore en Maleisië scannen.
- 40 Taiwanese e-facturen gerenderd volgens de officiële lay-out, omdat er nog geen openbare fotoset bestaat.
- Bonnen die gebruikers deze zomer aan support hebben gestuurd, vooral uit Caribisch Nederland, die nu vóór elke release als regressietest draaien.
Eén ding doen we niet: een model trainen op dit materiaal. De tekstherkenning van ReceiptIQ is die van Apple, en de verwerkingsregels zijn code die we kunnen lezen en testen. De datasets blijven op één Mac, en bonnen die gebruikers ons sturen blijven privé.
Wat de test vond
| Bevinding | Vóór | Na |
|---|---|---|
| Japanse bonnen waarbij artikelen aan hun prijs gekoppeld werden | 19% | 93% |
| Taiwanese e-facturen herkend als bon | 33 van 40 | 40 van 40 |
| Taiwanese e-facturen met gekoppelde artikelen | 25 van 40 | 40 van 40 |
| Japanse bonnen met een verzonnen belastingregel (van 40) | 12 | 4, en die 4 zijn echt exclusief btw |
| Nederlandse bonnen met een kommatotaal correct gelezen | afhankelijk van geluk | allemaal |
| Keren dat de totaalcorrectie een juist totaal overschreef op 194 bonnen | 18 | 0 |
Op de laatste regel zijn we het meest trots. Een vangnet dat af en toe een goed antwoord door een fout vervangt, is erger dan geen vangnet, en het was de testopstelling die dat dezelfde avond nog ving.
Wat er veranderde in 2.2.0
- Yen- en Nieuw-Taiwanese-dollarprijzen worden als prijs herkend, zodat artikelnamen en bedragen al gekoppeld bij de parser aankomen. Dat was de grootste bron van verwisselde regels op Japanse bonnen.
- Japanse bonnen met inbegrepen btw krijgen geen verzonnen belastingregel meer; 小計 wordt nooit voor het totaal aangezien; お預り en お釣り worden gelezen als contant betaald en wisselgeld.
- Kommadecimalen en een spatie na het valutasymbool worden overal geaccepteerd: in de boncontrole, in de koppelstap en in de totaalcorrectie. "Totaal € 54,68" wordt nu als 54,68 gelezen.
- Woorden als Totaal, Subtotaal, Pinnen, Korting en hun Spaanse, Japanse en Chinese tegenhangers worden herkend, zodat ze niet meer als gekochte artikelen verschijnen.
- Wordt een scan toch als "geen bon" geweigerd, dan biedt de melding nu aan om de foto en de herkende tekst naar support te sturen, met jouw toestemming, zodat we hem aan de testset kunnen toevoegen.
Wat hierna komt
Echte Taiwanese bonfoto's, een Spaanse set, en een betere camera-ervaring zodat de foto die deze pijplijn ingaat net zo schoon is als de bon die uit de printer komt. Scan je bonnen in een land dat we nog niet gemeten hebben, dan is de meldknop de snelste manier om jouw formaat in de volgende testronde te krijgen.