O que aprendemos ao medir nosso leitor de fotos de Sudoku
Atualizado em 5 de novembro de 2026
O que conta como leitura correta
Um quebra-cabeça só é lido corretamente se todas as 81 células estiverem certas: um único dígito errado resulta em outro quebra-cabeça. Por isso contamos quebra-cabeças inteiros, não células. As duas medidas podem contar histórias muito diferentes, como mostra esta página: em fotos de quebra-cabeças impressos, o leitor agora acerta 98,9% das células, mas a parcela de quebra-cabeças inteiros quase não se mexeu, porque a maioria das células erradas está em poucas imagens difíceis.
Também contamos o erro mais perigoso: um quebra-cabeça lido errado que ainda tem exatamente uma solução. Um Sudoku de verdade tem uma única solução, então uma leitura sem nenhuma ou com várias é detectada na hora. Um quebra-cabeça errado com uma única solução parece normal, e é por isso que o solucionador marca cada célula de que não tinha certeza e pede que você as compare com o seu quebra-cabeça antes de resolver.
Com 200 imagens, a precisão de um resultado tem limites. Para os resultados principais, damos um intervalo de 95% (um intervalo de Wilson): 89,5% de 200 imagens significa que o mais provável é que a taxa real esteja entre 84,5% e 93,0%.
As imagens que usamos nos testes
Começamos com dois conjuntos de dados abertos. O conjunto Sudoku Image Recognition, de Lexski (CC0), tem 1.400 imagens, a maioria capturas de tela e fotos que pessoas compartilharam on-line: apps de todos os estilos, temas escuros, anotações a lápis, quebra-cabeças resolvidos pela metade no papel. O conjunto de dados de Baptiste Wicht e Jean Hennebert (CC BY 4.0) tem Sudokus de jornal fotografados com celulares, alguns deles terminados à mão a caneta.
Antes de mudar qualquer coisa, separamos três conjuntos de teste: 200 imagens de Lexski, 40 fotos de jornal e 40 quebra-cabeças de jornal terminados à mão. Não treinamos com eles nem olhamos para eles durante o trabalho. Todas as decisões foram tomadas com outras 200 imagens de Lexski, o conjunto de ajuste, e os conjuntos de teste foram lidos uma única vez, no final.
Onde tudo começou
A primeira versão, de 31 de outubro, leu com exatidão 101 das 200 imagens de Lexski, 34 das 40 fotos de jornal e nenhum dos 40 quebra-cabeças terminados. A maior parte dos seus problemas vinha antes dos dígitos. Ela tomava como tabuleiro a maior forma de tinta mais ou menos quadrada, e numa captura de tela essa forma muitas vezes abrange um cabeçalho ou o teclado numérico, enquanto as linhas cinza finas de um tema escuro passam totalmente despercebidas. No conjunto de ajuste, ela situou a grade no lugar certo apenas 118 vezes em 200.
O que mudamos, passo a passo
Cada linha é uma mudança, e o número indica quantas das 200 imagens de ajuste passaram então a ser lidas com exatidão. As três últimas linhas são da segunda rodada.
| Mudança | Imagens de ajuste lidas com exatidão (de 200) |
|---|---|
| Primeira versão, 31 de outubro | 99 |
| Grade encontrada pelas linhas: dez linhas igualmente espaçadas em cada direção | 129 |
| Grade avaliada lado a lado; testado um deslocamento de uma célula | 136 |
| Linhas finíssimas e fracas usadas para encontrar a grade | 138 |
| Células recortadas inteiras; dígitos aprendidos de células reais | 161 |
| Uma pequena rede mapeia onde está o tabuleiro | 162 |
| Linhas acompanhadas onde a página se curva | 163 |
| Rede de dígitos melhor, anotações a lápis como classe própria | 173 |
| Média de três redes de dígitos | 177 |
| Regra cuidadosa da solução única; tabuleiros terminados lidos como um todo | 177 |
| Segunda rodada: fotos em tamanho original reduzidas à metade antes de encolher | 178 |
| Segunda rodada: tinta curta e fraca tratada como anotação a lápis | 179 |
| Segunda rodada: fotos de lado avaliadas pelas três redes | 179 |
A maior parte do ganho veio de três mudanças. A grade agora é encontrada pelas suas linhas: cada hipótese de tabuleiro é encaixada em dez linhas igualmente espaçadas em cada direção e avaliada lado a lado com as outras, e uma pequena rede que mapeia onde está o tabuleiro também tem direito a voto. Cada célula é recortada inteira, de modo que uma anotação a lápis continua pequena no seu canto e um dígito claro numa célula escura parece tinta no papel. E as redes de dígitos aprenderam com células reais recortadas das imagens de treino de Lexski, com as anotações a lápis como uma classe própria. Três pequenas redes, treinadas separadamente, agora leem cada célula, e é feita a média das suas respostas, porque elas erram em células diferentes.
Um quebra-cabeça terminado recebe ajuda extra. Quando um tabuleiro tem 79 dígitos ou mais, o leitor procura a grade completa mais provável em que cada linha, coluna e bloco contenha os números de 1 a 9. Lidos célula por célula, apenas 7 dos 40 quebra-cabeças de teste escritos à mão saíram exatos; lidos como Sudokus terminados, saíram todos os 40.
A segunda rodada acrescentou três mudanças menores. Uma foto de celular em tamanho original é reduzida à metade, passo a passo, antes de ser encolhida, para que linhas finas e traços de lápis entrem na média em vez de serem pulados. Uma célula cuja tinta é ao mesmo tempo muito mais curta e muito mais fraca do que a dos dígitos seguros do tabuleiro é tratada como provável anotação a lápis. E a rotação de uma foto tirada de lado é avaliada pelas três redes, e não por uma só.

