Sudoku Flow

Что мы узнали, измеряя наш распознаватель судоку по фото

Обновлено 5 ноября 2026 г.

Что считается верным распознаванием

Головоломка считается распознанной верно, только если ни в одной из 81 клетки нет ошибки: одна неверная цифра даёт уже другую головоломку. Поэтому мы считаем целые головоломки, а не клетки. Эти два подсчёта могут рассказывать совсем разные истории, как показывает эта страница: на фото печатных судоку распознаватель теперь верно читает 98,9% клеток, но доля целых головоломок почти не сдвинулась, потому что большинство ошибочных клеток приходится на несколько трудных снимков.

Мы также считаем самую опасную ошибку: головоломку, распознанную неверно, но всё равно имеющую ровно одно решение. У настоящего судоку одно решение, поэтому результат распознавания, у которого решений нет или их много, сразу выявляется. Неверная головоломка с одним решением выглядит нормально, поэтому решатель отмечает каждую клетку, в которой не был уверен, и просит вас перед решением сравнить их со своей головоломкой.

На 200 изображениях точность результата ограничена. Для основных результатов мы приводим 95-процентный диапазон (интервал Уилсона): 89,5% из 200 изображений означает, что истинная доля, скорее всего, лежит между 84,5% и 93,0%.

Изображения, на которых мы проверяли

Мы начали с двух открытых наборов данных. В наборе Sudoku Image Recognition от Lexski (CC0) 1400 изображений, в основном скриншоты и фото, которыми люди делились в интернете: приложения всех стилей, тёмные темы, карандашные пометки, головоломки, наполовину решённые на бумаге. Набор данных Батиста Вихта (Baptiste Wicht) и Жана Эннебера (Jean Hennebert) под лицензией CC BY 4.0 содержит газетные судоку, сфотографированные на телефоны, часть из них решена от руки ручкой.

Прежде чем что-либо менять, мы отложили три тестовых набора: 200 изображений Lexski, 40 газетных фото и 40 газетных головоломок, решённых от руки. Мы не использовали их для обучения и не смотрели на них во время работы. Каждое решение принималось на 200 других изображениях Lexski, настроечном наборе, а тестовые наборы были распознаны один раз, в самом конце.

С чего всё начиналось

Первая версия от 31 октября точно распознала 101 из 200 изображений Lexski, 34 из 40 газетных фото и ни одной из 40 решённых головоломок. Большая часть её проблем возникала ещё до цифр. Она принимала за поле самую крупную почти квадратную фигуру из чернил, а на скриншоте такая фигура часто захватывает заголовок или панель с цифрами, тогда как тонкие серые линии тёмной темы не замечаются вовсе. На настроечном наборе она находила сетку в правильном месте лишь в 118 случаях из 200.

Что мы меняли, шаг за шагом

Каждая строка соответствует одному изменению, а число показывает, сколько из 200 настроечных изображений после него распознавалось точно. Последние три строки относятся ко второму этапу.

ИзменениеТочно распознанные настроечные изображения (из 200)
Первая версия, 31 октября99
Сетка ищется по линиям: десять равномерно расположенных линий в каждом направлении129
Варианты сетки сравниваются между собой; пробуется сдвиг на одну клетку136
Для поиска сетки используются бледные тонкие линии138
Клетки вырезаются целиком; сеть для цифр обучена на настоящих клетках161
Небольшая сеть определяет, где находится поле162
Линии отслеживаются там, где страница изгибается163
Улучшенная сеть для цифр, карандашные пометки в отдельном классе173
Усреднение трёх сетей для цифр177
Осторожное правило одного решения; решённые поля читаются целиком177
Второй этап: полноразмерные фото сжимаются вдвое перед уменьшением178
Второй этап: низкие бледные чернила считаются карандашной пометкой179
Второй этап: повёрнутые набок фото оценивают все три сети179

Большую часть прироста дали три изменения. Теперь сетка находится по своим линиям: каждый вариант положения поля подгоняется под десять равномерно расположенных линий в каждом направлении, и варианты сравниваются между собой, а право голоса получает небольшая сеть, определяющая, где находится поле. Каждая клетка вырезается целиком, поэтому карандашная пометка остаётся маленькой в своём углу, а светлая цифра на тёмной плитке выглядит как чернила на бумаге. А сети для цифр обучались на настоящих клетках, вырезанных из обучающих изображений Lexski, причём карандашные пометки выделены в отдельный класс. Теперь каждую клетку читают три небольшие сети, обученные по отдельности, и их ответы усредняются, потому что ошибаются они на разных клетках.

Решённая головоломка получает дополнительную помощь. Когда на поле 79 цифр или больше, распознаватель ищет наиболее вероятную полностью заполненную сетку, в которой в каждой строке, каждом столбце и каждом блоке стоят цифры от 1 до 9. При чтении клетка за клеткой точно распознались лишь 7 из 40 рукописных тестовых головоломок; при чтении как решённого судоку точно распознались все 40.

Второй этап добавил три изменения поменьше. Полноразмерное фото с телефона перед уменьшением шаг за шагом сжимается вдвое, так что тонкие линии и штрихи карандаша усредняются, а не пропускаются. Клетка, чернила в которой намного ниже и намного бледнее, чем уверенно распознанные цифры на этом поле, считается вероятной карандашной пометкой. А поворот фото, снятого боком, теперь оценивают все три сети, а не одна.

Скриншот судоку в тёмной теме с карандашными пометками и цветными цифрами: выпрямленное поле с пересечениями линий, отмеченными зелёным, 81 клетка в виде маленьких изображений и распознанные числа синим, без карандашных пометок
Сгенерированный нами скриншот в тёмной теме: выпрямленное поле с найденными пересечениями линий; 81 клетка так, как их видят сети; и то, что было распознано. Карандашные пометки отброшены.

Что не помогло

Эти изменения мы тоже измерили на настроечном наборе и не стали их использовать:

  • Более крупная сеть для цифр: с 59 000 весов вместо 42 000 она точно распознала на одно настроечное изображение больше и работала в браузере в 3,8 раза медленнее.
  • 3000 сгенерированных скриншотов приложений с карандашными пометками и тёмными темами: результат одинаковый с ними и без них.
  • Чтение в цвете вместо оттенков серого, чтобы красная ручка была такой же тёмной, как чёрные чернила: на два настроечных изображения больше, но рукописные цифры распознавались хуже.
  • Искажение обучающих цифр, чтобы они больше походили на рукописные: рукописные цифры распознавались хуже.
  • Разрешение правилу одного решения менять больше клеток: верно распознаётся больше головоломок, но растёт и число опасных неверных головоломок с одним решением.
  • Переобучение трёх сетей на свежих данных или использование четырёх или шести сетей: разница в пределах шума, поэтому остались первые.
  • Использование края изображения как края поля, когда поле обрезано кадром: потерянных изображений столько же, сколько выигранных.

Результаты на первых тестовых наборах

Сколько головоломок в каждом тестовом наборе точно распознала первая версия и сколько распознаёт распознаватель в нынешнем виде:

Тестовый набор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%), а число неверно распознанных головоломок с одним решением уменьшилось с 7 до 4. В трёх из этих четырёх единственная лишняя цифра совпадает с той, что должна стоять в этой клетке, так что головоломка всё равно приводит к правильному решению; в четвёртой это чётко напечатанная цифра 1, которую набор данных оставляет пустой. Из 179 точных результатов 177 получены в конце первого этапа. Последние два добавились на втором этапе, после того как мы изучили неудачи, поэтому этот набор уже нельзя считать нетронутым.

Сорок из сорока звучит идеально, но 40 изображений позволяют показать лишь то, что истинная доля выше примерно 91%. И проверка, которую следовало провести в первую очередь: четыре из 40 тестовых газетных фото есть и в обучающей части этого набора данных, причём два из них совпадают пиксель в пиксель. Без них результат 36 из 36.

Новая проверка: 200 фото, которых не видела ни одна версия

К тому времени первые тестовые наборы уже были распознаны, а их неудачи изучены, поэтому они больше не могли показать, как распознаватель справляется с изображениями, которых он никогда не встречал. Мы искали на Hugging Face, Kaggle, GitHub, Zenodo, Figshare и AIcrowd другие размеченные фото судоку. Большинство наборов оказались сгенерированными полями, отдельными цифрами или копиями фото из набора Wicht. Настоящие размеченные фото нашлись в трёх коллекциях на GitHub, и все они сняты с печатных головоломок: 100 фото открытого сборника головоломок (NatalijaPetric/SudokuDataset), 80 фото, в основном газет (mineshpatel1/sudoku-solver, после исключения 49 фото, которые на самом деле взяты из набора Wicht, и одной копии), и 20 печатных листов из проекта учебного курса по компьютерному зрению в Бухарестском университете (danielsociu/SudokuRecognition).

