Sudoku Flow

数独の写真リーダーを測定してわかったこと

2026年11月5日更新

何をもって「正しく読めた」とするか

81マスすべてが正しいときにだけ、パズルを正しく読めたとみなす。数字を1つでも誤れば別のパズルになるからだ。そのため、マス単位ではなくパズル単位で数える。このページで示すとおり、この2つはまったく異なる結果を示しうる。印刷パズルの写真では、リーダーは現在マスの98.9%を正しく読めるが、パズル全体の正解率はほとんど変わらなかった。誤ったマスの大半が、少数の難しい写真に集中しているためである。

最も危険な誤りも数えている。誤って読んだのに、解がちょうど1つになってしまうパズルである。本物の数独は解が1つなので、解がない読み取りや解が複数ある読み取りはすぐに見つかる。しかし、解が1つの誤ったパズルは一見問題がないように見える。そのためソルバーは、確信が持てなかったマスすべてに印を付け、解く前に手元のパズルと見比べるよう求める。

200枚の画像から得られる結果の精度には限りがある。主な結果には95%の範囲(Wilsonの信頼区間)を示す。200枚中89.5%という結果は、真の割合が84.5%から93.0%のあいだにある可能性が高いことを意味する。

テストに使った画像

まず2つの公開データセットから始めた。LexskiのSudoku Image Recognitionデータセット(CC0)には1,400枚の画像があり、その大半はネット上で共有されたスクリーンショットや写真である。あらゆるスタイルのアプリ、ダークテーマ、鉛筆メモ、紙の上で途中まで解かれたパズルなどが含まれる。バティスト・ヴィヒト(Baptiste Wicht)とジャン・エヌベール(Jean Hennebert)のデータセット(CC BY 4.0)には、スマートフォンで撮影した新聞の数独が収められており、その一部はペンで手書きで解き終えられている。

何も変更しないうちに、3つのテストセットを取り分けておいた。Lexskiの画像200枚、新聞写真40枚、手書きで解き終えた新聞パズル40問である。作業中は、これらで学習させることも、中身を見ることもしなかった。すべての判断は別のLexski画像200枚(調整用セット)に基づいて行い、テストセットは最後に一度だけ読み取らせた。

出発点

10月31日の最初のバージョンは、Lexskiの画像200枚のうち101枚、新聞写真40枚のうち34枚を完全に読み取ったが、解き終えたパズル40問は1問も読めなかった。問題の大半は、数字を読む前の段階にあった。最初のバージョンは、インクでできた正方形に近い形のうち最大のものを盤面とみなしていた。スクリーンショットではその形にヘッダーや数字パッドまで含まれてしまうことが多く、ダークテーマの細い灰色の線はまったく見落とされていた。調整用セットでは、グリッドを正しい位置で捉えられたのは200枚中118枚だけだった。

変更点を順に

表の各行が1つの変更を表し、数値はその変更後に調整用の画像200枚のうち何枚を完全に読み取れたかを示す。最後の3行は2回目のラウンドである。

変更完全に読み取れた調整用画像(200枚中)
最初のバージョン(10月31日)99
線からグリッドを検出:縦横各10本の等間隔の線129
グリッド候補を並べて比較、1マス分のずれも試行136
薄い細線もグリッド検出に利用138
マスを丸ごと切り出し、実際のマスから数字を学習161
小さなネットワークで盤面の位置を推定162
ページが曲がっている箇所でも線を追跡163
数字認識ネットワークを改良、鉛筆メモを独立したクラスに173
3つの数字認識ネットワークを平均177
解が1つという規則を慎重に適用、解き終えた盤面は全体として読み取り177
2回目:フルサイズの写真を縮小前に半分ずつ縮める178
2回目:短く薄いインクを鉛筆メモとして扱う179
2回目:横向きの写真を3つのネットワークすべてで判定179

改善の大部分は3つの変更によるものだった。第一に、グリッドを線から見つけるようにした。盤面の位置の候補はそれぞれ、縦横各10本の等間隔の線に合わせ込まれ、互いに並べて比較される。さらに、盤面の位置を描き出す小さなネットワークも1票を持つ。第二に、各マスを丸ごと切り出すようにした。これにより鉛筆メモは隅で小さいまま残り、暗いタイル上の明るい数字は紙の上のインクのように見える。第三に、数字認識ネットワークは、Lexskiの学習用画像から切り出した実際のマスで学習し、鉛筆メモを独立したクラスとして扱うようになった。現在は、別々に学習させた3つの小さなネットワークが各マスを読み取り、その答えを平均している。3つのネットワークは、それぞれ異なるマスで誤るからである。

