Det lærte vi af at måle vores sudoku-fotolæser
Opdateret 5. november 2026
Hvad der tæller som læst rigtigt
En opgave er kun læst rigtigt, hvis alle 81 felter er rigtige: ét forkert ciffer giver en anden opgave. Derfor tæller vi hele opgaver, ikke felter. De to kan fortælle meget forskellige historier, som denne side viser: på fotos af trykte opgaver får fotolæseren nu 98,9 % af felterne rigtige, men andelen af hele opgaver rykkede sig næsten ikke, fordi de fleste forkerte felter sidder i nogle få svære billeder.
Vi tæller også den farligste fejl: en opgave, der er læst forkert, men stadig har præcis én løsning. En rigtig sudoku har én løsning, så en aflæsning med ingen eller mange løsninger bliver fanget med det samme. En forkert opgave med én løsning ser fin ud, og derfor markerer løseren hvert felt, den var usikker på, og beder dig sammenligne dem med din opgave, før du løser den.
Med 200 billeder har et resultat en begrænset præcision. For hovedresultaterne angiver vi et 95 %-interval (et Wilson-interval): 89,5 % af 200 billeder betyder, at den sande andel højst sandsynligt ligger mellem 84,5 % og 93,0 %.
De billeder, vi testede på
Vi begyndte med to åbne datasæt. Lexskis datasæt Sudoku Image Recognition (CC0) har 1.400 billeder, de fleste af dem skærmbilleder og fotos, som folk har delt online: apps i alle stilarter, mørke temaer, blyantsnotater, opgaver halvt løst på papir. Datasættet fra Baptiste Wicht og Jean Hennebert (CC BY 4.0) har avissudokuer fotograferet med telefoner, nogle af dem udfyldt i hånden med pen.
Før vi ændrede noget, lagde vi tre testsæt til side: 200 Lexski-billeder, 40 avisfotos og 40 avisopgaver udfyldt i hånden. Vi trænede ikke på dem og så ikke på dem, mens vi arbejdede. Hver beslutning blev truffet på 200 andre Lexski-billeder, justeringssættet, og testsættene blev læst én gang, til sidst.
Udgangspunktet
Den første version, fra 31. oktober, læste 101 af de 200 Lexski-billeder præcist, 34 af de 40 avisfotos og ingen af de 40 udfyldte opgaver. De fleste af dens problemer opstod før cifrene. Den tog den største nogenlunde kvadratiske blækform som spillepladen, og på et skærmbillede omfatter den form ofte en overskrift eller taltastaturet, mens de tynde grå linjer i et mørkt tema overses helt. På justeringssættet placerede den gitteret rigtigt kun 118 gange ud af 200.
Hvad vi ændrede, trin for trin
Hver række er én ændring, og tallet er, hvor mange af de 200 justeringsbilleder der derefter blev læst præcist. De sidste tre rækker hører til anden runde.
| Ændring | Justeringsbilleder læst præcist (af 200) |
|---|---|
| Første version, 31. oktober | 99 |
| Gitter fundet ud fra sine linjer: ti jævnt fordelte linjer i hver retning | 129 |
| Gitter vurderet side om side; en forskydning på ét felt afprøvet | 136 |
| Svage hårstreger brugt til at finde gitteret | 138 |
| Felter skåret ud i deres helhed; cifre lært fra rigtige felter | 161 |
| Et lille netværk kortlægger, hvor pladen er | 162 |
| Linjerne fulgt, hvor en side bøjer | 163 |
| Bedre ciffernetværk, blyantsnotater som egen klasse | 173 |
| Gennemsnit af tre ciffernetværk | 177 |
| Forsigtig regel om én løsning; færdige plader læst som helhed | 177 |
| Anden runde: fotos i fuld størrelse halveret før nedskalering | 178 |
| Anden runde: kort, svagt blæk behandlet som blyantsnotat | 179 |
| Anden runde: fotos på siden vurderet af alle tre netværk | 179 |
Det meste af fremgangen kom fra tre ændringer. Gitteret findes nu ud fra sine linjer: hvert bud på pladen flyttes hen på ti jævnt fordelte linjer i hver retning og vurderes side om side, og et lille netværk, der kortlægger, hvor en plade er, får en stemme. Hvert felt skæres ud i sin helhed, så et blyantsnotat forbliver lille i sit hjørne, og et lyst ciffer på en mørk flise ligner blæk på papir. Og ciffernetværkene lærte af rigtige felter skåret ud af Lexskis træningsbilleder, med blyantsnotater som deres egen klasse. Tre små netværk, trænet hver for sig, læser nu hvert felt, og der tages gennemsnit af deres svar, fordi de laver deres fejl på forskellige felter.
En færdig opgave får ekstra hjælp. Når en plade indeholder 79 cifre eller flere, leder læseren efter det mest sandsynlige komplette gitter, hvor hver række, kolonne og boks indeholder 1 til 9. Læst felt for felt blev kun 7 af de 40 håndskrevne testopgaver læst præcist; læst som færdig sudoku blev alle 40 det.
Anden runde tilføjede tre mindre ændringer. Et telefonfoto i fuld størrelse halveres trin for trin, før det skaleres ned, så tynde linjer og blyantsstreger indgår i gennemsnittet i stedet for at blive sprunget over. Et felt, hvis blæk både er meget kortere og meget svagere end pladens sikre cifre, behandles som et sandsynligt blyantsnotat. Og drejningen af et foto, der vender på siden, vurderes af alle tre netværk i stedet for ét.

