【问题标题】:Get lines and bounding box coordinates from Google Vision API OCR in Python从 Python 中的 Google Vision API OCR 获取线条和边界框坐标
【发布时间】: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


    【解决方案1】:

    是的,打破你的 break_values 是有意义的。以下是中断类型的含义:https://cloud.google.com/vision/docs/reference/rest/v1/AnnotateImageResponse#breaktype

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-02
      • 2019-01-29
      • 2015-08-08
      • 1970-01-01
      • 2020-04-12
      • 2022-01-20
      • 1970-01-01
      • 2021-07-18
      相关资源
      最近更新 更多