Apa yang kami pelajari saat mengukur pembaca foto Sudoku kami
Diperbarui 5 November 2026
Apa yang dihitung sebagai terbaca benar
Sebuah teka-teki terbaca benar hanya jika ke-81 selnya benar: satu angka yang salah menghasilkan teka-teki yang berbeda. Karena itu kami menghitung teka-teki utuh, bukan sel. Keduanya bisa menceritakan kisah yang sangat berbeda, seperti yang ditunjukkan halaman ini: pada foto teka-teki cetak, pembaca kini membaca 98,9% sel dengan benar, tetapi proporsi teka-teki utuh nyaris tidak bergeser, karena sebagian besar sel yang salah berada di segelintir gambar yang sulit.
Kami juga menghitung kesalahan yang paling berbahaya: teka-teki yang terbaca salah tetapi tetap memiliki tepat satu jawaban. Sudoku yang sebenarnya memiliki satu jawaban, sehingga hasil baca yang tidak memiliki jawaban atau memiliki banyak jawaban langsung ketahuan. Teka-teki salah dengan satu jawaban tampak baik-baik saja, itulah sebabnya pemecah menandai setiap sel yang diragukannya dan meminta Anda membandingkannya dengan teka-teki Anda sebelum menyelesaikannya.
Dengan 200 gambar, ketepatan sebuah hasil ada batasnya. Untuk hasil utama kami memberikan rentang 95% (interval Wilson): 89,5% dari 200 gambar berarti tingkat yang sebenarnya kemungkinan besar berada antara 84,5% dan 93,0%.
Gambar yang kami gunakan untuk menguji
Kami memulai dengan dua dataset terbuka. Dataset Sudoku Image Recognition milik Lexski (CC0) berisi 1.400 gambar, sebagian besar berupa tangkapan layar dan foto yang dibagikan orang secara daring: aplikasi dengan segala gaya, tema gelap, tanda pensil, teka-teki yang setengah diselesaikan di kertas. Dataset Baptiste Wicht dan Jean Hennebert (CC BY 4.0) berisi Sudoku koran yang difoto dengan ponsel, sebagian di antaranya diselesaikan dengan tangan menggunakan pena.
Sebelum mengubah apa pun, kami menyisihkan tiga set uji: 200 gambar Lexski, 40 foto koran, dan 40 teka-teki koran yang diselesaikan dengan tangan. Kami tidak menggunakannya untuk pelatihan dan tidak melihatnya selama bekerja. Setiap keputusan dibuat berdasarkan 200 gambar Lexski lainnya, yaitu set penyetelan, dan set uji dibaca sekali saja, di akhir.
Titik awal
Versi pertama, dari 31 Oktober, membaca dengan tepat 101 dari 200 gambar Lexski, 34 dari 40 foto koran, dan tidak satu pun dari 40 teka-teki yang sudah selesai. Sebagian besar masalahnya muncul sebelum tahap angka. Versi itu menganggap bentuk tinta terbesar yang kira-kira persegi sebagai papan, dan pada tangkapan layar bentuk itu sering ikut mencakup bilah atas atau pad angka, sementara garis abu-abu tipis pada tema gelap sama sekali terlewat. Pada set penyetelan, versi itu menempatkan kisi di posisi yang benar hanya 118 kali dari 200.
Apa yang kami ubah, langkah demi langkah
Setiap baris adalah satu perubahan, dan angkanya menunjukkan berapa banyak dari 200 gambar penyetelan yang kemudian terbaca dengan tepat. Tiga baris terakhir adalah putaran kedua.
| Perubahan | Gambar penyetelan yang terbaca tepat (dari 200) |
|---|---|
| Versi pertama, 31 Oktober | 99 |
| Kisi ditemukan melalui garisnya: sepuluh garis berjarak sama di tiap arah | 129 |
| Kisi dinilai berdampingan; pergeseran satu sel dicoba | 136 |
| Garis rambut samar dipakai untuk menemukan kisi | 138 |
| Sel dipotong utuh; angka dipelajari dari sel asli | 161 |
| Jaringan kecil memetakan letak papan | 162 |
| Garis diikuti di bagian halaman yang melengkung | 163 |
| Jaringan angka yang lebih baik, tanda pensil sebagai kelas tersendiri | 173 |
| Tiga jaringan angka dirata-ratakan | 177 |
| Aturan satu jawaban yang hati-hati; papan selesai dibaca secara utuh | 177 |
| Putaran kedua: foto ukuran penuh dibagi dua sebelum diperkecil | 178 |
| Putaran kedua: tinta pendek dan samar dianggap tanda pensil | 179 |
| Putaran kedua: foto menyamping dinilai oleh ketiga jaringan | 179 |
Sebagian besar peningkatan berasal dari tiga perubahan. Kisi kini ditemukan melalui garis-garisnya: setiap tebakan tentang letak papan digeser ke sepuluh garis berjarak sama di setiap arah lalu dinilai berdampingan, dan sebuah jaringan kecil yang memetakan letak papan ikut memberikan suara. Setiap sel dipotong utuh, sehingga tanda pensil tetap kecil di sudutnya dan angka terang di atas petak gelap tampak seperti tinta di atas kertas. Selain itu, jaringan angka belajar dari sel asli yang dipotong dari gambar pelatihan Lexski, dengan tanda pensil sebagai kelas tersendiri. Tiga jaringan kecil, yang dilatih secara terpisah, kini membaca setiap sel dan jawabannya dirata-ratakan, karena ketiganya membuat kesalahan pada sel yang berbeda.
Teka-teki yang sudah selesai mendapat bantuan tambahan. Jika sebuah papan berisi 79 angka atau lebih, pembaca mencari kisi lengkap yang paling mungkin, yang setiap baris, kolom, dan kotaknya berisi 1 sampai 9. Jika dibaca sel demi sel, hanya 7 dari 40 teka-teki uji tulisan tangan yang terbaca dengan tepat; jika dibaca sebagai Sudoku yang sudah selesai, ke-40-nya terbaca tepat.
Putaran kedua menambahkan tiga perubahan yang lebih kecil. Ukuran foto ponsel berukuran penuh dibagi dua langkah demi langkah sebelum diperkecil, sehingga garis tipis dan goresan pensil ikut dirata-ratakan alih-alih terlewati. Sel yang tintanya jauh lebih pendek sekaligus jauh lebih samar daripada angka-angka pasti di papan diperlakukan sebagai kemungkinan tanda pensil. Dan arah putar foto yang menyamping dinilai oleh ketiga jaringan, bukan hanya satu.

