【发布时间】:2021-11-08 19:30:39
【问题描述】:
我的目标是生成一个表格,其中每一行各有一行,以下各列:
- 内容(行的文字内容)
- X(边界框左上角的 X 坐标)
- Y(边界框左上角的 Y 坐标)
- H(线条边界框的高度)
- W(线条边界框的宽度)
用于 OCR 的 Google Vision API 不按行对内容进行分组,而仅按段落分组。 API 确实返回符号级别的数据,指示符号后跟空格或换行符的时间。下面是一个后跟空格的字母“E”的符号数据示例:
{
'property': {
'detectedLanguages': [{
'languageCode': 'it'
}],
'detectedBreak': {
'type': 'SPACE'
}
},
'boundingBox': {
'vertices': [{
'x': 197,
'y': 56
}, {
'x': 268,
'y': 59
}, {
'x': 263,
'y': 167
}, {
'x': 192,
'y': 164
}]
},
'text': 'E',
'confidence': 0.9900000095367432
}
我认为可以循环遍历一个符号列表,并根据检测到的Break 属性是否具有特定值将它们分组为行。将API documentation 用于中断类型,似乎“EOL_SURE_SPACE”、“HYPHEN”、“LINE_BREAK”的值表示换行符,“UNKNOWN”、“SPACE”、“SURE_SPACE”的值应该表示空格。至于边界框坐标,可以收集一行中第一个符号的左上角(vertices[0])和一行中最后一个符号的右下角(vertices[2])的坐标来构造一个粗略的边界框行。
我的问题是,任何人都可以建议将符号数据聚合为行数据的代码,以便可以将其输出到问题开头的表格中吗?以下是我脚本的开头,但我只是不确定如何聚合数据。
from google.cloud import vision
from google.cloud.vision import types
import json
from google.protobuf.json_format import MessageToJson
# other code…
with io.open(file, 'rb') as image_file:
content = image_file.read()
image = types.Image(content=content)
response = client.document_text_detection(image=image)
document = response.full_text_annotation
serialized = MessageToJson(document)
data = json.loads(serialized)
symbols = []
for page in data['pages']:
for block in page['blocks']:
for paragraph in block['paragraphs']:
for word in paragraph['words']:
for symbol in word['symbols']:
symbols.append(symbol)
break_values = ['EOL_SURE_SPACE', 'HYPHEN', 'LINE_BREAK']
space_values = ['UNKNOWN', 'SPACE', 'SURE_SPACE']
lines = [] # or should lines be a dictionary?
for symbol in symbols:
# need help here
提前致谢。
【问题讨论】:
标签: python google-vision