Exemplo n.º 1
0
def test_se_tardata_sudokus(file_path_base):
    try:
        image_file_name = file_path_base + '.jpg'
        image = load_image(image_file_name)
    except:
        image_file_name = file_path_base + '.png'
        image = load_image(image_file_name)
    with open(file_path_base + '.txt', 'rt') as f:
        correct_parsing = f.read().strip()

    predictions, sudoku, subimage = extract_sudoku(image, classifier(), force=True)
    parsed_sudoku = predictions_to_suduko_string(predictions, oneliner=False)
    if parsed_sudoku != correct_parsing:
        predictions, sudoku, subimage = extract_sudoku(image.rotate(-90), classifier(), force=True)
        parsed_sudoku = predictions_to_suduko_string(predictions, oneliner=False)
    assert parsed_sudoku == correct_parsing


    try:
        os.remove(image_file_name)
        os.remove(file_path_base + '.txt')
        print("Deleted temporary test dir.")
        os.removedirs(os.path.dirname(file_path_base))
    except:
        pass
Exemplo n.º 2
0
def test_se_tardata_sudokus(file_path_base):
    try:
        image_file_name = file_path_base + '.jpg'
        image = load_image(image_file_name)
    except:
        image_file_name = file_path_base + '.png'
        image = load_image(image_file_name)
    with open(file_path_base + '.txt', 'rt') as f:
        correct_parsing = f.read().strip()

    predictions, sudoku, subimage = extract_sudoku(image,
                                                   classifier(),
                                                   force=True)
    parsed_sudoku = predictions_to_suduko_string(predictions, oneliner=False)
    if parsed_sudoku != correct_parsing:
        predictions, sudoku, subimage = extract_sudoku(image.rotate(-90),
                                                       classifier(),
                                                       force=True)
        parsed_sudoku = predictions_to_suduko_string(predictions,
                                                     oneliner=False)
    assert parsed_sudoku == correct_parsing

    try:
        os.remove(image_file_name)
        os.remove(file_path_base + '.txt')
        print("Deleted temporary test dir.")
        os.removedirs(os.path.dirname(file_path_base))
    except:
        pass
Exemplo n.º 3
0
def test_xanadoku_sudokus(sudoku_doc):
    if not sudoku_doc.get('verified'):
        assert True
    else:
        print(sudoku_doc.get('_id'))
        image = download_image(sudoku_doc.get('raw_image_url'))
        predictions, sudoku, subimage = extract_sudoku(image, classifier(), force=True)
        parsed_sudoku = predictions_to_suduko_string(predictions, oneliner=True)
        if parsed_sudoku != sudoku_doc.get('parsed_sudoku'):
            predictions, sudoku, subimage = extract_sudoku(image.rotate(-90), classifier(), force=True)
            parsed_sudoku = predictions_to_suduko_string(predictions, oneliner=True)
        assert parsed_sudoku == sudoku_doc.get('parsed_sudoku')
Exemplo n.º 4
0
def test_image_1_with_trained_classifier():
    image = _get_img(1)
    c = fit.KNeighborsClassifier(n_neighbors=5)
    c = fit.fit_sudokuextract_classifier(c)
    predictions, sudoku, subimage = extract_sudoku(image, c)
    parsed_sudoku = predictions_to_suduko_string(predictions)
    assert parsed_sudoku == _get_parsed_img(1)
Exemplo n.º 5
0
def test_image_2_with_trained_classifier():
    image = _get_img(2)
    c = fit.KNeighborsClassifier(n_neighbors=10)
    c = fit.fit_combined_classifier(c)
    predictions, sudoku, subimage = extract_sudoku(image, c)
    parsed_sudoku = predictions_to_suduko_string(predictions)
    assert parsed_sudoku == _get_parsed_img(2)
Exemplo n.º 6
0
 def extract_sudoku(imagePath):
     fd = urlopen(imagePath)
     imagePath = io.BytesIO(fd.read())
     img = load_image(imagePath)
     predictions, sudoku_box_images, whole_sudoku_image = extract_sudoku(
         img)
     result = predictions_to_suduko_string(predictions)
     print(result)
