Beispiel #1
0
def save_parse_image_segments():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(
        open_image(question.diagram_path))
    image = image_segment_parse.diagram_image_segment.segmented_image
    file_path = "/Users/minjoon/Desktop/diagram.png"
    cv2.imwrite(file_path, image)
Beispiel #2
0
def test_solving():
    pk = 973
    questions = geoserver_interface.download_questions(pk)
    question = questions.values()[0]

    label_data = geoserver_interface.download_labels(pk)[pk]
    diagram = open_image(question.diagram_path)
    graph_parse = diagram_to_graph_parse(diagram)
    match_parse = parse_match_from_known_labels(graph_parse, label_data)

    AB = v('AB', 'line')
    AC = v('AC', 'line')
    BC = v('BC', 'line')
    ED = v('ED', 'line')
    AE = v('AE', 'line')
    E = v('E', 'point')
    D = v('D', 'point')
    x = v('x', 'number')
    p1 = f('LengthOf', AB) == f('LengthOf', AC)
    p2 = f('IsMidpointOf', E, AB)
    p3 = f('IsMidpointOf', D, AC)
    p4 = f('LengthOf', AE) == x
    p5 = f('LengthOf', ED) == 4
    qn = f('LengthOf', BC)
    confident_atoms = parse_confident_formulas(graph_parse)
    text_atoms = ground_formula_nodes(match_parse, [p1, p2, p3, p4, p5])
    atoms = confident_atoms + text_atoms
    grounded_qn = ground_formula_nodes(match_parse, [qn])[0]

    ns = NumericSolver(atoms)

    print ns.evaluate(grounded_qn)
