def ground(self, imagefile, segments, _=None): """asks the user to label each segment as either a character or "<" for unknown""" print( "For each shown segment, please write the character that it represents, or spacebar if it's not a " "character. To undo a classification, press backspace. Press ESC when completed, arrow keys to move" ) i = 0 if imagefile.is_grounded: classes = classes_from_numpy(imagefile.ground.classes) segments = imagefile.ground.segments else: classes = [BLANK_CLASS] * len(segments) done = False allowed_chars = list( map(ord, string.digits + string.ascii_letters + string.punctuation)) while not done: image = imagefile.image.copy() draw_segments(image, [segments[i]]) draw_classes(image, segments, classes) key = show_image_and_wait_for_key(image, "segment " + str(i)) if key == 27: # ESC break elif key == 8: # backspace classes[i] = BLANK_CLASS i += 1 elif key == 32: # space classes[i] = NOT_A_SEGMENT i += 1 elif key == 65361: # <- i -= 1 elif key == 65363: # -> i += 1 elif key in allowed_chars: classes[i] = unichr(key) i += 1 if i >= len(classes): i = 0 if i < 0: i = len(classes) - 1 classes = numpy.array(classes) is_segment = classes != NOT_A_SEGMENT classes = classes[is_segment] segments = segments[is_segment] classes = list(classes) classes = classes_to_numpy(classes) print("classified ", numpy.count_nonzero(classes != classes_to_numpy(BLANK_CLASS)), "characters out of", max(classes.shape)) imagefile.set_ground(segments, classes)
def ground(self, imagefile, segments, _=None): '''asks the user to label each segment as either a character or "<" for unknown''' print '''For each shown segment, please write the character that it represents, or spacebar if it's not a character. To undo a classification, press backspace. Press ESC when completed, arrow keys to move''' i = 0 if imagefile.isGrounded(): classes = classes_from_numpy(imagefile.ground.classes) segments = imagefile.ground.segments else: classes = [BLANK_CLASS] * len( segments ) #char(10) is newline. it represents a non-assigned label, and will b filtered done = False allowed_chars = map( ord, string.digits + string.letters + string.punctuation) while not done: image = imagefile.image.copy() draw_segments(image, [segments[i]]) draw_classes(image, segments, classes) key = show_image_and_wait_for_key( image, "segment " + str(i), return_arrow_keys=True) if key == 27: #ESC break elif key == 8: #backspace classes[i] = BLANK_CLASS i += 1 elif key == 32: #space classes[i] = NOT_A_SEGMENT i += 1 elif key == 65361: #<- i -= 1 elif key == 65363: #-> i += 1 elif key in allowed_chars: classes[i] = unichr(key) i += 1 if i >= len(classes): i = 0 if i < 0: i = len(classes) - 1 classes = numpy.array(classes) is_segment = classes != NOT_A_SEGMENT classes = classes[is_segment] segments = segments[is_segment] classes = list(classes) classes = classes_to_numpy(classes) print "classified ", numpy.count_nonzero( classes != classes_to_numpy(BLANK_CLASS) ), "characters out of", max(classes.shape) imagefile.set_ground(segments, classes)
text = "*" else: text = "?" segment_text_list.append([segment, text]) tesseract_classes.append(text) test_classes = tesseract_classes image_dict[fname] = cluster_list if not terse: image = test_image.image.copy() opencv_utils.draw_segments(image, test_segments, color=(255, 0, 0), line_width=2) opencv_utils.draw_classes(image, test_segments, test_classes, color=(255, 255, 0), line_width=2) opencv_utils.show_image_and_wait_for_key( image, "OCR results for file " + fname) if test_image.isGrounded(): print "accuracy:", accuracy(test_image.ground.classes, test_classes) print "OCRed text:\n", reconstruct_chars(test_classes) show_differences(test_image.image, test_segments, test_image.ground.classes, test_classes) if use_tesseract: api.End()
text = result[0] if text == " ": if len(whitelist) == 10: text = "#" elif len(whitelist) == 2 or len(whitelist) == 26: text = "*" else: text = "?" segment_text_list.append([segment, text]) tesseract_classes.append(text) test_classes = tesseract_classes image_dict[fname] = cluster_list if not terse: image = test_image.image.copy() opencv_utils.draw_segments(image, test_segments, color=(255, 0, 0), line_width=2) opencv_utils.draw_classes(image, test_segments, test_classes, color=(255, 255, 0), line_width=2) opencv_utils.show_image_and_wait_for_key(image, "OCR results for file " + fname) if test_image.isGrounded(): print "accuracy:", accuracy(test_image.ground.classes, test_classes) print "OCRed text:\n", reconstruct_chars(test_classes) show_differences(test_image.image, test_segments, test_image.ground.classes, test_classes) if use_tesseract: api.End() ground_truth_dict = {} ground_truth_file = open("CroppedMasterIDs.csv", "r") for line in ground_truth_file: line = line.replace("\n", "")