diff --git a/pixelocr/page.py b/pixelocr/page.py index 76ef924..646a2a8 100644 --- a/pixelocr/page.py +++ b/pixelocr/page.py @@ -112,6 +112,22 @@ class Line(PageObject): letters = self._combine_diacritics(letters) return self._insert_spaces(letters) + def _optical_correction(self, letter1, letter2): + base = min(letter1.top, letter2.top) + height = max(letter1.bottom, letter2.bottom) - base + bitmap1 = np.hstack([np.ones((letter1.height, 1)), letter1.image.bitmap]) + bitmap2 = np.hstack([letter2.image.bitmap, np.ones((letter2.height, 1))]) + + margin1 = np.zeros(height, np.int) + margin1.fill(letter1.width) + margin2 = np.zeros(height, np.int) + margin2.fill(letter2.width) + + margin1[letter1.top - base: letter1.bottom - base] = np.fliplr(bitmap1).argmax(axis=1) + margin2[letter2.top - base: letter2.bottom - base] = bitmap2.argmax(axis=1) + margins = margin1 + margin2 + return margins.min() + def _combine_diacritics(self, letters): def is_diacritic(glyph): # XXX @@ -133,9 +149,10 @@ class Line(PageObject): for letter, next_letter in pairwise(letters): yield letter if next_letter is not None: - distance = next_letter.left - letter.right + correction = self._optical_correction(letter, next_letter) + distance = next_letter.left - letter.right + correction if distance > 5: - yield Space(self.image.space(letter.right, self.top, distance, self.baseline - self.top)) + yield Space(self.image.space(letter.right, self.top, distance, self.height), self.baseline - self.top) def _extract_blob(self, blob_slice, label, labels): image = self.image[blob_slice] @@ -150,5 +167,4 @@ class Letter(PageObject): class Space(Letter): - def __init__(self, image): - super().__init__(image, elevation=0) + pass