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)