干货 | 手把手教你用115行代码做个数独解析器!
squares = [] side = img.shape[:1] sideside = side[0] / 9 for j in range(9): for i in range(9): p1 = (i * side, j * side) #Top left corner of a box p2 = ((i + 1) * side, (j + 1) * side) #Bottom right corner squares.append((p1, p2)) return squares 5、得到每一位数字 下一步是从其单元格中提取数字并构建一个数组。 digits = [] img = pre_process_image(img.copy(), skip_dilate=True) for square in squares: digits.append(extract_digit(img, square, size)) extract_digit 是从一个数独方块中提取一个数字(如果有的话)的函数。它从整个方框中得到数字框,使用填充特征查找来获得框中间的最大特征,以期在边缘找到一个属于该数字的像素,用于定义中间的区域。接下来,需要缩放并填充数字,让适合用于机器学习的数字大小的平方。同时,我们必须忽略任何小的边框。 def extract_digit(img, rect, size): digit = cut_from_rect(img, rect) h, w = digit.shape[:2] margin = int(np.mean([h, w]) / 2.5) _, bbox, seed = find_largest_feature(digit, [margin, margin], [w - margin, h - margin]) digit = cut_from_rect(digit, bbox) w = bbox[1][0] - bbox[0][0] h = bbox[1][1] - bbox[0][1] if w > 0 and h > 0 and (w * h) > 100 and len(digit) > 0: return scale_and_centre(digit, size, 4) else: return np.zeros((size, size), np.uint8)
最后的数独的形象 现在,我们有了最终的数独预处理图像,下一个任务是提取图像中的每一位数字,并将其存储在一个矩阵中,然后通过某种算法计算出数独的解。 第二步:提取图像中出现的每个数字 对于数字识别,我们将在MNIST数据集上训练神经网络,该数据集包含60000张0到9的数字图像。从导入所有库开始。 import numpy import cv2from keras.datasets import mnistfrom keras.models import Sequentialfrom keras.layers import Densefrom keras.layers import Dropoutfrom keras.layers import Flattenfrom keras.layers.convolutional import Conv2Dfrom keras.layers.convolutional import MaxPooling2Dfrom keras.utils import np_utilsfrom keras import backend as K import matplotlib.pyplot as plt 需要修复随机种子以确保可重复性。 K.set_image_dim_ordering( th ) seed = 7numpy.random.seed(seed) (X_train, y_train), (X_test, y_test) = mnist.load_data() 然后将图像重塑为样本*像素*宽度*高度,并输入从0-255规范化为0-1。在此之后,对输出进行热编码。 X_trainX_train = X_train.reshape(X_train.shape[0], 1, 28, 28).astype( float32 ) X_testX_test = X_test.reshape(X_test.shape[0], 1, 28, 28).astype( float32 ) X_trainX_train = X_train / 255 X_testX_test = X_test / 255 y_train = np_utils.to_categorical(y_train) y_test = np_utils.to_categorical(y_test) num_classes = y_test.shape[1] 接下来,我们将创建一个模型来预测手写数字。 (编辑:应用网_阳江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |