Những điều chúng tôi học được khi đo trình đọc ảnh Sudoku của mình
Cập nhật 5 tháng 11, 2026
Thế nào là đọc đúng
Một câu đố chỉ được tính là đọc đúng khi cả 81 ô đều đúng: chỉ một chữ số sai cũng tạo ra một câu đố khác. Vì vậy chúng tôi đếm nguyên câu đố, không đếm từng ô. Hai cách đếm này có thể kể những câu chuyện rất khác nhau, như trang này cho thấy: với ảnh câu đố in, trình đọc hiện đọc đúng 98,9% số ô, nhưng tỷ lệ câu đố được đọc đúng trọn vẹn hầu như không thay đổi, vì phần lớn các ô sai tập trung ở một vài bức ảnh khó.
Chúng tôi cũng đếm loại lỗi nguy hiểm nhất: một câu đố bị đọc sai nhưng vẫn có đúng một lời giải. Một Sudoku thật có một lời giải, nên một kết quả đọc không có lời giải nào hoặc có nhiều lời giải sẽ bị phát hiện ngay. Một câu đố sai có một lời giải trông vẫn bình thường, đó là lý do trình giải đánh dấu mọi ô mà nó không chắc chắn và yêu cầu bạn so sánh chúng với câu đố của mình trước khi giải.
Với 200 bức ảnh, một kết quả chỉ chính xác đến một mức nhất định. Với các kết quả chính, chúng tôi đưa ra khoảng tin cậy 95% (khoảng Wilson): 89,5% của 200 bức ảnh có nghĩa là tỷ lệ thực nhiều khả năng nằm trong khoảng từ 84,5% đến 93,0%.
Những bức ảnh chúng tôi dùng để kiểm tra
Chúng tôi bắt đầu với hai bộ dữ liệu mở. Bộ dữ liệu Sudoku Image Recognition của Lexski (CC0) có 1.400 bức ảnh, phần lớn là ảnh chụp màn hình và ảnh mà mọi người chia sẻ trên mạng: ứng dụng đủ mọi phong cách, giao diện tối, ghi chú bút chì, câu đố được giải dở trên giấy. Bộ dữ liệu của Baptiste Wicht và Jean Hennebert (CC BY 4.0) gồm các câu đố Sudoku trên báo được chụp bằng điện thoại, một số đã được giải xong bằng tay, viết bằng bút mực.
Trước khi thay đổi bất cứ điều gì, chúng tôi để riêng ba tập kiểm tra: 200 ảnh Lexski, 40 ảnh báo và 40 câu đố trên báo được giải xong bằng tay. Chúng tôi không huấn luyện trên chúng và không xem chúng trong khi làm việc. Mọi quyết định đều được đưa ra dựa trên 200 ảnh Lexski khác, gọi là tập tinh chỉnh, và các tập kiểm tra chỉ được đọc một lần, vào lúc cuối.
Điểm xuất phát
Phiên bản đầu tiên, từ ngày 31 tháng 10, đọc chính xác 101 trong 200 ảnh Lexski, 34 trong 40 ảnh báo và không câu nào trong 40 câu đố đã giải xong. Phần lớn khó khăn của nó nảy sinh trước cả bước đọc chữ số. Nó lấy hình mực gần vuông lớn nhất làm bảng, và trên ảnh chụp màn hình, hình đó thường bao lấy cả phần tiêu đề hoặc bàn phím số, trong khi các đường kẻ mảnh màu xám của giao diện tối thì bị bỏ sót hoàn toàn. Trên tập tinh chỉnh, nó chỉ đặt lưới đúng chỗ 118 lần trong 200.
Những gì chúng tôi thay đổi, từng bước một
Mỗi hàng là một thay đổi, và con số cho biết khi đó có bao nhiêu trong 200 ảnh tinh chỉnh được đọc chính xác. Ba hàng cuối là vòng thứ hai.
| Thay đổi | Ảnh tinh chỉnh được đọc chính xác (trên 200) |
|---|---|
| Phiên bản đầu tiên, ngày 31 tháng 10 | 99 |
| Tìm lưới theo đường kẻ: mười đường cách đều theo mỗi chiều | 129 |
| So sánh song song các lưới; thử dịch một ô | 136 |
| Dùng các đường kẻ mảnh mờ để tìm lưới | 138 |
| Cắt nguyên ô; học chữ số từ các ô thật | 161 |
| Một mạng nhỏ xác định vị trí của bảng | 162 |
| Bám theo đường kẻ ở chỗ trang giấy bị cong | 163 |
| Mạng chữ số tốt hơn, ghi chú bút chì thành lớp riêng | 173 |
| Lấy trung bình ba mạng chữ số | 177 |
| Quy tắc một lời giải thận trọng; bảng đã giải xong được đọc như một tổng thể | 177 |
| Vòng hai: ảnh kích thước đầy đủ được giảm một nửa trước khi thu nhỏ | 178 |
| Vòng hai: nét mực ngắn, nhạt được coi là ghi chú bút chì | 179 |
| Vòng hai: ảnh xoay ngang được cả ba mạng đánh giá | 179 |
Phần lớn mức cải thiện đến từ ba thay đổi. Lưới giờ được tìm theo các đường kẻ của nó: mỗi phỏng đoán về bảng được điều chỉnh khớp với mười đường kẻ cách đều nhau theo mỗi chiều và được so sánh song song với nhau, và một mạng nhỏ chuyên xác định vị trí của bảng cũng có một phiếu bầu. Mỗi ô được cắt ra nguyên vẹn, nên ghi chú bút chì vẫn nhỏ trong góc của nó và một chữ số sáng trên ô nền tối trông giống như mực trên giấy. Và các mạng nhận dạng chữ số được học từ những ô thật cắt ra từ ảnh huấn luyện của Lexski, với ghi chú bút chì là một lớp riêng. Ba mạng nhỏ, được huấn luyện riêng rẽ, giờ cùng đọc mỗi ô và câu trả lời của chúng được lấy trung bình, vì chúng mắc lỗi ở những ô khác nhau.
Câu đố đã giải xong được hỗ trợ thêm. Khi một bảng có từ 79 chữ số trở lên, trình đọc tìm lưới hoàn chỉnh có khả năng nhất trong đó mỗi hàng, cột và khối đều chứa từ 1 đến 9. Khi đọc từng ô một, chỉ 7 trong 40 câu đố viết tay của tập kiểm tra được đọc chính xác; khi đọc như một Sudoku đã hoàn thành, cả 40 câu đều chính xác.
Vòng thứ hai bổ sung ba thay đổi nhỏ hơn. Một ảnh điện thoại kích thước đầy đủ được giảm một nửa từng bước trước khi thu nhỏ, để các đường mảnh và nét bút chì được tính trung bình vào thay vì bị bỏ qua. Một ô có nét mực vừa ngắn hơn nhiều vừa nhạt hơn nhiều so với các chữ số chắc chắn của bảng sẽ được coi là nhiều khả năng là ghi chú bút chì. Và hướng xoay của một ảnh bị xoay ngang được cả ba mạng đánh giá thay vì chỉ một.

