示例#1
0
文件: sudoku.py 项目: shurtado/Sudoku
def main():

    if len(sys.argv) != 3:
        print ">python sudoku.py -auto image"
        print ">python sudoku.py -manual image"
        sys.exit()

    image = Sudoku(sys.argv[2])

    # PART ONE: THRESHOLD THE IMAGE
    image.threshold()

    # PART TWO: FIND THE CORNERS
    if sys.argv[1] == "-auto":
        image.findCorners()
    else:
        image.findCornersManually()

    # PART THREE: CORRECT THE PERSPECTIVE
    #  1. get the perspective transformation matrix using the four corners
    #  2. perform the perspective transformation
    image.correctPerspective()

    # PART FOUR: CROP THE IMAGE
    image.cropImage()

    # PART FOUR: FIND THE REGIONS
    image.findRegions()

    # PART FIVE: CALL THE SUDOKU SOLVER
    solved = sudokuSolver.solve(image.toString)
    print solved
def sudoku_main(image):

    ## find sudoku contour
    sudoku_contour = find_sudoku(image)
    if sudoku_contour is None:
        return image

    ## get corners of the contour
    corners = get_corners(sudoku_contour)
    if corners is None:
        return image
    corners = sort_corners(corners)

    ## get top view of the board in square shape
    top_view, transformation_matrix, original_shape = get_top_view(
        image, corners)
    if top_view is None:
        return image

    ## OCR
    grid = read_grid(top_view)
    if grid is None:
        return image
    print(grid)

    # test sudoku
    test = "740030010019068502000004300056370001001800095090020600103407200500200008080001470"
    if grid == test:
        print("true")

    # solvong the sudoku
    solved = solve(test)

    # write the solution over the top view
    empty_boxes = [[0 for j in range(9)] for i in range(9)]
    k = 0
    for i in range(9):
        for j in range(9):
            if grid[k] == '0':
                empty_boxes[i][j] = 1
            k = k + 1
    written = write_solution(top_view, empty_boxes, solved)

    # covert the top view to original size
    resized = cv2.resize(top_view, (original_shape[1], original_shape[0]),
                         interpolation=cv2.INTER_CUBIC)
    # reverse perspective transform
    warped = cv2.warpPerspective(resized,
                                 transformation_matrix,
                                 (image.shape[1], image.shape[0]),
                                 flags=cv2.WARP_INVERSE_MAP)
    # overlay on the original image
    result = np.where(warped.sum(axis=-1, keepdims=True) != 0, warped, image)

    return result
示例#3
0
    def place(self, val):
        row, col = self.selected
        if self.cubes[row][col].value == 0:
            self.cubes[row][col].set(val)
            self.update_model()

            if valid(self.model, val, (row, col)) and solve(self.model):
                return True
            else:
                self.cubes[row][col].set(0)
                self.cubes[row][col].set_temp(0)
                self.update_model()
                return False
def main():
  resizeImageIntoSquare(input("Enter the name of the image file: "))
  makeIndividualSquares("img_02.png")
  centerCubes()
  grid=makeGrid()
  print("The puzzle is: ")
  sudokuSolver.printGrid(grid)
  if(sudokuSolver.solve(grid)):
    print("\n\nThe solved grid is: ")
    sudokuSolver.printGrid(grid)
  else:
    print("Grid is not solvable")
  deleteAllEvidence()
示例#5
0
def solve(bo):
    find = find_empty(bo)
    if not find:
        return True
    else:
        row, col = find

    for i in range(1, 10):
        if valid(bo, i, (row, col)):
            bo[row][col] = i

            if solve(bo):
                return True

            bo[row][col] = 0

    return False
示例#6
0
biggest = reorder(biggest)
pts1 = np.float32(np.reshape(biggest, (4, 2)))
pts2 = np.float32([[0, 0], [width - 1, 0], [0, height - 1],
                   [width - 1, height - 1]])
M = cv.getPerspectiveTransform(pts1, pts2)
new = cv.warpPerspective(img, M, (width, height))
new = removelines(new, 5)
#progress = []
#progress.append(np.array(cv.resize(cv.cvtColor(image,cv.COLOR_GRAY2BGR),(450,450)),np.uint8))

boxes = split(new)
#a = cropbox(boxes) #### REMEMBER TO NORMALIZE "a" ####
a = tf.keras.utils.normalize(a, axis=1)
#plt.imshow(a[25],cmap=plt.cm.binary_r)

pred = model.predict(a)
pred = pred.argmax(axis=1) * (np.amax(pred, axis=1) > 0.8)
progress.append(
    np.array(dispNo(pred, np.zeros((450, 450)), color=(255, 0, 255)),
             np.uint8))

pos = (pred == 0) * np.ones(81)
pos

board = pred.reshape((9, 9))
try:
    sudokuSolver.solve(board)
except:
    pass
board
示例#7
0
import detector
import sudokuSolver

sudoku = detector.detect_sudoku("sudoku4.jpg")
print(sudoku)
print(sudokuSolver.solve(sudoku))
print(sudoku)