我正在尝试将谷歌视觉OCR结果的全文注释转换为Block
,Paragraph
,Word
和Symbol
中的行级和单词级层次结构。
但是,在将symbols
转换为word
文本并将word
转换为line
文本时,我需要了解DetectedBreak属性。
我经历了This documentation。但是我听不懂其中的几个。
有人可以解释以下中断是什么意思吗?我只了解LINE_BREAK
和SPACE
。
可以将它们替换为换行符还是空格?
答案 0 :(得分:0)
您提供的链接提供了有关每一个代表什么的最详细的说明。我想更好地理解的最好方法是在不同的图像上运行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])