Beispiel #3
0
def test_parse_graph():
    questions = geoserver_interface.download_questions(973).values()
    for question in questions:
        image_segment_parse = parse_image_segments(
            open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected_primitive_parse = select_primitives(primitive_parse)
        core_parse = parse_core(selected_primitive_parse)
        graph_parse = parse_graph(core_parse)

        print("Confident information in the diagram:")
        for variable_node in parse_confident_atoms(graph_parse):
            print variable_node

        core_parse.display_points()
        lines = get_all_instances(graph_parse, 'line')
        circles = get_all_instances(graph_parse, 'circle')
        arcs = get_all_instances(graph_parse, 'arc')
        angles = get_all_instances(graph_parse, 'angle')
        print("Displaying lines...")
        for key, line in lines.iteritems():
            graph_parse.display_instances([line])
        print("Displaying circles...")
        for key, circle in circles.iteritems():
            graph_parse.display_instances([circle])
        print("Displaying arcs...")
        for key, arc in arcs.iteritems():
            graph_parse.display_instances([arc])
        print("Displaying angles...")
        for key, angle in angles.iteritems():
            graph_parse.display_instances([angle])
Beispiel #4
0
def test_parse_graph():
    questions = geoserver_interface.download_questions(973).values()
    for question in questions:
        image_segment_parse = parse_image_segments(open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected_primitive_parse = select_primitives(primitive_parse)
        core_parse = parse_core(selected_primitive_parse)
        graph_parse = parse_graph(core_parse)

        print("Confident information in the diagram:")
        for variable_node in parse_confident_atoms(graph_parse):
            print variable_node

        core_parse.display_points()
        lines = get_all_instances(graph_parse, 'line')
        circles = get_all_instances(graph_parse, 'circle')
        arcs = get_all_instances(graph_parse, 'arc')
        angles = get_all_instances(graph_parse, 'angle')
        print("Displaying lines...")
        for key, line in lines.iteritems():
            graph_parse.display_instances([line])
        print("Displaying circles...")
        for key, circle in circles.iteritems():
            graph_parse.display_instances([circle])
        print("Displaying arcs...")
        for key, arc in arcs.iteritems():
            graph_parse.display_instances([arc])
        print("Displaying angles...")
        for key, angle in angles.iteritems():
            graph_parse.display_instances([angle])
Beispiel #5
0
def test_ground_atoms():
    pk = 973
    questions = geoserver_interface.download_questions(pk)
    question = questions.values()[0]

    label_data = geoserver_interface.download_labels(pk)[pk]
    diagram = open_image(question.diagram_path)
    graph_parse = diagram_to_graph_parse(diagram)
    match_parse = parse_match_from_known_labels(graph_parse, label_data)

    AB = v('AB', 'line')
    AC = v('AC', 'line')
    BC = v('BC', 'line')
    ED = v('ED', 'line')
    AE = v('AE', 'line')
    E = v('E', 'point')
    D = v('D', 'point')
    x = v('x', 'number')
    p1 = f('LengthOf', AB) == f('LengthOf', AC)
    p2 = f('IsMidpointOf', E, AB)
    p3 = f('IsMidpointOf', D, AC)
    p4 = f('LengthOf', AE) == x
    p5 = f('LengthOf', ED) == 4
    qn = f('LengthOf', BC)

    grounded_atoms = ground_formula_nodes(match_parse,
                                          [p1, p2, p3, p4, p5, qn])
    for grounded_atom in grounded_atoms:
        print grounded_atom

    graph_parse.core_parse.display_points()
Beispiel #6
0
def test_solving():
    pk = 973
    questions = geoserver_interface.download_questions(pk)
    question = questions.values()[0]

    label_data = geoserver_interface.download_labels(pk)[pk]
    diagram = open_image(question.diagram_path)
    graph_parse = diagram_to_graph_parse(diagram)
    match_parse = parse_match_from_known_labels(graph_parse, label_data)

    AB = v('AB', 'line')
    AC = v('AC', 'line')
    BC = v('BC', 'line')
    ED = v('ED', 'line')
    AE = v('AE', 'line')
    E = v('E', 'point')
    D = v('D', 'point')
    x = v('x', 'number')
    p1 = f('LengthOf', AB) == f('LengthOf', AC)
    p2 = f('IsMidpointOf', E, AB)
    p3 = f('IsMidpointOf', D, AC)
    p4 = f('LengthOf', AE) == x
    p5 = f('LengthOf', ED) == 4
    qn = f('LengthOf', BC)
    confident_atoms = parse_confident_formulas(graph_parse)
    text_atoms = ground_formula_nodes(match_parse, [p1, p2, p3, p4, p5])
    atoms = confident_atoms + text_atoms
    grounded_qn = ground_formula_nodes(match_parse, [qn])[0]

    ns = NumericSolver(atoms)

    print ns.evaluate(grounded_qn)
Beispiel #7
0
def test_ground_atoms():
    pk = 973
    questions = geoserver_interface.download_questions(pk)
    question = questions.values()[0]

    label_data = geoserver_interface.download_labels(pk)[pk]
    diagram = open_image(question.diagram_path)
    graph_parse = diagram_to_graph_parse(diagram)
    match_parse = parse_match_from_known_labels(graph_parse, label_data)

    AB = v('AB', 'line')
    AC = v('AC', 'line')
    BC = v('BC', 'line')
    ED = v('ED', 'line')
    AE = v('AE', 'line')
    E = v('E', 'point')
    D = v('D', 'point')
    x = v('x', 'number')
    p1 = f('LengthOf', AB) == f('LengthOf', AC)
    p2 = f('IsMidpointOf', E, AB)
    p3 = f('IsMidpointOf', D, AC)
    p4 = f('LengthOf', AE) == x
    p5 = f('LengthOf', ED) == 4
    qn = f('LengthOf', BC)

    grounded_atoms = ground_formula_nodes(match_parse, [p1, p2, p3, p4, p5, qn])
    for grounded_atom in grounded_atoms:
        print grounded_atom

    graph_parse.core_parse.display_points()
Beispiel #8
0
def save_parse_primitives():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(open_image(question.diagram_path))
    primitive_parse = parse_primitives(image_segment_parse)
    image = primitive_parse.get_image_primitives()
    file_path = "/Users/minjoon/Desktop/primitives.png"
    cv2.imwrite(file_path, image)
def question_to_graph_parse(question):
    diagram = open_image(question.diagram_path)
    image_segment_parse = parse_image_segments(diagram)
    primitive_parse = parse_primitives(image_segment_parse)
    selected_primitive_parse = select_primitives(primitive_parse)
    core_parse = parse_core(selected_primitive_parse)
    graph_parse = parse_graph(core_parse)
    return graph_parse
Beispiel #10
0
def question_to_graph_parse(question):
    diagram = open_image(question.diagram_path)
    image_segment_parse = parse_image_segments(diagram)
    primitive_parse = parse_primitives(image_segment_parse)
    selected_primitive_parse = select_primitives(primitive_parse)
    core_parse = parse_core(selected_primitive_parse)
    graph_parse = parse_graph(core_parse)
    return graph_parse
Beispiel #11
0
def save_parse_primitives():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(
        open_image(question.diagram_path))
    primitive_parse = parse_primitives(image_segment_parse)
    image = primitive_parse.get_image_primitives()
    file_path = "/Users/minjoon/Desktop/primitives.png"
    cv2.imwrite(file_path, image)
Beispiel #12
0
def test_select_primitives():
    question_dict = geoserver_interface.download_questions('test')
    for key in sorted(question_dict.keys()):
        question = question_dict[key]
        print(key)
        image_segment_parse = parse_image_segments(open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected = select_primitives(primitive_parse)
        selected.display_primitives()
Beispiel #13
0
def test_parse_image_segments():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(
        open_image(question.diagram_path))
    image_segment_parse.diagram_image_segment.display_binarized_segmented_image(
    )
    for idx, label_image_segment in image_segment_parse.label_image_segments.iteritems(
    ):
        label_image_segment.display_segmented_image()
Beispiel #14
0
def _annotated_unit_test(query):
    questions = geoserver_interface.download_questions(query)
    all_annotations = geoserver_interface.download_semantics(query)
    pk, question = questions.items()[0]

    choice_formulas = get_choice_formulas(question)
    label_data = geoserver_interface.download_labels(pk)[pk]
    diagram = open_image(question.diagram_path)
    graph_parse = diagram_to_graph_parse(diagram)
    core_parse = graph_parse.core_parse
    # core_parse.display_points()
    # core_parse.primitive_parse.display_primitives()
    match_parse = parse_match_from_known_labels(graph_parse, label_data)
    match_formulas = parse_match_formulas(match_parse)
    diagram_formulas = parse_confident_formulas(graph_parse)
    all_formulas = match_formulas + diagram_formulas
    for number, sentence_words in question.sentence_words.iteritems():
        syntax_parse = stanford_parser.get_best_syntax_parse(sentence_words)
        annotation_nodes = [annotation_to_semantic_tree(syntax_parse, annotation)
                            for annotation in all_annotations[pk][number].values()]
        expr_formulas = {key: prefix_to_formula(expression_parser.parse_prefix(expression))
                         for key, expression in question.sentence_expressions[number].iteritems()}
        truth_expr_formulas, value_expr_formulas = _separate_expr_formulas(expr_formulas)
        text_formula_parse = semantic_trees_to_text_formula_parse(annotation_nodes)
        completed_formulas = complete_formulas(text_formula_parse)
        grounded_formulas = [ground_formula(match_parse, formula, value_expr_formulas)
                             for formula in completed_formulas+truth_expr_formulas]
        text_formulas = filter_formulas(flatten_formulas(grounded_formulas))
        all_formulas.extend(text_formulas)

    reduced_formulas = reduce_formulas(all_formulas)
    for reduced_formula in reduced_formulas:
        score = evaluate(reduced_formula, core_parse.variable_assignment)
        scores = [evaluate(child, core_parse.variable_assignment) for child in reduced_formula.children]
        print reduced_formula, score, scores
    # core_parse.display_points()

    ans = solve(reduced_formulas, choice_formulas, assignment=core_parse.variable_assignment)
    print "ans:", ans

    if choice_formulas is None:
        attempted = True
        if abs(ans - float(question.answer)) < 0.01:
            correct = True
        else:
            correct = False
    else:
        attempted = True
        c = max(ans.iteritems(), key=lambda pair: pair[1].conf)[0]
        if c == int(question.answer):
            correct = True
        else:
            correct = False

    result = SimpleResult(query, False, attempted, correct)
    return result
Beispiel #15
0
def _annotated_unit_test(query):
    questions = geoserver_interface.download_questions(query)
    all_annotations = geoserver_interface.download_semantics(query)
    pk, question = questions.items()[0]

    choice_formulas = get_choice_formulas(question)
    label_data = geoserver_interface.download_labels(pk)[pk]
    diagram = open_image(question.diagram_path)
    graph_parse = diagram_to_graph_parse(diagram)
    core_parse = graph_parse.core_parse
    # core_parse.display_points()
    # core_parse.primitive_parse.display_primitives()
    match_parse = parse_match_from_known_labels(graph_parse, label_data)
    match_formulas = parse_match_formulas(match_parse)
    diagram_formulas = parse_confident_formulas(graph_parse)
    all_formulas = match_formulas + diagram_formulas
    for number, sentence_words in question.sentence_words.iteritems():
        syntax_parse = stanford_parser.get_best_syntax_parse(sentence_words)
        annotation_nodes = [annotation_to_semantic_tree(syntax_parse, annotation)
                            for annotation in all_annotations[pk][number].values()]
        expr_formulas = {key: prefix_to_formula(expression_parser.parse_prefix(expression))
                         for key, expression in question.sentence_expressions[number].iteritems()}
        truth_expr_formulas, value_expr_formulas = _separate_expr_formulas(expr_formulas)
        text_formula_parse = semantic_trees_to_text_formula_parse(annotation_nodes)
        completed_formulas = complete_formulas(text_formula_parse)
        grounded_formulas = [ground_formula(match_parse, formula, value_expr_formulas)
                             for formula in completed_formulas+truth_expr_formulas]
        text_formulas = filter_formulas(flatten_formulas(grounded_formulas))
        all_formulas.extend(text_formulas)

    reduced_formulas = reduce_formulas(all_formulas)
    for reduced_formula in reduced_formulas:
        score = evaluate(reduced_formula, core_parse.variable_assignment)
        scores = [evaluate(child, core_parse.variable_assignment) for child in reduced_formula.children]
        print reduced_formula, score, scores
    # core_parse.display_points()

    ans = solve(reduced_formulas, choice_formulas, assignment=core_parse.variable_assignment)
    print "ans:", ans

    if choice_formulas is None:
        attempted = True
        if abs(ans - float(question.answer)) < 0.01:
            correct = True
        else:
            correct = False
    else:
        attempted = True
        c = max(ans.iteritems(), key=lambda pair: pair[1].conf)[0]
        if c == int(question.answer):
            correct = True
        else:
            correct = False

    result = SimpleResult(query, False, attempted, correct)
    return result
Beispiel #16
0
def test_select_primitives():
    question_dict = geoserver_interface.download_questions('test')
    for key in sorted(question_dict.keys()):
        question = question_dict[key]
        print(key)
        image_segment_parse = parse_image_segments(
            open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected = select_primitives(primitive_parse)
        selected.display_primitives()
Beispiel #17
0
def test_parse_match_from_known_labels():
    questions = geoserver_interface.download_questions(977)
    for pk, question in questions.iteritems():
        label_data = geoserver_interface.download_labels(pk)[pk]
        diagram = open_image(question.diagram_path)
        graph_parse = diagram_to_graph_parse(diagram)
        match_parse = parse_match_from_known_labels(graph_parse, label_data)
        for key, value in match_parse.match_dict.iteritems():
            print key, value
        graph_parse.core_parse.display_points()
Beispiel #18
0
def test_parse_match_from_known_labels():
    questions = geoserver_interface.download_questions(977)
    for pk, question in questions.iteritems():
        label_data = geoserver_interface.download_labels(pk)[pk]
        diagram = open_image(question.diagram_path)
        graph_parse = diagram_to_graph_parse(diagram)
        match_parse = parse_match_from_known_labels(graph_parse, label_data)
        for key, value in match_parse.match_dict.iteritems():
            print key, value
        graph_parse.core_parse.display_points()
Beispiel #19
0
def test_parse_match_atoms():
    questions = geoserver_interface.download_questions(977)
    for pk, question in questions.iteritems():
        label_data = geoserver_interface.download_labels(pk)[pk]
        diagram = open_image(question.diagram_path)
        graph_parse = diagram_to_graph_parse(diagram)
        match_parse = parse_match_from_known_labels(graph_parse, label_data)
        match_atoms = parse_match_formulas(match_parse)
        for match_atom in match_atoms:
            print match_atom
        graph_parse.core_parse.display_points()
Beispiel #20
0
def save_select_primitives():
    question_dict = geoserver_interface.download_questions('test')
    folder_path = "/Users/minjoon/Desktop/selected/"
    for key in sorted(question_dict.keys()):
        question = question_dict[key]
        print(key)
        image_segment_parse = parse_image_segments(open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected = select_primitives(primitive_parse)
        image = selected.get_image_primitives()
        cv2.imwrite(os.path.join(folder_path, "%s.png" % str(question.key)), image)
Beispiel #21
0
def test_parse_match_atoms():
    questions = geoserver_interface.download_questions(977)
    for pk, question in questions.iteritems():
        label_data = geoserver_interface.download_labels(pk)[pk]
        diagram = open_image(question.diagram_path)
        graph_parse = diagram_to_graph_parse(diagram)
        match_parse = parse_match_from_known_labels(graph_parse, label_data)
        match_atoms = parse_match_formulas(match_parse)
        for match_atom in match_atoms:
            print match_atom
        graph_parse.core_parse.display_points()
Beispiel #22
0
def save_select_primitives():
    question_dict = geoserver_interface.download_questions('test')
    folder_path = "/Users/minjoon/Desktop/selected/"
    for key in sorted(question_dict.keys()):
        question = question_dict[key]
        print(key)
        image_segment_parse = parse_image_segments(
            open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected = select_primitives(primitive_parse)
        image = selected.get_image_primitives()
        cv2.imwrite(os.path.join(folder_path, "%s.png" % str(question.key)),
                    image)
Beispiel #23
0
def save_parse_core():
    question_dict = geoserver_interface.download_questions('test')
    folder_path = "/Users/minjoon/Desktop/core/"
    for key in sorted(question_dict.keys()):
        print(key)
        question = question_dict[key]
        file_path = os.path.join(folder_path, str(question.key) + ".png")
        if os.path.isfile(file_path):
            continue
        image_segment_parse = parse_image_segments(open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected = select_primitives(primitive_parse)
        core_parse = parse_core(selected)
        image = core_parse.get_image_points()
        cv2.imwrite(file_path, image)
Beispiel #24
0
def save_parse_core():
    question_dict = geoserver_interface.download_questions('test')
    folder_path = "/Users/minjoon/Desktop/core/"
    for key in sorted(question_dict.keys()):
        print(key)
        question = question_dict[key]
        file_path = os.path.join(folder_path, str(question.key) + ".png")
        if os.path.isfile(file_path):
            continue
        image_segment_parse = parse_image_segments(
            open_image(question.diagram_path))
        primitive_parse = parse_primitives(image_segment_parse)
        selected = select_primitives(primitive_parse)
        core_parse = parse_core(selected)
        image = core_parse.get_image_points()
        cv2.imwrite(file_path, image)
Beispiel #25
0
from geosolver.diagram.parse_image_segments import parse_image_segments
from geosolver.diagram.parse_primitives import parse_primitives
from geosolver.diagram.select_primitives import select_primitives
from geosolver.diagram.parse_core import parse_core
from geosolver.diagram.parse_graph import parse_graph
from geosolver.diagram.get_instances import get_all_instances

from geosolver.utils import prep
from geosolver.diagram.draw_on_image import *
import cv2
# demonstrate the image & parse image segments
image_path = 'tmp/all_images/8765.png'

image_segment_parse = parse_image_segments(prep.open_image(image_path))
# image_segment_parse.diagram_image_segment.display_segmented_image()
# prep.save_image(image_segment_parse.diagram_image_segment.segmented_image, 'tmp/t.png')
cv2.imwrite('tmp/results/source1.png', image_segment_parse.diagram_image_segment.segmented_image)
cv2.imwrite('tmp/results/sourceb.png', 255-image_segment_parse.diagram_image_segment.binarized_segmented_image)

# parse the primitive
primitive_parse = parse_primitives(image_segment_parse)
# primitive_parse.display_primitives()
cv2.imwrite('tmp/results/primitive1.png', primitive_parse.get_image_primitives())

# select the best set of primitive
selected = select_primitives(primitive_parse)
# selected.display_primitives()
cv2.imwrite('tmp/results/selected1.png', selected.get_image_primitives())

# point clustering
core_parse = parse_core(selected)
Beispiel #26
0
def test_parse_primitives():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(open_image(question.diagram_path))
    primitive_parse = parse_primitives(image_segment_parse)
    primitive_parse.display_primitives()
Beispiel #27
0
def save_parse_image_segments():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(open_image(question.diagram_path))
    image = image_segment_parse.diagram_image_segment.segmented_image
    file_path = "/Users/minjoon/Desktop/diagram.png"
    cv2.imwrite(file_path, image)
Beispiel #28
0
def test_parse_image_segments():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(open_image(question.diagram_path))
    image_segment_parse.diagram_image_segment.display_binarized_segmented_image()
    for idx, label_image_segment in image_segment_parse.label_image_segments.iteritems():
        label_image_segment.display_segmented_image()
Beispiel #29
0
def test_parse_primitives():
    question = geoserver_interface.download_questions(1037).values()[0]
    image_segment_parse = parse_image_segments(
        open_image(question.diagram_path))
    primitive_parse = parse_primitives(image_segment_parse)
    primitive_parse.display_primitives()