Esempio n. 1
0
    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)
Esempio n. 2
0
    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)
Esempio n. 3
0
                        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()
Esempio n. 4
0
                    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", "")