O que não ajudou
Também medimos estas mudanças no conjunto de ajuste, e as deixamos de fora:
- Uma rede de dígitos maior: 59.000 pesos em vez de 42.000 leram uma imagem de ajuste a mais e rodaram 3,8 vezes mais devagar no navegador.
- 3.000 capturas de tela de apps geradas por nós, com anotações a lápis e temas escuros: a mesma pontuação com ou sem elas.
- Ler em cores em vez de tons de cinza, para que uma caneta vermelha fique tão escura quanto tinta preta: duas imagens de ajuste a mais, mas a escrita à mão passou a ser lida pior.
- Distorcer os dígitos de treino para que parecessem mais com escrita à mão: a escrita à mão passou a ser lida pior.
- Deixar a regra da solução única alterar mais células: mais quebra-cabeças lidos corretamente, mas também mais dos perigosos quebra-cabeças errados com uma única solução.
- Treinar de novo as três redes com dados novos, ou usar quatro ou seis delas: dentro do ruído, então as primeiras ficaram.
- Tratar a borda da imagem como a borda do tabuleiro, para tabuleiros cortados pelo enquadramento: tantas imagens perdidas quanto ganhas.
Resultados nos primeiros conjuntos de teste
Quebra-cabeças lidos com exatidão em cada conjunto de teste, pela primeira versão e pelo leitor como está hoje:
| Conjunto de teste | 31 de outubro | Agora |
|---|---|---|
| Capturas de tela e fotos compartilhadas on-line (Lexski)Imagens: 200 | 10150,5% | 17989,5% |
| Fotos de jornal (Wicht e Hennebert)Imagens: 40 | 3485,0% | 40100,0% |
| Quebra-cabeças de jornal terminados à mão (Wicht e Hennebert)Imagens: 40 | 00,0% | 40100,0% |
Nas imagens de Lexski, o leitor foi de 50,5% para 89,5% (84,5% a 93,0%), e os quebra-cabeças lidos errados mas com uma única solução caíram de 7 para 4. Em três desses quatro, o único dígito a mais é o dígito que pertence àquela célula, então o quebra-cabeça ainda leva à solução certa; o quarto é um 1 claramente impresso que o conjunto de dados deixa vazio. Dos 179, 177 vieram ao final da primeira rodada. Os dois últimos vieram na segunda rodada, depois de estudarmos o que falhou, então este conjunto já não está intocado.
Quarenta de quarenta parece perfeito, mas 40 imagens só conseguem mostrar que a taxa real está acima de cerca de 91%. E uma verificação que deveríamos ter feito primeiro: quatro das 40 fotos de jornal de teste também estão na parte de treino desse conjunto de dados, duas delas idênticas pixel a pixel. Sem elas, 36 de 36.
Um novo teste: 200 fotos que nenhuma versão tinha visto
Àquela altura, os primeiros conjuntos de teste já tinham sido lidos e suas falhas estudadas, então não podiam mais nos dizer como o leitor se sai em imagens que nunca viu. Procuramos mais fotos de Sudoku rotuladas no Hugging Face, no Kaggle, no GitHub, no Zenodo, no Figshare e no AIcrowd. A maioria dos conjuntos era de tabuleiros gerados, dígitos isolados ou cópias das fotos de Wicht. Três coleções do GitHub tinham fotos reais rotuladas, todas de quebra-cabeças impressos: 100 fotos de um livro de quebra-cabeças aberto (NatalijaPetric/SudokuDataset), 80 fotos, na maioria de jornais (mineshpatel1/sudoku-solver, depois de retirar 49 que são fotos do próprio Wicht e uma cópia), e 20 folhas impressas de um projeto de um curso de visão computacional da Universidade de Bucareste (danielsociu/SudokuRecognition).
Nenhum dos três informa uma licença, então os usamos apenas para medir: nunca para treinar, e eles não são mostrados aqui. A lista de imagens foi fixada e salva antes de qualquer mudança, escolhida por regra a partir de hashes e rótulos dos arquivos, e as imagens só foram abertas depois da última mudança da segunda rodada. Então cada versão do leitor as leu uma vez. A tabela conta os quebra-cabeças lidos com exatidão.
| Fonte | 31 de outubro | Primeira rodada | Agora |
|---|---|---|---|
| Um livro de quebra-cabeças aberto (NatalijaPetric)Fotos: 100 | 7979,0% | 7676,0% | 7878,0% |
| Na maioria jornais (mineshpatel1)Fotos: 80 | 6581,3% | 6885,0% | 6986,3% |
| Folhas impressas (curso da Universidade de Bucareste)Fotos: 20 | 20100,0% | 20100,0% | 20100,0% |
| Todas as 200Fotos: 200 | 16482,0% | 16482,0% | 16783,5% |
Em quebra-cabeças impressos que o leitor nunca tinha visto, todo o trabalho das duas rodadas mudou pouco. A primeira versão leu 82,0% deles com exatidão; a atual, 83,5% (77,7% a 88,0%): ganhou 14 quebra-cabeças e perdeu 11. O que de fato melhorou foram as células: 98,9% são lidas corretamente, em vez de 94,2%, e a grade é encontrada em todas as fotos, em vez de em 195 de 200. Quebra-cabeças lidos errados mas com uma única solução: 5 antes, 6 agora.
As perdas têm uma causa clara. Para ler anotações a lápis e temas escuros, cada célula agora é recortada inteira e a tinta fraca conta. Em jornal fino, o verso da página aparece por transparência, fraco e espelhado, e o novo leitor lê essas sombras como dígitos; a primeira versão olhava apenas para a maior forma de tinta numa célula e nunca as via. Em páginas de livro curvadas, a linha externa do tabuleiro ou uma linha de bloco pode cair dentro de uma célula e ser lida como um 1.
Duas das falhas são erros nos rótulos: a foto mostra um 3 e um 9 onde o rótulo diz 9 e 8, e um 4 onde diz 2. Contados corretamente, o leitor atual lê 84,5%.
O que ainda dá errado
Das 200 fotos novas, 33 não foram lidas com exatidão. Delas, 22 são páginas do livro de quebra-cabeças aberto: perto da lombada, a página se curva mais do que o leitor consegue acompanhar, então uma linha acaba dentro de uma célula e é lida como um 1, ou uma célula do canto é recortada atravessando uma linha. Outras 7 são jornais com o verso da página aparecendo por transparência. O restante são uma foto de uma tela com efeito moiré, uma borda de tabuleiro lida como um 1 e os dois erros de rótulo.
Das 200 imagens de Lexski, 21 não foram lidas com exatidão: anotações a lápis lidas como dígitos, incluindo lápis apagado que deixou dígitos fracos para trás (7); um dígito a mais, na maioria das vezes uma anotação a lápis isolada lida como número preenchido (5); a grade no lugar errado ou não encontrada, em temas de app sem linhas entre as células ou com grade desenhada à mão (5); e estilos de célula e cores incomuns (4).
Por que não 97%, e o que vem a seguir
Tudo roda no seu navegador: um modelo de 224 KB e cerca de 850 linhas de JavaScript, uma mediana de cerca de 300 milissegundos por foto num notebook e cerca de 1,2 segundo com o processador desacelerado quatro vezes, como num celular lento. Uma rede maior não ajudou dentro desse orçamento. O que resta é uma cauda longa: páginas curvadas, transparência do verso, anotações a lápis e estilos incomuns de app. Todos os conjuntos públicos rotulados que encontramos já foram usados ou vistos, então a próxima rodada precisa de fotos que nós mesmos tiremos e rotulemos, com os problemas de tinta fraca e de páginas curvadas corrigidos e medidos nelas.
Para escanear melhor
- Segure o celular reto, logo acima do quebra-cabeça, com a grade inteira no enquadramento.
- Deixe o livro ou o jornal plano: páginas curvadas causam a maioria das falhas em quebra-cabeças impressos.
- Em jornal fino, coloque uma folha de papel em branco atrás da página para que o outro lado não apareça por transparência.
- Escaneie antes de escrever anotações a lápis no quebra-cabeça.
- Antes de resolver, compare as células que o solucionador marca com o seu quebra-cabeça.
Dados e fontes
- 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), sem licença declarada, usado apenas para medir
- mineshpatel1, sudoku-solver (GitHub), sem licença declarada, usado apenas para medir
- danielsociu, SudokuRecognition (GitHub), University of Bucharest course project, sem licença declarada, usado apenas para medir
- Como o solucionador lê uma foto, passo a passo (English)