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)
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)
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])
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])
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()
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
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 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()
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()
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
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()
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()
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()
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)
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)
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)
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)
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)
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()
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)
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()
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()