Понимание обнаруженной ошибки в полнотекстовых аннотациях Google OCR - PullRequest
0 голосов
/ 30 сентября 2018

Я пытаюсь преобразовать полнотекстовые аннотации результатов распознавания Google VCR в уровень строк и уровень слов в иерархии Block, Paragraph, Word и Symbol.

Однако при преобразовании текста symbols в word и текста word в line мне необходимо понять свойство DetectedBreak.

Я прошел Эта документация . Но яне поняла немногих из них.

Может кто-нибудь объяснить, что означают следующие Перерывы?Я понял только LINE_BREAK и SPACE.

  1. EOL_SURE_SPACE
  2. HYPHEN
  3. LINE_BREAK
  4. SPACE
  5. SURE_SPACE
  6. НЕИЗВЕСТНО

Могут ли они быть заменены либо символом новой строки, либо пробелом?

1 Ответ

0 голосов
/ 02 ноября 2018

Ссылка, которую вы предоставили, содержит наиболее подробное объяснение того, что означает каждый из них.Я полагаю, что лучший способ получить лучшее понимание - это запустить ocr на разных изображениях и сравнить ответ с тем, что вы видите на соответствующем изображении.Следующий скрипт Python запускает DOCUMENT_TEXT_DETECTION на изображении, сохраненном в GCS, и печатает все обнаруженные разрывы, кроме тех, которые вам не сложно понять (LINE_BREAK и SPACE), вместе со словом, непосредственно предшествующим им, чтобы включить сравнение.

import sys
import os
from google.cloud import storage
from google.cloud import vision

def detect_breaks(gcs_image):

    os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = '/path/to/json'
    client = vision.ImageAnnotatorClient()

    feature = vision.types.Feature(
        type=vision.enums.Feature.Type.DOCUMENT_TEXT_DETECTION)

    image_source = vision.types.ImageSource(
        image_uri=gcs_image)

    image = vision.types.Image(
        source=image_source)

    request = vision.types.AnnotateImageRequest(
        features=[feature], image=image)

    annotation = client.annotate_image(request).full_text_annotation

    breaks = vision.enums.TextAnnotation.DetectedBreak.BreakType
    word_text = ""
    for page in annotation.pages:
        for block in page.blocks:
            for paragraph in block.paragraphs:
                for word in paragraph.words:
                    for symbol in word.symbols:
                        word_text += symbol.text
                        if symbol.property.detected_break.type:
                            if symbol.property.detected_break.type == breaks.SPACE or symbol.property.detected_break.type == breaks.LINE_BREAK:
                                word_text = ""
                            else:
                                print word_text,symbol.property.detected_break
                                word_text = ""

if __name__ == '__main__':
    detect_breaks(sys.argv[1])
...