解き終えたパズルには、さらに手助けがある。盤面に数字が79個以上あるとき、リーダーは、すべての行、列、ブロックに1から9が入る完全なグリッドのうち、最も可能性の高いものを探す。マスごとに読み取った場合、手書きのテスト用パズル40問のうち完全に読めたのは7問だけだったが、解き終えた数独として読み取ると40問すべてが完全に読めた。

2回目のラウンドでは、より小さな変更を3つ加えた。フルサイズのスマートフォン写真は、縮小する前に段階的に半分ずつ縮めるようにした。これにより、細い線や鉛筆の筆跡が飛ばされずに平均として取り込まれる。インクが盤面上の確実な数字よりもずっと短く、かつずっと薄いマスは、鉛筆メモである可能性が高いものとして扱う。そして、横向きの写真の回転は、1つではなく3つのネットワークすべてで判定するようにした。

鉛筆メモと色付きの数字を含むダークテーマの数独スクリーンショット。まっすぐに補正され線の交点が緑で示された盤面、小さな画像として並べた81マス、そして鉛筆メモを除いて青で示した読み取り結果の数字
私たちが生成したダークテーマのスクリーンショット。検出した線の交点を示した補正後の盤面、ネットワークから見た81マス、そして読み取り結果。鉛筆メモは除外されている。

効果がなかったこと

以下も調整用セットで測定したが、採用しなかった。

  • より大きな数字認識ネットワーク:重みを42,000から59,000に増やすと、調整用画像を1枚多く読めたが、ブラウザでの処理は3.8倍遅くなった。
  • 鉛筆メモとダークテーマを含む、生成したアプリのスクリーンショット3,000枚:あってもなくてもスコアは同じだった。
  • グレーではなくカラーで読み取り、赤ペンが黒インクと同じくらい濃く見えるようにする:調整用画像は2枚多く読めたが、手書き数字の読み取りが悪化した。
  • 学習用の数字を手書きに近づけるように変形する:手書き数字の読み取りが悪化した。
  • 解が1つという規則でより多くのマスを修正できるようにする:正しく読めるパズルは増えたが、解が1つの危険な誤ったパズルも増えた。
  • 3つのネットワークを新しいデータで学習し直す、または4つや6つ使う:差はノイズの範囲内だったため、最初のものを残した。
  • フレームで盤面が途切れている場合に、画像の端を盤面の端とみなす:読めるようになった画像と読めなくなった画像が同数だった。

最初のテストセットでの結果

各テストセットで完全に読み取れたパズルの数を、最初のバージョンと現在のリーダーで比べる。

テストセット10月31日現在
ネット上で共有されたスクリーンショットと写真(Lexski)画像数: 20010150.5%17989.5%
新聞写真(WichtとHennebert)画像数: 403485.0%40100.0%
手書きで解き終えた新聞パズル(WichtとHennebert)画像数: 4000.0%40100.0%

Lexskiの画像では、リーダーの正解率は50.5%から89.5%(84.5%から93.0%)に上がり、誤って読んだのに解が1つになったパズルは7問から4問に減った。その4問のうち3問では、余分に読まれた1つの数字が本来そこに入る数字なので、パズルは依然として正しい解に導かれる。4問目の余分な数字は、はっきり印刷された1で、データセットでは空欄とされている。179問のうち177問は、1回目のラウンドの終了時点で読めていた。残る2問は、失敗例を調べたあとの2回目のラウンドで読めるようになったもので、このセットはもはや手つかずとは言えない。

40問中40問というと完璧に聞こえるが、40枚の画像で示せるのは、真の割合がおよそ91%を上回るということまでである。また、本来最初に行うべきだった確認がある。新聞写真のテスト用40枚のうち4枚は、そのデータセットの学習用セットにも含まれており、そのうち2枚はピクセル単位で同一だった。これらを除くと36問中36問である。

新しいテスト:どのバージョンも見たことのない写真200枚

この時点で、最初のテストセットはすでに読み取られ、失敗例も調べてしまっていたため、リーダーが初めて見る画像でどの程度読めるかを知る手段にはもうならなかった。そこで、Hugging Face、Kaggle、GitHub、Zenodo、Figshare、AIcrowdで、ラベル付きの数独写真をさらに探した。大半のセットは、生成された盤面、単独の数字、あるいはWichtの写真のコピーだった。実際のラベル付き写真があったのはGitHubの3つのコレクションで、いずれも印刷されたパズルである。オープンなパズル本を撮影した写真100枚(NatalijaPetric/SudokuDataset)、主に新聞を撮影した写真80枚(mineshpatel1/sudoku-solver。Wicht自身の写真49枚とコピー1枚を除外した後の枚数)、そしてブカレスト大学のコンピュータビジョン講義のプロジェクトで使われた印刷シート20枚(danielsociu/SudokuRecognition)である。

