加入收藏 | 设为首页 | 会员中心 | 我要投稿 应用网_阳江站长网 (https://www.0662zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 模式 > 正文

干货 | 手把手教你用115行代码做个数独解析器!

发布时间:2020-09-12 15:47:38 所属栏目:模式 来源:51cto
导读:你也是数独爱好者吗? Aakash Jhawar和许多人一样,乐于挑战新的难题。上学的时候,他每天早上都要玩数独。长大后,随着科技的进步,我们可以让计算机来帮我们解数独了!只需要点击数独的图片,它就会为你填满全部九宫格。 叮~ 这里有一份数独解析教程,等

model = Sequential()  model.add(Conv2D(32, (5, 5), input_shape=(1, 28, 28),            activation= relu ))  model.add(MaxPooling2D(pool_size=(2, 2)))model.add(Conv2D(16, (3,            3), activation= relu ))  model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Dropout(0.2)) model.add(Flatten())  model.add(Dense(128, activation= relu ))  model.add(Dense(64, activation= relu ))  model.add(Dense(num_classes, activation= softmax )) 

干货 | 手把手教你用115行代码做个数独解析器!

模型总结

在创建模型之后,需要进行编译,使其适合数据集并对其进行评估。

model.compile(loss= categorical_crossentropy , optimizer= adam ,                 metrics=[ accuracy ])  model.fit(X_train, y_train, validation_data=(X_test, y_test),                 epochs=10, batch_size=200)  scores = model.evaluate(X_test, y_test, verbose=0)  print("Large CNN Error: %.2f%%" % (100-scores[1]*100)) 

现在,可以测试上面创建的模型了。

test_images = X_test[1:5]  test_imagestest_images = test_images.reshape(test_images.shape[0], 28, 28)  print ("Test images shape: {}".format(test_images.shape))  for i, test_image in enumerate(test_images, start=1):      org_image = test_image      test_imagetest_image = test_image.reshape(1,1,28,28)      prediction = model.predict_classes(test_image, verbose=0)      print ("Predicted digit: {}".format(prediction[0]))      plt.subplot(220+i)      plt.axis( off )      plt.title("Predicted digit: {}".format(prediction[0]))      plt.imshow(org_image, cmap=plt.get_cmap( gray ))  plt.show() 

干货 | 手把手教你用115行代码做个数独解析器!

手写体数字分类模型的预测数字

神经网络的精度为98.314%!最后,保存序列模型,这样就不必在需要使用它的时候反复训练了。

# serialize model to JSON  modelmodel_json = model.to_json()  with open("model.json", "w") as json_file:      json_file.write(model_json) # serialize weights to HDF5  model.save_weights("model.h5")  print("Saved model to disk") 

更多关于手写数字识别的信息:

https://github.com/aakashjhawar/Handwritten-Digit-Recognition

下一步是加载预先训练好的模型。

json_file = open( model.json ,  r )  loaded_model_json = json_file.read()  json_file.close()  loaded_model = model_from_json(loaded_model_json)  loaded_model.load_weights("model.h5") 

调整图像大小,并将图像分割成9x9的小图像。每个小图像的数字都是从1-9。

sudoku = cv2.resize(sudoku, (450,450))  grid = np.zeros([9,9])  for i in range(9):      for j in range(9):          image = sudoku[i*50:(i+1)*50,j*50:(j+1)*50]          if image.sum() > 25000:                  grid[i][j] = identify_number(image)          else:              grid[i][j] = 0      gridgrid =  grid.astype(int) 

identify_number 函数拍摄数字图像并预测图像中的数字。

(编辑:应用网_阳江站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读