Извлечение блочного текста из изображения с помощью Google Vision API - PullRequest
0 голосов
/ 18 февраля 2020

Это желаемый вывод Изображение .

Эй, я работаю над проектом, в котором мне нужно будет извлечь текст из отсканированного PDF. Я преобразовал все страницы PDF в отдельные изображения и пытаюсь извлечь текст. Мой код извлекает построчно, и я заинтересован в извлечении блоков. Я нарисовал линии блока на моем изображении. Кстати, я использую Python для этого упражнения.

from google.cloud import vision
from google.cloud.vision import types
import io
from PIL import Image, ImageDraw
from enum import Enum

import pandas as pd

import os

os.getcwd()

image_file='test1.PNG'
image  = Image.open(image_file)

os.environ['GOOGLE_APPLICATION_CREDENTIALS'] = r'image_to_text_googleVision.json'

client = vision.ImageAnnotatorClient()
with io.open(image_file, 'rb') as image_file1:
        content = image_file1.read()
content_image = types.Image(content=content)
response = client.document_text_detection(image=content_image)
document = response.full_text_annotation


class FeatureType(Enum):
    PAGE = 1
    BLOCK = 2
    PARA = 3
    WORD = 4
    SYMBOL = 5

def draw_boxes(image, bounds, color,width=5):
    draw = ImageDraw.Draw(image)
    for bound in bounds:
        draw.line([
            bound.vertices[0].x, bound.vertices[0].y,
            bound.vertices[1].x, bound.vertices[1].y,
            bound.vertices[2].x, bound.vertices[2].y,
            bound.vertices[3].x, bound.vertices[3].y,
            bound.vertices[0].x, bound.vertices[0].y],fill=color, width=width)
    return image

def get_document_bounds(response, feature):
    bounds=[]
    for i,page in enumerate(document.pages):
        for block in page.blocks:
            if feature==FeatureType.BLOCK:
                bounds.append(block.bounding_box)
            for paragraph in block.paragraphs:
                if feature==FeatureType.PARA:
                    bounds.append(paragraph.bounding_box)
                for word in paragraph.words:
                    for symbol in word.symbols:
                        if (feature == FeatureType.SYMBOL):
                            bounds.append(symbol.bounding_box)
                    if (feature == FeatureType.WORD):
                        bounds.append(word.bounding_box)
    return bounds

bounds = get_document_bounds(response, FeatureType.WORD)
draw_boxes(image, bounds, 'yellow')

response

df = pd.DataFrame(columns=['locale','description'])

bounds = get_document_bounds(response, FeatureType.BLOCK)
draw_boxes(image, bounds, 'red')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...