我在Windows上使用Python 3.8.6rc1
,protobuf version 3.13.0
和google-cloud-vision version 2.0.0
。
我的代码是:
from google.protobuf.json_format import MessageToDict
from google.cloud import vision
client = vision.ImageAnnotatorClient()
response = client.annotate_image({
'image': {'source': {'image_uri': 'https://images.unsplash.com/photo-1508138221679-760a23a2285b?ixlib=rb-1.2.1&ixid=eyJhcHBfaWQiOjEyMDd9&auto=format&fit=crop&w=800&q=60'}},
})
MessageToDict(response)
字符串
它在MessageToDict(response)
失败,我有一个attribute error: "DESCRIPTOR"
。似乎response
不是一个有效的protobuf对象。有人能帮助我吗?谢谢
4条答案
按热度按时间xwmevbvl1#
这并没有真正回答我的问题,但我发现解决这个问题并访问protobuf对象的一种方法是使用
response._pb
,因此代码变为:字符串
yquaqz182#
听着第三步,
第一步:导入此库
字符串
第二步:发送请求
型
第三步:将响应转换为json [看这里,添加“.pd”]
型
第四步:对
json
做任何你想做的事情型
puruo6ea3#
可以看看this post
字符串
ruarlubt4#
从github issue @FriedrichSal发布的文章中,你可以看到
proto
完成了这项工作,并且在2022年仍然有效(库名为proto-plus
):所有的消息类型现在都使用proto-plus定义,它使用不同的方法进行序列化和非序列化。
字符串
MessageToJson(objects._pb)
仍然可以工作,但可能有些人不喜欢依赖于“隐藏”属性。