使用Python+OpenCV实现具有数字识别和整数线性规划的自动数独(数字位置)求解器...

数独是一个基于逻辑的数字放置难题,它由81个单元格组成,分为9列9行。该游戏的目标是用数字1–9填充每个单元格,以便在每一行,每一列和每一块中都没有重复的数字。

在这篇文章中,旨在介绍一种基于数字识别和基于整数线性规划的自动数独求解器,它使用以下内容:Keras(基于MNIST数据库)和OpenCV用于数字识别,而PuLP用于整数线性规划。

另外,计划详细介绍整数线性规划部分,只稍微涉及数字识别和提取部分(图像处理)

MNIST数据库是手写数字的大型数据库,通常用于训练各种图像处理系统。该数据库还广泛用于机器学习领域的训练和测试。

这篇文章的其余部分安排如下:

  1. 使用OpenCV进行数字提取并使用Keras进行数字识别

  2. 用于数独解谜的带有PuLP的公式和Python3代码

  3. 数独游戏图像上的数字位置

  4. 用示例数独难题测试所开发的求解器

图1 自动数独求解器的概念图

1. 使用OpenCV进行数字提取并使用Keras进行数字识别

在本节中,将解释用于数字识别的图像处理概述。下面,对示例代码进行了简单描述。

  • 图像处理:高斯模糊,阈值处理,调整大小以使用基于MNIST的数字识别模型进行预测

  • 数字提取:基于轮廓,裁剪和变形图像

  • 数字识别:基于MNIST的数字识别模型(当我使用现有的经过训练的模型时,我将不提供用于数字识别建模的示例代码。)

第1部分 设置

import cv2
import pulp
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
from PIL import Image
from itertools import product
from tensorflow.keras.models import load_model
from keras.preprocessing import image

MNIST_MODEL_PATH = 'model/mnist_model.h5' # trained model path
SUDOKU_PUZZLE_IMAGE_PATH = 'image/sample_sudoku_puzzle.png' # sample sudoku puzzle image path

第2部分 数字提取和识别函数

def _image_processing_for_extracting_digits(_SUDOKU_PUZZLE_IMAGE_PATH):
    
    # read image as gray scale
    _image = cv2.imread(_SUDOKU_PUZZLE_IMAGE_PATH)
    _gray_scale_image = cv2.cvtColor(_image, cv2.COLOR_BGR2GRAY)
    
    # applying gaussian blurring to reduce background noise
    _gaussian_blurred_gray_scale_image = cv2.GaussianBlur(_gray_scale_image,(1,1),cv2.BORDER_DEFAULT)
    
    # applying inverse binary threshold
    _ret, _inverse_binary_threshold_image = cv2.threshold(_gray_scale_image, 180, 255,cv2.THRESH_BINARY_INV)
    
    # applying probabilistic hough transform 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值