Ни в одной из трёх коллекций не указана лицензия, поэтому мы использовали их только для измерений: ни разу для обучения, и здесь они не показаны. Список изображений был зафиксирован и сохранён до каких-либо изменений, отобран по заданному правилу на основе хешей файлов и разметки, а сами изображения не открывались до последнего изменения второго этапа. Затем каждая версия распознавателя прочитала их по одному разу. В таблице указано число точно распознанных головоломок.

Источник31 октябряПервый этапСейчас
Открытый сборник головоломок (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 %

На печатных головоломках, которых распознаватель никогда не видел, вся работа обоих этапов мало что изменила. Первая версия точно распознала 82,0% из них, нынешняя распознаёт 83,5% (от 77,7% до 88,0%): она выиграла 14 головоломок и потеряла 11. Что действительно улучшилось, так это клетки: верно читается 98,9% вместо 94,2%, а сетка находится на каждом фото, а не на 195 из 200. Неверно распознанных головоломок с одним решением было 5, теперь 6.

У потерь есть ясная причина. Чтобы читать карандашные пометки и тёмные темы, каждая клетка теперь вырезается целиком, и бледные чернила тоже учитываются. На тонкой газетной бумаге просвечивает оборотная сторона, бледно и зеркально, и новый распознаватель читает эти тени как цифры; первая версия смотрела только на самую крупную фигуру из чернил в клетке и никогда их не замечала. На изогнутых страницах книги внешняя линия поля или линия блока может оказаться внутри клетки и быть прочитана как цифра 1.

Два промаха объясняются ошибками в разметке: на фото видны 3 и 9 там, где в разметке указаны 9 и 8, и 4 там, где указано 2. Если считать правильно, нынешний распознаватель точно распознаёт 84,5%.

Что всё ещё не получается

Из 200 новых фото 33 не были распознаны точно. В 22 случаях это страницы открытого сборника головоломок: у корешка страница изгибается сильнее, чем может отследить распознаватель, поэтому линия оказывается внутри клетки и читается как цифра 1 или угловая клетка вырезается поперёк линии. В 7 случаях это газеты, у которых просвечивает оборотная сторона. Остальное: фото экрана с муаром, край поля, прочитанный как цифра 1, и две ошибки разметки.

Из 200 изображений Lexski не распознано точно 21: карандашные пометки, прочитанные как цифры, в том числе стёртый карандаш, оставивший бледные цифры (7); одна лишняя цифра, чаще всего одиночная карандашная пометка, прочитанная как введённая цифра (5); сетка не на своём месте или не найдена, в темах приложений без линий между клетками или при сетке, нарисованной от руки (5); необычные плитки и цвета (4).

Почему не 97% и что дальше

Всё работает в вашем браузере: модель размером 224 КБ и около 850 строк JavaScript, медиана около 300 миллисекунд на фото на ноутбуке и около 1,2 секунды при замедлении процессора в четыре раза, как на медленном телефоне. Более крупная сеть в рамках этого бюджета не помогла. Остался длинный хвост: изогнутые страницы, просвечивающая оборотная сторона, карандашные пометки и необычные стили приложений. Все найденные нами общедоступные размеченные наборы теперь использованы или просмотрены, поэтому для следующего этапа нужны фото, которые мы сами снимем и разметим, и именно на них нужно исправить и измерить проблемы с бледными чернилами и изогнутыми страницами.

Для лучшего сканирования

  • Держите телефон прямо над головоломкой так, чтобы вся сетка была в кадре.
  • Расправьте книгу или газету: изогнутые страницы вызывают большинство промахов на печатных головоломках.
  • Если газета тонкая, подложите под страницу чистый лист бумаги, чтобы не просвечивала оборотная сторона.
  • Сканируйте до того, как вписывать в головоломку карандашные пометки.
  • Перед решением сравните клетки, отмеченные решателем, со своей головоломкой.

Данные и источники

Попробовать решатель →

Значок приложения с судоку

Хотите больше таких судоку?

Мы также разрабатываем приложение с судоку для iPhone, iPad, Mac и Android. В нём совсем нет рекламы, оно работает без интернета, а подсказки объясняют технику решения, а не просто вписывают цифру.

Sudoku Flow создаёт Rubigo Games, разработчик приложения с судоку, которое мы рекомендуем на этом сайте.