11

拍张照片求解数独,计算机如何看懂题目,这个GitHub项目告诉你

 4 years ago
source link: https://www.qbitai.com/2019/12/10322.html
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

晓查 发自 凹非寺

量子位 报道 | 公众号 QbitAI

现在只需拍张照片,就能快速解决数独问题了。

数独对计算机来说不是什么难事,但就是这样一个“平平无奇”的项目却登上了GitHub今日的热榜。

这个登上热榜的项目,名字就叫 AI Sudoku ,其实就是用AI里的计算机视觉,把照片变成计算机能看懂的网格和数字。

V7NNZnq.jpg!web

接下来求解数独问题当然不难。重要的是,在这个过程中,我们也学习到了一些常用的计算机图片处理算法。

拍张照片解数独

智能数独求解器(Smart Sudoku Solver)的安装使用并不复杂,只需把项目代码克隆到本地即可。

Windows系统下支持图形化界面,把拍摄图片传输到电脑上就能给出答案。

首次运行需要连接网络下载MNIST数据集,训练模型并创建knn.sav文件,整个过程可能需要5~10分钟,之后就可以离线运行了。

python Run.py

运行上面的代码后,将显示KNN算法的训练结果

Qbe2Yjm.jpg!web

之后将很快出现GUI界面,选择上传你拍摄的数独谜题图片。

iQJ7JrY.jpg!web

一直点击下一步,就能得到这道题的答案:

2qYfQfJ.jpg!web

原理

作者在程序中提供了 卷积神经网络k近邻 两种算法,供你选择。

运行应用程序之前,只需将Run.py文件中的modeltype变量设置为“CNN”或“KNN”。默认情况下,程序设置为“ KNN”,而且现阶段使用KNN可以获得更高的准确性。

'''Run this file to run the application'''
from MainUI import MainUI
from CNN import CNN
from KNN import KNN
import os
# Change the model type variable value to "CNN" to use the Convolutional Neural Network
# Change the model type variable value to "KNN" to use the K Nearest Neighbours Classifier
modeltype = "KNN"

在我们点击“下一步”的过程中,程序展示了图片处理的步骤。

首先是对图片进行高斯模糊处理,去除噪声和其他细节。

7zYFJ3y.jpg!web

接下来,生成一张清晰的扫描图。由于一张图片中不同区域的光照,采用 自适应高斯阈值 的方法可以避免这一问题:

y2iYvu6.jpg!web

反转图片,让文字和网格都变成白色,背景变成黑色。

VJnqu2v.jpg!web

之后找出边缘的四条线,通过这四条线,将拍到的数独题目变成一张正方形图片。

36f6bau.jpg!web

最后将图片切割成81个小块,识别出每个小块里的数字。

传送门

求解数独问题并不是很难,这个开源项目的作用其实是帮你了解图像识别和处理的各种算法,例如 高斯模糊自适应高斯阈值 等等。

项目对这些算法的名称和介绍都做了适当的加粗处理,如果你对这些感兴趣,不妨前去观摩学习一下。

源代码地址:

https://github.com/neeru1207/AI_Sudoku

版权所有,未经授权不得以任何形式转载及使用,违者必究。


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK