代码之家  ›  专栏  ›  技术社区  ›  Arun Gowda

理解google OCR全文注释中的DetectedBreak

  •  0
  • Arun Gowda  · 技术社区  · 6 年前

    我正在尝试将googlevisionocr结果的全文注释转换为行级和词级 Block , Paragraph Word Symbol 等级制度。

    symbols word 单词 line 文本,我需要了解DetectedBreak属性。

    我通过了 This documentation 但我不明白其中的几个。

    LINE_BREAK SPACE .

    1. 连字符
    2. 断线
    3. 空间
    4. 当然是你的空间
    5. 未知

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

    1 回复  |  直到 6 年前
        1
  •  2
  •   Lefteris S Mikhail Berlyant    6 年前

    您提供的链接提供了最详细的解释,其中每一个代表什么。我想最好的方法是在不同的图像上运行ocr,并将响应与相应图像上看到的结果进行比较。运行以下python脚本 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])