Exemplo n.º 7
0
def test_xanadoku_sudokus(sudoku_doc):
    if not sudoku_doc.get('verified'):
        assert True
    else:
        print(sudoku_doc.get('_id'))
        image = download_image(sudoku_doc.get('raw_image_url'))
        predictions, sudoku, subimage = extract_sudoku(image,
                                                       classifier(),
                                                       force=True)
        parsed_sudoku = predictions_to_suduko_string(predictions,
                                                     oneliner=True)
        if parsed_sudoku != sudoku_doc.get('parsed_sudoku'):
            predictions, sudoku, subimage = extract_sudoku(image.rotate(-90),
                                                           classifier(),
                                                           force=True)
            parsed_sudoku = predictions_to_suduko_string(predictions,
                                                         oneliner=True)
        assert parsed_sudoku == sudoku_doc.get('parsed_sudoku')
Exemplo n.º 8
0
#data.fetch_all_xanadoku_images('~/Documents/SudokuExtract_Test', 'bjornbar')

#image_url = "https://static-secure.guim.co.uk/sys-images/Guardian/Pix/pictures/2013/2/27/1361977880123/Sudoku2437easy.jpg"
the_image = download_image(
    "https://res.cloudinary.com/hzlcxa6rf/image/upload/56d9d0df9f94ac0009519152"
)

#the_image = load_image('~/Documents/SudokuExtract_Test/56d9aad9ae834500099af4da.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Test/56e006a63e921a0009d40071.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Test/56e0053e3e921a0009d40070.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Test/56e0a6237303ae0009e9a994.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Train/i1.png')
#the_image = load_image('tests/img18.jpg')

#the_image = the_image.rotate(-90)

preds, sudoku, subimage = extract_sudoku(the_image, force=True)

import matplotlib.pyplot as plt
ax = plt.subplot2grid((9, 9 + 9), (0, 0), colspan=9, rowspan=9)
ax.imshow(subimage, plt.cm.gray)
ax.axis('off')

for k in range(len(sudoku)):
    for kk in range(len(sudoku[k])):
        ax = plt.subplot2grid((9, 9 + 9), (k, 9 + kk))
        ax.imshow(sudoku[k][kk], plt.cm.gray)
        ax.set_title(str(preds[k, kk]))
        ax.axis('off')
plt.show()
Exemplo n.º 9
0
#data.fetch_all_xanadoku_images('~/Documents/SudokuExtract_Test', 'bjornbar')

#image_url = "https://static-secure.guim.co.uk/sys-images/Guardian/Pix/pictures/2013/2/27/1361977880123/Sudoku2437easy.jpg"
the_image = download_image("https://res.cloudinary.com/hzlcxa6rf/image/upload/56d9d0df9f94ac0009519152")

#the_image = load_image('~/Documents/SudokuExtract_Test/56d9aad9ae834500099af4da.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Test/56e006a63e921a0009d40071.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Test/56e0053e3e921a0009d40070.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Test/56e0a6237303ae0009e9a994.jpg')
#the_image = load_image('~/Documents/SudokuExtract_Train/i1.png')
#the_image = load_image('tests/img18.jpg')

#the_image = the_image.rotate(-90)

preds, sudoku, subimage = extract_sudoku(the_image, force=True)

import matplotlib.pyplot as plt
ax = plt.subplot2grid((9, 9+9), (0, 0), colspan=9, rowspan=9)
ax.imshow(subimage, plt.cm.gray)
ax.axis('off')

for k in range(len(sudoku)):
    for kk in range(len(sudoku[k])):
        ax = plt.subplot2grid((9, 9 + 9), (k, 9+kk))
        ax.imshow(sudoku[k][kk], plt.cm.gray)
        ax.set_title(str(preds[k, kk]))
        ax.axis('off')
plt.show()

Exemplo n.º 10
0
def _process_an_image(image, correct_sudoku):
    predictions, sudoku, subimage = extract_sudoku(image, classifier())
    parsed_sudoku = predictions_to_suduko_string(predictions)
    assert parsed_sudoku == correct_sudoku
Exemplo n.º 11
0
json_file = open('model.json', 'r')
loaded_model_json = json_file.read()
json_file.close()
loaded_model = model_from_json(loaded_model_json)
# load weights into new model
loaded_model.load_weights("model.h5")
print("Loaded model from disk")

