API облачного видения Google, как читать текст и структурировать его - PullRequest
0 голосов
/ 10 июня 2018

Я использую Api Python для облачного видения Google, чтобы сканировать документ, чтобы прочитать текст из него.Документ представляет собой счет-фактуру, которая содержит данные клиента и таблицы.Преобразование данных в текстовые данные работает отлично.Однако данные не отсортированы.Я не могу найти способ сортировки данных, потому что мне нужно извлечь из него несколько значений.И данные, которые я хочу извлечь, иногда находятся в другом положении, что затрудняет их извлечение.

https://cloud.google.com/vision/docs/fulltext-annotations

Вот мой код Python:

import io
import os
from google.cloud import vision
from google.cloud.vision import types
import glob


def scan_img(image_file):
    with io.open(image_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
    img_out_array = document.text.split("\n")
    invoice_no_raw = ""
    invoice_date_raw = ""
    net_total_idx = ""
    customer_name_index = ""

    for index, line in enumerate(img_out_array):
        if "Invoice No" in line:
            invoice_no_raw = line
        if "Customer Name" in line:
            index += 6
            customer_name_index = index
        if "Date :" in line:
            invoice_date_raw = line
        if "Our Bank details" in line:
            index -= 1
            net_total_idx = index

    net_total_sales_raw = img_out_array[net_total_idx]
    customer_name_raw = img_out_array[customer_name_index]
    print("Raw data:: ", invoice_no_raw, invoice_date_raw, customer_name_raw, img_out_array[net_total_idx])

    invoice_no = invoice_no_raw.split(":")[1]
    invoice_date = invoice_date_raw.split(":")[1]
    customer_name = customer_name_raw.replace("..", "")
    net_total_sales = net_total_sales_raw.split(" ")[-1]

    return [invoice_no, invoice_date, customer_name, net_total_sales]


if __name__ == '__main__':
    os.environ["GOOGLE_APPLICATION_CREDENTIALS"] = 
    "path/to/imgtotext.json"
    client = vision.ImageAnnotatorClient()
    images = glob.glob("/path/Documents/invoices/*.jpg")
    for image in images:
        print("scanning the image:::::" + image)
        invoice_no, invoice_date, customer_name, net_total_sales = 
        scan_img(image)
        print("Formatted data:: ", invoice_no, invoice_date, 
        customer_name, net_total_sales)

вывод документа 1:

Customer Name
Address
**x customer**
area name
streetname
Customer LPO

вывод документа 2:

Customer LPO
**y customer**
area name
streetname
LPO Date
Payment Terms
Customer Name
Address
Delivery Location

Пожалуйста, совет, я хочу прочитать x и y клиента, и это местоположениеменяется от документа к документу, и у меня есть несколько документов.Как структурировать и читать данные.

There are other several fields which I'm able successfully read it.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 октября 2018

Cloud Vision API не имеет специального свойства запроса для указания формата, используемого для чтения или сортировки данных файла.Вместо этого я думаю, что доступным обходным решением является использование свойств ответа BoundingPoly и Vertex , которые отображают координаты, связанные с каждым словом, содержащимся в изображении, для обработки данных вершин.в вашей логике кода и определить текст, который должен быть сгруппирован по столбцам и строкам.Вы можете посмотреть эту ссылку , которая включает в себя несколько примеров ответов, включающих эти свойства.

Если эта функция не покрывает ваши текущие потребности, вы можете использовать ОтправитьКнопка обратной связи , расположенная в нижнем левом и верхнем правом углах общедоступной документации службы , а также инструмент Issue Tracker , чтобы поднять запрос функции Vision API и уведомление Google об этой желаемой функциональности.

...