了解谷歌 OCR 全文注释中的 DetectedBreak
Posted
技术标签:
【中文标题】了解谷歌 OCR 全文注释中的 DetectedBreak【英文标题】:Understanding DetectedBreak in google OCR full text annotations 【发布时间】:2019-03-05 21:38:54 【问题描述】:我正在尝试将 google vision OCR 结果的全文注释转换为 Block
、Paragraph
、Word
和 Symbol
层次结构中的行级别和单词级别。
但是,在将 symbols
转换为 word
文本和将 word
转换为 line
文本时,我需要了解 DetectedBreak 属性。
我浏览了This documentation。但我不了解其中的几个。
有人能解释一下以下 Breaks 是什么意思吗?我只懂LINE_BREAK
和SPACE
。
-
EOL_SURE_SPACE
连字符
LINE_BREAK
空间
SURE_SPACE
未知
它们可以被换行符或空格替换吗?
【问题讨论】:
【参考方案1】:您提供的链接对它们各自的含义进行了最详细的解释。我想更好地理解的最好方法是在不同的图像上运行 ocr 并将响应与您在相应图像上看到的内容进行比较。以下 python 脚本在 GCS 中保存的图像上运行 DOCUMENT_TEXT_DETECTION
并打印所有检测到的中断,除了那些您可以理解的中断(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])
【讨论】:
问题是为 6 种类型的Break
生成输入。 SPACE
和 LINE_BREAK
除外。这正是我的问题。那 6 个DETECTED_BREAK
是什么意思?
现在特别是EOL_SURE_SPACE
和HYPHEN
,我认为它们是新行
EOL_SURE_SPACE
基本上是一个很大的 eol,HYPHEN
是一个单词需要在中间用连字符 (-
) 在行尾分隔的情况。检查this 以获取HYPHEN
和this 以获取EOL_SURE_SPACE
。
所以简单地回答我的问题,是否可以将SPACE , SURE_SPACE
视为SPACE
而其余为NEW_LINE
?
我想这取决于您和您的实施。如果您愿意在行结束之前忽略连字符或确定空间大于“标准”空间的事实,那么是的,它是安全的。以上是关于了解谷歌 OCR 全文注释中的 DetectedBreak的主要内容,如果未能解决你的问题,请参考以下文章