Yang tidak membantu
Kami juga mengukur hal-hal berikut pada set penyetelan, lalu tidak menggunakannya:
- Jaringan angka yang lebih besar: 59.000 bobot alih-alih 42.000 membaca satu gambar penyetelan lebih banyak dan berjalan 3,8 kali lebih lambat di peramban.
- 3.000 tangkapan layar aplikasi yang dibuat secara otomatis, dengan tanda pensil dan tema gelap: skornya sama, dengan atau tanpa itu.
- Membaca warna alih-alih skala abu-abu, sehingga pena merah tampak segelap tinta hitam: dua gambar penyetelan lebih banyak, tetapi tulisan tangan terbaca lebih buruk.
- Mendistorsi angka pelatihan agar lebih mirip tulisan tangan: tulisan tangan terbaca lebih buruk.
- Membiarkan aturan satu jawaban mengubah lebih banyak sel: lebih banyak teka-teki terbaca benar, tetapi juga lebih banyak teka-teki salah yang berbahaya dengan satu jawaban.
- Melatih ulang ketiga jaringan dengan data baru, atau menggunakan empat atau enam jaringan: masih dalam batas derau, jadi jaringan yang pertama dipertahankan.
- Menganggap tepi gambar sebagai tepi papan, untuk papan yang terpotong bingkai: gambar yang hilang sama banyaknya dengan yang didapat.
Hasil pada set uji pertama
Teka-teki yang terbaca dengan tepat di setiap set uji, oleh versi pertama dan oleh pembaca dalam bentuknya sekarang:
| Set uji | 31 Oktober | Sekarang |
|---|---|---|
| Tangkapan layar dan foto yang dibagikan daring (Lexski)Gambar: 200 | 10150,5% | 17989,5% |
| Foto koran (Wicht dan Hennebert)Gambar: 40 | 3485,0% | 40100,0% |
| Teka-teki koran yang diselesaikan dengan tangan (Wicht dan Hennebert)Gambar: 40 | 00,0% | 40100,0% |
Pada gambar Lexski, pembaca naik dari 50,5% menjadi 89,5% (84,5% hingga 93,0%), dan teka-teki yang terbaca salah tetapi memiliki satu jawaban turun dari 7 menjadi 4. Pada tiga dari empat kasus itu, satu angka tambahan tersebut memang angka yang seharusnya ada di sana, sehingga teka-teki tetap mengarah ke solusi yang benar; kasus keempat adalah angka 1 tercetak jelas yang dibiarkan kosong oleh dataset. Sebanyak 177 dari 179 diperoleh pada akhir putaran pertama. Dua sisanya diperoleh pada putaran kedua, setelah kami mempelajari apa yang gagal, sehingga set ini sudah tidak lagi tak tersentuh.
Empat puluh dari empat puluh terdengar sempurna, tetapi 40 gambar hanya dapat menunjukkan bahwa tingkat sebenarnya berada di atas sekitar 91%. Lalu satu pemeriksaan yang seharusnya kami lakukan lebih dulu: empat dari 40 foto koran uji juga ada di set pelatihan dataset tersebut, dua di antaranya identik piksel demi piksel. Tanpa keempatnya, 36 dari 36.
Uji baru: 200 foto yang belum pernah dilihat versi mana pun
Saat itu set uji pertama sudah dibaca dan kegagalannya sudah dipelajari, sehingga set tersebut tidak lagi dapat memberi tahu kami bagaimana kinerja pembaca pada gambar yang belum pernah dijumpainya. Kami mencari lebih banyak foto Sudoku berlabel di Hugging Face, Kaggle, GitHub, Zenodo, Figshare, dan AIcrowd. Sebagian besar set berisi papan yang dibuat secara otomatis, angka tunggal, atau salinan foto Wicht. Tiga koleksi GitHub memiliki foto asli berlabel, semuanya teka-teki cetak: 100 foto dari sebuah buku teka-teki terbuka (NatalijaPetric/SudokuDataset), 80 foto yang sebagian besar berupa koran (mineshpatel1/sudoku-solver, setelah membuang 49 foto yang merupakan foto milik Wicht sendiri dan satu salinan), serta 20 lembar cetak dari proyek mata kuliah visi komputer di Universitas Bukares (danielsociu/SudokuRecognition).
Tidak satu pun dari ketiganya mencantumkan lisensi, jadi kami hanya menggunakannya untuk mengukur: tidak pernah untuk pelatihan, dan gambar-gambarnya tidak ditampilkan di sini. Daftar gambar ditetapkan dan disimpan sebelum perubahan apa pun, dipilih menurut aturan berdasarkan hash berkas dan label, dan gambar-gambar itu tidak dibuka hingga perubahan terakhir putaran kedua. Setelah itu setiap versi pembaca membacanya sekali. Tabel menghitung teka-teki yang terbaca dengan tepat.
| Sumber | 31 Oktober | Putaran pertama | Sekarang |
|---|---|---|---|
| Buku teka-teki terbuka (NatalijaPetric)Foto: 100 | 7979,0% | 7676,0% | 7878,0% |
| Sebagian besar koran (mineshpatel1)Foto: 80 | 6581,3% | 6885,0% | 6986,3% |
| Lembar cetak (mata kuliah Universitas Bukares)Foto: 20 | 20100,0% | 20100,0% | 20100,0% |
| Seluruh 200Foto: 200 | 16482,0% | 16482,0% | 16783,5% |
Pada teka-teki cetak yang belum pernah dilihat pembaca, seluruh kerja kedua putaran hanya membawa sedikit perubahan. Versi pertama membaca 82,0% di antaranya dengan tepat, versi sekarang 83,5% (77,7% hingga 88,0%): versi ini mendapatkan 14 teka-teki dan kehilangan 11. Yang benar-benar membaik adalah selnya: 98,9% terbaca benar, dibanding 94,2% sebelumnya, dan kisi ditemukan di setiap foto, bukan hanya di 195 dari 200. Teka-teki yang terbaca salah tetapi memiliki satu jawaban: 5 dulu, 6 sekarang.
Kehilangan itu memiliki penyebab yang jelas. Untuk membaca tanda pensil dan tema gelap, setiap sel kini dipotong utuh dan tinta samar ikut dihitung. Pada kertas koran yang tipis, halaman sebaliknya tembus terlihat, samar dan terbalik seperti cermin, dan pembaca baru membaca bayangan itu sebagai angka; versi pertama hanya melihat bentuk tinta terbesar dalam sebuah sel dan tidak pernah melihatnya. Pada halaman buku yang melengkung, garis luar papan atau garis kotak dapat jatuh di dalam sebuah sel dan terbaca sebagai angka 1.
Dua dari kegagalan itu adalah kesalahan pada label: foto menunjukkan angka 3 dan 9 di tempat label menyebut 9 dan 8, serta angka 4 di tempat label menyebut 2. Jika dihitung dengan benar, pembaca saat ini membaca 84,5%.
Yang masih salah
Dari 200 foto baru, 33 tidak terbaca dengan tepat. Sebanyak 22 adalah halaman buku teka-teki terbuka itu: di dekat punggung buku, halaman melengkung lebih jauh daripada yang diikuti pembaca, sehingga sebuah garis berakhir di dalam sel dan terbaca sebagai angka 1, atau sel sudut terpotong melintang pada sebuah garis. Sebanyak 7 adalah koran dengan halaman sebaliknya tembus terlihat. Sisanya adalah foto layar dengan efek moiré, tepi papan yang terbaca sebagai angka 1, dan dua kesalahan label itu.
Dari 200 gambar Lexski, 21 tidak terbaca dengan tepat: tanda pensil yang terbaca sebagai angka, termasuk pensil yang sudah dihapus tetapi meninggalkan angka samar (7); satu angka tambahan, sebagian besar berupa satu tanda pensil tunggal yang terbaca sebagai isian (5); kisi di tempat yang salah atau tidak ditemukan, pada tema aplikasi tanpa garis antarsel atau kisi yang digambar tangan (5); serta petak dan warna yang tidak biasa (4).
Mengapa bukan 97%, dan apa selanjutnya
Semuanya berjalan di peramban Anda: model berukuran 224 KB dan sekitar 850 baris JavaScript, dengan median sekitar 300 milidetik per foto di laptop, dan sekitar 1,2 detik dengan prosesor diperlambat empat kali, seperti pada ponsel yang lambat. Jaringan yang lebih besar tidak membantu dalam batas anggaran tersebut. Yang tersisa adalah ekor panjang: halaman melengkung, tembusan halaman sebaliknya, tanda pensil, dan gaya aplikasi yang tidak biasa. Setiap set berlabel publik yang kami temukan kini sudah dipakai atau sudah dilihat, jadi putaran berikutnya membutuhkan foto yang kami ambil dan beri label sendiri, dengan masalah tinta samar dan halaman melengkung diperbaiki dan diukur pada foto-foto tersebut.
Untuk pemindaian terbaik
- Pegang ponsel tegak lurus di atas teka-teki, dengan seluruh kisi berada di dalam bingkai.
- Ratakan buku atau koran: halaman yang melengkung menyebabkan sebagian besar kegagalan pada teka-teki cetak.
- Pada kertas koran yang tipis, letakkan selembar kertas polos di belakang halaman agar sisi sebaliknya tidak tembus terlihat.
- Pindai sebelum Anda menulis tanda pensil di teka-teki.
- Sebelum menyelesaikan, bandingkan sel yang ditandai pemecah dengan teka-teki Anda.
Data dan sumber
- 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), tanpa keterangan lisensi, hanya digunakan untuk pengukuran
- mineshpatel1, sudoku-solver (GitHub), tanpa keterangan lisensi, hanya digunakan untuk pengukuran
- danielsociu, SudokuRecognition (GitHub), University of Bucharest course project, tanpa keterangan lisensi, hanya digunakan untuk pengukuran
- Cara pemecah membaca foto, langkah demi langkah (English)