Những gì không giúp ích
Chúng tôi cũng đo những thay đổi sau trên tập tinh chỉnh và đã không đưa chúng vào:
- Một mạng chữ số lớn hơn: với 59.000 trọng số thay vì 42.000, nó đọc chính xác thêm một ảnh tinh chỉnh nhưng chạy chậm hơn 3,8 lần trong trình duyệt.
- 3.000 ảnh chụp màn hình ứng dụng được tạo tự động, có ghi chú bút chì và giao diện tối: điểm số như nhau dù có hay không có chúng.
- Đọc ảnh màu thay vì ảnh xám, để nét bút đỏ đậm như mực đen: đọc chính xác thêm hai ảnh tinh chỉnh, nhưng chữ viết tay bị đọc kém hơn.
- Làm biến dạng các chữ số huấn luyện để trông giống chữ viết tay hơn: chữ viết tay bị đọc kém hơn.
- Cho phép quy tắc một lời giải thay đổi nhiều ô hơn: nhiều câu đố được đọc đúng hơn, nhưng cũng nhiều câu đố sai nguy hiểm có một lời giải hơn.
- Huấn luyện lại ba mạng trên dữ liệu mới, hoặc dùng bốn hay sáu mạng: chênh lệch nằm trong mức nhiễu, nên các mạng ban đầu được giữ lại.
- Coi mép ảnh là mép bảng, đối với những bảng bị khung hình cắt mất: được bao nhiêu ảnh thì mất bấy nhiêu ảnh.
Kết quả trên các tập kiểm tra đầu tiên
Số câu đố được đọc chính xác trong mỗi tập kiểm tra, bởi phiên bản đầu tiên và bởi trình đọc hiện nay:
| Tập kiểm tra | 31 tháng 10 | Hiện nay |
|---|---|---|
| Ảnh chụp màn hình và ảnh chia sẻ trên mạng (Lexski)Số ảnh: 200 | 10150,5% | 17989,5% |
| Ảnh báo (Wicht và Hennebert)Số ảnh: 40 | 3485,0% | 40100,0% |
| Câu đố trên báo được giải xong bằng tay (Wicht và Hennebert)Số ảnh: 40 | 00,0% | 40100,0% |
Trên các ảnh Lexski, trình đọc tăng từ 50,5% lên 89,5% (84,5% đến 93,0%), và số câu đố bị đọc sai nhưng vẫn có một lời giải giảm từ 7 xuống 4. Ở ba trong số bốn câu đó, chữ số thừa duy nhất chính là chữ số đúng ở vị trí ấy, nên câu đố vẫn dẫn đến lời giải đúng; câu thứ tư là một chữ số 1 in rõ ràng mà bộ dữ liệu để trống. 177 trong số 179 câu đã đạt được vào cuối vòng đầu tiên. Hai câu còn lại đạt được ở vòng thứ hai, sau khi chúng tôi đã nghiên cứu những trường hợp thất bại, nên tập này không còn là tập chưa từng bị động đến.
Bốn mươi trên bốn mươi nghe có vẻ hoàn hảo, nhưng 40 bức ảnh chỉ có thể cho thấy tỷ lệ thực cao hơn khoảng 91%. Và một bước kiểm tra lẽ ra chúng tôi phải làm trước tiên: bốn trong số 40 ảnh báo của tập kiểm tra cũng nằm trong tập huấn luyện của bộ dữ liệu đó, hai trong số đó giống hệt đến từng điểm ảnh. Nếu bỏ chúng ra: 36 trên 36.
Một bài kiểm tra mới: 200 ảnh chưa phiên bản nào từng thấy
Đến lúc đó, các tập kiểm tra đầu tiên đã được đọc và các lỗi của chúng đã được nghiên cứu, nên chúng không còn cho chúng tôi biết trình đọc hoạt động thế nào với những bức ảnh nó chưa từng gặp. Chúng tôi đã tìm thêm ảnh Sudoku có nhãn trên Hugging Face, Kaggle, GitHub, Zenodo, Figshare và AIcrowd. Phần lớn các bộ dữ liệu là bảng được tạo tự động, chữ số đơn lẻ hoặc bản sao ảnh của Wicht. Ba bộ sưu tập trên GitHub có ảnh thật được gắn nhãn, tất cả đều là câu đố in: 100 ảnh của một cuốn sách câu đố mở (NatalijaPetric/SudokuDataset), 80 ảnh chủ yếu là báo (mineshpatel1/sudoku-solver, sau khi loại bỏ 49 ảnh vốn chính là ảnh của Wicht và một ảnh trùng lặp), và 20 trang in từ một đồ án môn thị giác máy tính tại Đại học Bucharest (danielsociu/SudokuRecognition).
Không bộ nào trong ba bộ này nêu rõ giấy phép, nên chúng tôi chỉ dùng chúng để đo: không bao giờ dùng để huấn luyện, và chúng không được hiển thị ở đây. Danh sách ảnh đã được cố định và lưu lại trước mọi thay đổi, được chọn theo quy tắc từ mã băm tệp và nhãn, và các ảnh không được mở ra cho đến thay đổi cuối cùng của vòng thứ hai. Sau đó mỗi phiên bản của trình đọc đọc chúng một lần. Bảng dưới đây đếm số câu đố được đọc chính xác.
| Nguồn | 31 tháng 10 | Vòng một | Hiện nay |
|---|---|---|---|
| Một cuốn sách câu đố mở (NatalijaPetric)Số ảnh: 100 | 7979,0% | 7676,0% | 7878,0% |
| Chủ yếu là báo (mineshpatel1)Số ảnh: 80 | 6581,3% | 6885,0% | 6986,3% |
| Trang in (đồ án môn học, Đại học Bucharest)Số ảnh: 20 | 20100,0% | 20100,0% | 20100,0% |
| Tất cả 200Số ảnh: 200 | 16482,0% | 16482,0% | 16783,5% |
Với những câu đố in mà trình đọc chưa từng thấy, toàn bộ công sức của cả hai vòng thay đổi được rất ít. Phiên bản đầu tiên đọc chính xác 82,0% số câu, phiên bản hiện tại 83,5% (77,7% đến 88,0%): nó được thêm 14 câu đố và mất 11 câu. Điều thực sự được cải thiện là các ô: 98,9% số ô được đọc đúng thay vì 94,2%, và lưới được tìm thấy trong mọi bức ảnh thay vì 195 trong 200. Câu đố bị đọc sai nhưng vẫn có một lời giải: 5 trước đây, 6 hiện nay.
Những câu bị mất có nguyên nhân rõ ràng. Để đọc được ghi chú bút chì và giao diện tối, mỗi ô giờ được cắt ra nguyên vẹn và nét mực nhạt cũng được tính. Trên giấy báo mỏng, mặt sau của trang bị thấu qua, mờ nhạt và bị lật như ảnh trong gương, và trình đọc mới đọc những bóng mờ đó thành chữ số; phiên bản đầu tiên chỉ nhìn vào hình mực lớn nhất trong một ô và không bao giờ thấy chúng. Trên những trang sách bị cong, đường viền ngoài của bảng hoặc đường kẻ khối có thể rơi vào trong một ô và bị đọc thành số 1.
Hai trong số các trường hợp sai là lỗi trong nhãn: ảnh cho thấy số 3 và số 9 ở chỗ nhãn ghi 9 và 8, và số 4 ở chỗ nhãn ghi 2. Nếu tính đúng, trình đọc hiện tại đọc chính xác 84,5%.
Những gì vẫn còn sai
Trong 200 ảnh mới, 33 ảnh không được đọc chính xác. 22 ảnh là các trang của cuốn sách câu đố mở: gần gáy sách, trang giấy cong nhiều hơn mức trình đọc theo kịp, nên một đường kẻ rơi vào trong một ô và bị đọc thành số 1, hoặc một ô ở góc bị cắt ngang qua một đường kẻ. 7 ảnh là báo bị thấu mặt sau. Số còn lại là một bức ảnh chụp lại màn hình bị vân moiré, một mép bảng bị đọc thành số 1, và hai lỗi nhãn.
Trong 200 ảnh Lexski, 21 ảnh không được đọc chính xác: ghi chú bút chì bị đọc thành chữ số, kể cả nét bút chì đã tẩy nhưng còn để lại chữ số mờ (7); thừa một chữ số, chủ yếu là một ghi chú bút chì đơn lẻ bị đọc thành số đã điền (5); lưới đặt sai chỗ hoặc không tìm thấy, ở các giao diện ứng dụng không có đường kẻ giữa các ô hoặc lưới vẽ tay (5); và ô nền cùng màu sắc khác thường (4).
Vì sao không đạt 97%, và bước tiếp theo
Mọi thứ đều chạy trong trình duyệt của bạn: một mô hình 224 KB và khoảng 850 dòng JavaScript, trung vị khoảng 300 mili giây cho mỗi ảnh trên máy tính xách tay, và khoảng 1,2 giây khi bộ xử lý bị làm chậm bốn lần, như trên một chiếc điện thoại chậm. Một mạng lớn hơn không giúp ích trong giới hạn đó. Những gì còn lại là một đuôi dài: trang giấy cong, mặt sau thấu qua, ghi chú bút chì và phong cách ứng dụng khác thường. Mọi bộ dữ liệu công khai có nhãn mà chúng tôi tìm được giờ đều đã được dùng hoặc đã được xem, nên vòng tiếp theo cần những bức ảnh do chính chúng tôi chụp và gắn nhãn, với các vấn đề mực nhạt và trang cong được khắc phục và đo trên chính những ảnh đó.
Để quét tốt nhất
- Giữ điện thoại thẳng phía trên câu đố, với toàn bộ lưới nằm trong khung hình.
- Làm phẳng sách hoặc báo: trang giấy cong gây ra phần lớn các lỗi với câu đố in.
- Với giấy báo mỏng, đặt một tờ giấy trơn phía sau trang để mặt bên kia không bị thấu qua.
- Quét trước khi bạn viết ghi chú bút chì vào câu đố.
- Trước khi giải, hãy so sánh các ô mà trình giải đánh dấu với câu đố của bạn.
Dữ liệu và nguồn
- 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), không ghi giấy phép, chỉ dùng để đo lường
- mineshpatel1, sudoku-solver (GitHub), không ghi giấy phép, chỉ dùng để đo lường
- danielsociu, SudokuRecognition (GitHub), University of Bucharest course project, không ghi giấy phép, chỉ dùng để đo lường
- Cách công cụ giải đọc một bức ảnh, từng bước một (English)