loaded_model.compile(optimizer='adam',
                     loss='categorical_crossentropy',
                     metrics=['accuracy'])

from os import sys
from sudokuextract.extract import extract_sudoku, load_image, predictions_to_suduko_string

img = load_image(sys.argv[1])
predictions, sudoku_box_images, whole_sudoku_image = extract_sudoku(img)
numbers = predictions_to_suduko_string(predictions)

numbers = numbers.replace('\n', '')
numbers = np.array(list((numbers)))
#numbers_float = np.array(numbers).astype(np.float32).reshape(-1,9,9)
numbers_int = np.array(numbers).astype(np.int32).reshape(9, 9)
print(numbers_int)
numbers = numbers_int.reshape(-1, 9, 9)
#numbers = numbers.reshape(-1,9,9)
numbers = to_categorical(numbers).astype('float32')
smart_guesses = batch_smart_solve(numbers.argmax(3), loaded_model)
print(smart_guesses)
Exemplo n.º 12
0
def main(image=None):

    HARDEST = """
    +-------+-------+-------+
    | 8 0 0 | 0 0 0 | 0 0 0 |
    | 0 0 3 | 6 0 0 | 0 0 0 |
    | 0 7 0 | 0 9 0 | 2 0 0 |
    +-------+-------+-------+
    | 0 5 0 | 0 0 7 | 0 0 0 |
    | 0 0 0 | 0 4 5 | 7 0 0 |
    | 0 0 0 | 1 0 0 | 0 3 0 |
    +-------+-------+-------+
    | 0 0 1 | 0 0 0 | 0 6 8 |
    | 0 0 8 | 5 0 0 | 0 1 0 |
    | 0 9 0 | 0 0 0 | 4 0 0 |
    +-------+-------+-------+
    """

    PROBLEM_GRID = """
    +-------+-------+-------+
    | 0 0 0 | 0 0 0 | 0 0 1 |
    | 0 1 2 | 0 0 0 | 0 0 0 |
    | 0 0 0 | 0 0 0 | 2 0 0 |
    +-------+-------+-------+
    | 0 0 0 | 0 0 0 | 0 0 2 |
    | 0 2 0 | 0 0 0 | 0 0 0 |
    | 0 0 0 | 0 0 0 | 0 0 0 |
    +-------+-------+-------+
    | 0 0 0 | 0 0 0 | 1 2 0 |
    | 1 0 0 | 0 0 2 | 0 0 0 |
    | 0 0 0 | 1 0 0 | 0 0 0 |
    +-------+-------+-------+
    """

    CONST = """
    B9+B8+C1+H4+H4=23
    A5+D7+I5+G8+B3+A5=19
    I2+I3+F2+E9=15
    I7+H8+C2+D9=26
    I6+A5+I3+B8+C3=20
    I7+D9+B6+A8+A3+C4=27
    C7+H9+I7+B2+H8+G3=31
    D3+I8+A4+I6=27
    F5+B8+F8+I7+F1=33
    A2+A8+D7+E4=21
    C1+I4+C2+I1+A4=20
    F8+C1+F6+D3+B6=25
    """

    if image != None:
        try:
            print("\n[+] Extracting sudoku puzzle from: {}".format(image))
            img = load_image(image)
            predictions, sudoku_box_images, whole_sudoku_image = extract_sudoku(
                img)
            problem = predictions_to_suduko_string(predictions)
        except SudokuExtractError:
            print("[!] Could not extract Sudoku grid from the image: {}\n".
                  format(image))
            exit(0)
    else:
        problem = HARDEST

    s = Sudoku(problem=problem)
    print("[+] Problem Puzzle:\n{}".format(s.get_grid(s.problem)))
    s.solve_z3()
    print("Solved: {}\n".format(s.is_solved()))
    print(s.get_side_by_side(s.problem, s.solution))
Exemplo n.º 13
0
def _process_an_image(image, correct_sudoku):
    predictions, sudoku, subimage = extract_sudoku(image, classifier())
    parsed_sudoku = predictions_to_suduko_string(predictions)
    assert parsed_sudoku == correct_sudoku