Hvad der ikke hjalp
Følgende målte vi også på justeringssættet, og vi lod dem udgå:
- Et større ciffernetværk: 59.000 vægte i stedet for 42.000 læste ét justeringsbillede mere og kørte 3,8 gange langsommere i browseren.
- 3.000 genererede app-skærmbilleder med blyantsnotater og mørke temaer: samme resultat med eller uden dem.
- At læse farve i stedet for gråtoner, så en rød pen er lige så mørk som sort blæk: to justeringsbilleder mere, men håndskrift blev læst dårligere.
- At forvrænge træningscifrene, så de lignede håndskrift mere: håndskrift blev læst dårligere.
- At lade reglen om én løsning ændre flere felter: flere opgaver læst rigtigt, men også flere af de farlige forkerte opgaver med én løsning.
- At gentræne de tre netværk på nye data eller bruge fire eller seks af dem: inden for støjen, så de første blev.
- At behandle billedets kant som pladens kant, for plader beskåret af billedrammen: lige så mange billeder tabt som vundet.
Resultater på de første testsæt
Opgaver læst præcist i hvert testsæt, af den første version og af læseren, som den er nu:
| Testsæt | 31. oktober | Nu |
|---|---|---|
| Skærmbilleder og fotos delt online (Lexski)Billeder: 200 | 10150,5 % | 17989,5 % |
| Avisfotos (Wicht og Hennebert)Billeder: 40 | 3485,0 % | 40100,0 % |
| Avisopgaver udfyldt i hånden (Wicht og Hennebert)Billeder: 40 | 00,0 % | 40100,0 % |
På Lexski-billederne gik læseren fra 50,5 % til 89,5 % (84,5 % til 93,0 %), og opgaver læst forkert, men med én løsning, gik fra 7 til 4. I tre af de fire er det ene ekstra ciffer det ciffer, der hører til der, så opgaven fører stadig til den rigtige løsning; i den fjerde er det et tydeligt trykt 1-tal, som datasættet lader stå tomt. 177 af de 179 kom ved slutningen af første runde. De sidste to kom i anden runde, efter at vi havde undersøgt, hvad der slog fejl, så dette sæt er ikke længere urørt.
Fyrre ud af fyrre lyder perfekt, men 40 billeder kan kun vise, at den sande andel ligger over omkring 91 %. Og et tjek, vi burde have lavet først: fire af de 40 avisfotos i testsættet findes også i datasættets træningssæt, to af dem identiske pixel for pixel. Uden dem: 36 af 36.
En ny test: 200 fotos, som ingen version havde set
På det tidspunkt var de første testsæt blevet læst og deres fejl undersøgt, så de kunne ikke længere fortælle os, hvordan læseren klarer sig på billeder, den aldrig har mødt. Vi søgte på Hugging Face, Kaggle, GitHub, Zenodo, Figshare og AIcrowd efter flere annoterede sudokufotos. De fleste sæt var genererede plader, enkelte cifre eller kopier af Wichts fotos. Tre samlinger på GitHub havde rigtige annoterede fotos, alle af trykte opgaver: 100 fotos af en opslået sudokubog (NatalijaPetric/SudokuDataset), 80 fotos mest af aviser (mineshpatel1/sudoku-solver, efter at vi havde fjernet 49, der er Wichts egne fotos, og én kopi) og 20 trykte ark fra et kursusprojekt i computersyn ved Universitetet i Bukarest (danielsociu/SudokuRecognition).
Ingen af de tre angiver en licens, så vi brugte dem kun til at måle: aldrig til træning, og de vises ikke her. Listen over billeder blev fastlagt og gemt før enhver ændring, udvalgt efter en regel ud fra filernes hashværdier og annoteringer, og billederne blev ikke åbnet, før anden rundes sidste ændring var lavet. Derefter læste hver version af læseren dem én gang. Tabellen tæller de opgaver, der blev læst præcist.
| Kilde | 31. oktober | Første runde | Nu |
|---|---|---|---|
| En opslået sudokubog (NatalijaPetric)Fotos: 100 | 7979,0 % | 7676,0 % | 7878,0 % |
| Mest aviser (mineshpatel1)Fotos: 80 | 6581,3 % | 6885,0 % | 6986,3 % |
| Trykte ark (kursus ved Universitetet i Bukarest)Fotos: 20 | 20100,0 % | 20100,0 % | 20100,0 % |
| Alle 200Fotos: 200 | 16482,0 % | 16482,0 % | 16783,5 % |
På trykte opgaver, som læseren aldrig havde set, ændrede alt arbejdet i begge runder kun lidt. Den første version læste 82,0 % af dem præcist, den nuværende 83,5 % (77,7 % til 88,0 %): den vandt 14 opgaver og tabte 11. Det, der blev bedre, er felterne: 98,9 % læses rigtigt i stedet for 94,2 %, og gitteret findes i hvert eneste foto i stedet for i 195 af 200. Opgaver læst forkert, men med én løsning: 5 dengang, 6 nu.
Tabene har en klar årsag. For at kunne læse blyantsnotater og mørke temaer skæres hvert felt nu ud i sin helhed, og svagt blæk tæller med. På tyndt avispapir skinner bagsiden igennem, svagt og spejlvendt, og den nye læser læser disse skygger som cifre; den første version så kun på den største blækform i et felt og så dem aldrig. På buede bogsider kan pladens yderlinje eller en bokslinje falde inden i et felt og blive læst som et 1-tal.
To af de mislykkede aflæsninger er fejl i annoteringerne: fotoet viser et 3-tal og et 9-tal, hvor annoteringen siger 9 og 8, og et 4-tal, hvor den siger 2. Talt korrekt læser den nuværende læser 84,5 %.
Hvad der stadig går galt
Af de 200 nye fotos blev 33 ikke læst præcist. 22 er sider fra den opslåede sudokubog: nær ryggen buer siden mere, end læseren følger, så en linje ender inden i et felt og læses som et 1-tal, eller et hjørnefelt skæres hen over en linje. 7 er aviser, hvor bagsiden skinner igennem. Resten er et foto af en skærm med moiré, en pladekant læst som et 1-tal og de to fejl i annoteringerne.
Af de 200 Lexski-billeder blev 21 ikke læst præcist: blyantsnotater læst som cifre, herunder udvisket blyant, der efterlod svage cifre (7); ét ekstra ciffer, oftest et enkeltstående blyantsnotat læst som en indtastning (5); gitteret det forkerte sted eller ikke fundet, i app-temaer uden linjer mellem felterne eller med et håndtegnet gitter (5); og usædvanlige fliser og farver (4).
Hvorfor ikke 97 %, og hvad der kommer nu
Alt kører i din browser: en model på 224 KB og omkring 850 linjer JavaScript, en median på omkring 300 millisekunder pr. foto på en bærbar computer og omkring 1,2 sekunder med processoren gjort fire gange langsommere, som på en langsom telefon. Et større netværk hjalp ikke inden for det budget. Tilbage er en lang hale: buede sider, gennemskinnende bagsider, blyantsnotater og usædvanlige app-stilarter. Alle offentlige annoterede sæt, vi fandt, er nu brugt eller set, så næste runde kræver fotos, som vi selv tager og annoterer, med problemerne med svagt blæk og buede sider rettet og målt på dem.
Sådan får du den bedste scanning
- Hold telefonen lige over opgaven med hele gitteret i billedet.
- Glat en bog eller en avis ud: buede sider står for de fleste fejllæsninger på trykte opgaver.
- På tyndt avispapir: læg et blankt ark papir bag siden, så bagsiden ikke skinner igennem.
- Scan, før du skriver blyantsnotater i opgaven.
- Før du løser, så sammenlign de felter, som løseren markerer, med din opgave.
Data og kilder
- Lexski, Sudoku Image Recognition (Hugging Face), CC0 1.0
- Wicht, B. and Hennebert, J., Sudoku dataset (GitHub), CC BY 4.0; "Camera-based Sudoku recognition with deep belief network", SoCPaR 2014
- NatalijaPetric, SudokuDataset (GitHub), ingen licens angivet, kun brugt til måling
- mineshpatel1, sudoku-solver (GitHub), ingen licens angivet, kun brugt til måling
- danielsociu, SudokuRecognition (GitHub), University of Bucharest course project, ingen licens angivet, kun brugt til måling
- Sådan læser løseren et billede, trin for trin (English)