3つのいずれもライセンスを明記していないため、測定にのみ使用した。学習には一切使わず、ここにも掲載していない。画像のリストは、ファイルのハッシュとラベルから規則に従って選び、どの変更よりも前に確定して保存した。画像は、2回目のラウンドの最後の変更が終わるまで開かなかった。その後、各バージョンのリーダーに一度ずつ読み取らせた。表は完全に読み取れたパズルの数を示す。

出典10月31日1回目現在
オープンなパズル本(NatalijaPetric)写真数: 1007979.0%7676.0%7878.0%
主に新聞(mineshpatel1)写真数: 806581.3%6885.0%6986.3%
印刷シート(ブカレスト大学の講義)写真数: 2020100.0%20100.0%20100.0%
全200枚写真数: 20016482.0%16482.0%16783.5%

リーダーが見たことのない印刷パズルについては、2回のラウンドの作業全体を通じても、ほとんど変化がなかった。最初のバージョンはその82.0%を完全に読み取り、現在のバージョンは83.5%(77.7%から88.0%)である。新たに14問を読めるようになり、11問が読めなくなった。改善したのはマス単位の結果で、正しく読めたマスは94.2%から98.9%に増え、グリッドは200枚中195枚ではなくすべての写真で見つかるようになった。誤って読んだのに解が1つになったパズルは、以前が5問、現在が6問である。

読めなくなった原因ははっきりしている。鉛筆メモとダークテーマを読むために、現在は各マスを丸ごと切り出し、薄いインクも数に入れている。薄い新聞紙では裏面が薄く鏡像になって透けて見え、新しいリーダーはその影を数字として読んでしまう。最初のバージョンはマス内で最大のインクの形だけを見ていたため、それらに気づくことはなかった。本のページが湾曲していると、盤面の外枠やブロックの線がマスの中に入り込み、1として読まれることがある。

読めなかったもののうち2問は、ラベルの誤りである。写真には3と9が写っているのにラベルでは9と8、4が写っているのにラベルでは2となっている。これを正しく数えると、現在のリーダーの正解率は84.5%になる。

まだ残る誤り

新しい写真200枚のうち、完全に読み取れなかったのは33枚である。22枚はオープンなパズル本のページで、綴じ目の近くではページの湾曲がリーダーの追従できる範囲を超えるため、線がマスの中に入り込んで1と読まれたり、隅のマスが線をまたいで切り出されたりする。7枚は裏面が透けて見える新聞である。残りは、モアレの出た画面を撮影した写真、1と読まれた盤面の端、そして2つのラベルの誤りである。

Lexskiの画像200枚のうち、完全に読み取れなかったのは21枚である。内訳は、鉛筆メモが数字として読まれたもの(消した鉛筆が薄い数字として残っていた例を含む)が7枚、余分な数字が1つ入ったもの(主に単独の鉛筆メモが記入数字として読まれた)が5枚、マスの間に線がないアプリのテーマや手描きのグリッドで、グリッドの位置を誤ったか見つけられなかったものが5枚、珍しいタイルや色によるものが4枚である。

なぜ97%に届かないのか、そして次の課題

すべての処理はブラウザ内で行われる。モデルは224 KB、JavaScriptは約850行で、処理時間はノートパソコンで写真1枚あたり中央値約300ミリ秒、低速なスマートフォンを想定してプロセッサを4倍遅くした場合は約1.2秒である。この予算の範囲内では、より大きなネットワークは役に立たなかった。残っているのはロングテールで、湾曲したページ、裏写り、鉛筆メモ、珍しいアプリのスタイルなどである。見つけた公開のラベル付きセットはすべて使用済みか、すでに見てしまっているため、次のラウンドでは自分たちで撮影してラベルを付けた写真が必要になる。薄いインクとページの湾曲の問題は、それらの写真で修正し、測定する。

うまくスキャンするために

  • スマートフォンをパズルの真上でまっすぐに構え、グリッド全体を画面に収める。
  • 本や新聞は平らに伸ばす。印刷パズルでの読み取りミスの大半は、ページの湾曲が原因である。
  • 薄い新聞紙の場合は、ページの裏に無地の紙を1枚当てて、裏面が透けないようにする。
  • パズルに鉛筆メモを書き込む前にスキャンする。
  • 解く前に、ソルバーが印を付けたマスを手元のパズルと見比べる。

データと出典

ソルバーを試す →

ナンプレアプリのアイコン

こんな問題をもっと解いてみませんか?

私たちは、iPhone、iPad、Mac、Android向けのナンプレアプリも開発しています。広告は一切なく、オフラインでも遊べます。ヒントを使うと、数字を入れるだけでなく、そのマスを解くための解法を説明します。

Sudoku Flowは、このサイトでおすすめしているナンプレアプリの開発元、Rubigo Gamesが制作しています。