Convert Google Vision API response to JSON Convert Google Vision API response to JSON json json

Convert Google Vision API response to JSON


Google vision 2.0 requires different code and will throw the following error if the code isn't changed:

object has no attribute 'DESCRIPTOR'

Here is an example of how to serialize and de-serialize using json and/or protobuf:

import io, jsonfrom google.cloud import vision_v1from google.cloud.vision_v1 import AnnotateImageResponsewith io.open('000048.jpg', 'rb') as image_file:    content = image_file.read()image = vision_v1.Image(content=content)client = vision_v1.ImageAnnotatorClient()response = client.document_text_detection(image=image)# serialize / deserialize proto (binary)serialized_proto_plus = AnnotateImageResponse.serialize(response)response = AnnotateImageResponse.deserialize(serialized_proto_plus)print(response.full_text_annotation.text)# serialize / deserialize jsonresponse_json = AnnotateImageResponse.to_json(response)response = json.loads(response_json)print(response['fullTextAnnotation']['text'])

Note 1: proto-plus doesn't support converting to snake_case names, which is supported in protobuf with "preserving_proto_field_name=True". So currently there is no way around the field names being converted from response['full_text_annotation'] to response['fullTextAnnotation']There is an open feature request for this: googleapis/proto-plus-python#109

Note 2: The google vision api doesn't return an x coordinate if x=0. If x doesn't exist, the protobuf will default x=0. In python vision 1.0.0 using MessageToJson(), these x values weren't included in the json, but now with python vision 2.0.0 and .To_Json() these values are included as x:0


That library returns plain protobuf objects, which can be serialized to JSON using:

from google.protobuf.json_format import MessageToJsonserialized = MessageToJson(original)

This worked for me.


Found solution. It can not be converted to JSON but can be accessed like this:

print(logos[0].bounding_poly.vertices[0].x)