Как сохранить / загрузить ответ протобуфа Google-Cloud-Vision OCR на диск? - PullRequest
0 голосов
/ 10 апреля 2019

Я пытаюсь сохранить ответы от Google-Cloud-Vision OCR на диск и обнаружил, что сжатый архив и хранение фактического protobuf - это самый компактный вариант для последующей обработки.Эта часть была легкой!Теперь, как мне извлечь и проанализировать это обратно с диска в его исходный формат?

Мой вопрос: где / как мне перестроить файл message_pb2 для синтаксического анализа файла обратно в protobuf

Follow документация Вот мой код:

#!/usr/bin/python3
# coding: utf-8

from google.cloud import vision
import gzip, os, io


def ocr_document(path):
    """
    Detects document features in an image.
    Returns response protobuf from API.
    """
    client = vision.ImageAnnotatorClient()

    with io.open(path, 'rb') as image_file:
        content = image_file.read()

    image = vision.types.Image(content=content)

    response = client.document_text_detection(image=image)

    return(response)

response = ocr_document('handwritten-scan.jpg')
serialized = response.SerializeToString()


with gzip.open('response.pb.gz', 'wb') as f:
    f.write(serialized)
print(os.path.getsize('response.pb.gz'), 'bytes') # Output: 11032 bytes

# Figure this part out!

with gzip.open('response.pb.gz', 'rb') as f:
    serialized=f.read()
    ### parsed = message_pb2.Message()  # < - Protobuf message I'm missing
    parsed.ParseFromString(serialized)
    print(parsed)

1 Ответ

0 голосов
/ 12 апреля 2019

Просматривая код, вот ответ:

from google.cloud.vision_v1.proto import image_annotator_pb2
from google.protobuf.json_format import MessageToDict

with gzip.open('response.pb.gz', 'rb') as lf:
    Loaded=lf.read()
    parsed = image_annotator_pb2.AnnotateImageResponse()
    parsed.ParseFromString(Loaded)

print(MessageToDict(parsed))
...