Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Object of type 'RepeatedCompositeContainer' is not JSON serializable

Using Google Client Library interacting with the vision library.

I have a function to detect labels from an image.

GoogleVision.py

import os

from google.cloud import vision
from google.cloud.vision import types
from google.protobuf.json_format import MessageToJson


class GoogleVision():

    def detectLabels(self, uri):

        client = vision.ImageAnnotatorClient()
        image = types.Image()
        image.source.image_uri = uri

        response = client.label_detection(image=image)
        labels = response.label_annotations

        return labels

I have an api to call this function.

from flask_restful import Resource
from flask import request
from flask import json
from util.GoogleVision import GoogleVision

import os


class Vision(Resource):

    def get(self):

        return {"message": "API Working"}

    def post(self):

        googleVision = GoogleVision()

        req = request.get_json()

        url = req['url']

        result = googleVision.detectLabels(url)

        return result

However, it does not return the result and errors with the following

TypeError: Object of type 'RepeatedCompositeContainer' is not JSON serializable

like image 885
Kay Avatar asked Jun 14 '18 14:06

Kay


1 Answers

This question was answered in this GitHub link, which might help to resolve your issue.

The error you encountered is

TypeError: Object of type 'RepeatedCompositeContainer' is not JSON serializable

Below is the solution provided in the GitHub thread

  • The Vision library returns plain protobuf objects, which can be serialized to JSON using:
from google.protobuf.json_format import MessageToJson
serialized = MessageToJson(original)
  • You can also go to dictionaries using something like protobuf3-to-dict.
like image 108
4 revs Avatar answered Oct 22 '22 09:10

4 revs