了解谷歌 OCR 全文注释中的 DetectedBreak

Posted

技术标签:

【中文标题】了解谷歌 OCR 全文注释中的 DetectedBreak【英文标题】:Understanding DetectedBreak in google OCR full text annotations 【发布时间】:2019-03-05 21:38:54 【问题描述】:

我正在尝试将 google vision OCR 结果的全文注释转换为 BlockParagraphWordSymbol 层次结构中的行级别和单词级别。

但是,在将 symbols 转换为 word 文本和将 word 转换为 line 文本时,我需要了解 DetectedBreak 属性。

我浏览了This documentation。但我不了解其中的几个。

有人能解释一下以下 Breaks 是什么意思吗?我只懂LINE_BREAKSPACE

    EOL_SURE_SPACE 连字符 LINE_BREAK 空间 SURE_SPACE 未知

它们可以被换行符或空格替换吗?

【问题讨论】:

【参考方案1】:

您提供的链接对它们各自的含义进行了最详细的解释。我想更好地理解的最好方法是在不同的图像上运行 ocr 并将响应与您在相应图像上看到的内容进行比较。以下 python 脚本在 GCS 中保存的图像上运行 DOCUMENT_TEXT_DETECTION 并打印所有检测到的中断,除了那些您可以理解的中断(LINE_BREAKSPACE),以及紧接在它们前面的单词以启用比较。

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

【讨论】:

问题是为 6 种类型的Break 生成输入。 SPACELINE_BREAK 除外。这正是我的问题。那 6 个DETECTED_BREAK 是什么意思? 现在特别是EOL_SURE_SPACEHYPHEN,我认为它们是新行 EOL_SURE_SPACE 基本上是一个很大的 eol,HYPHEN 是一个单词需要在中间用连字符 (-) 在行尾分隔的情况。检查this 以获取HYPHEN 和this 以获取EOL_SURE_SPACE 所以简单地回答我的问题,是否可以将SPACE , SURE_SPACE 视为SPACE 而其余为NEW_LINE 我想这取决于您和您的实施。如果您愿意在行结束之前忽略连字符或确定空间大于“标准”空间的事实,那么是的,它是安全的。

以上是关于了解谷歌 OCR 全文注释中的 DetectedBreak的主要内容,如果未能解决你的问题,请参考以下文章

谷歌视觉ocr:竖横线条文本识别

非黑即白--谷歌OCR光学字符识别

谷歌文档 OCR 实现 iphone

谷歌视觉 OCR 数据表

使用谷歌视觉进行 OCR 的正确方法是啥

谷歌视觉更好的 OCR 的理想图像尺寸是多少?