[英]How to send images to PUBSUB google ( Opencv Python )
您好,我想将multipart/form-data
表单发送到 pubsub
我有以下数据:
data = {'uuid' : mId, 'token' : 'd8sd87dvttd', 'objId': str(objData[1].objectID)}
img = cv2.imencode('.jpg', objData[1].getImage())[1].tostring()
post_data = { 'image' : img }
future = self.publisher.publish(
self.topic_path, files = json.dumps(post_data).encode('utf-8'), data=json.dumps(data).encode('utf-8'), type="data1"
)
此代码返回以下错误:
TypeError: Object of type 'bytes' is not JSON serializable
任何人都可以帮助我吗? 我找不到任何如何将图像发送到 pubsub google 的示例。
PubSub 消息没有任何图像的概念,它们只包含必须是二进制字符串(Python 类型bytes
)的数据。 因此,您的表单数据需要先编码为二进制字符串,然后才能作为 PubSub 消息发布。
您看到的错误不会发生在publish()
方法中,而是当代码尝试将 arguments 之一序列化为 JSON 时,例如:
>>> import json
>>> json.dumps({'foo': b'bar'}) # <-- bar is a BYTE string
...
TypeError: Object of type bytes is not JSON serializable
检查任何二进制字符串的data
和post_data
的内容, img
是主要嫌疑人。 您需要首先使用Base64等编码将其转换为文本数据,以便json.dumps()
知道如何对其进行序列化:
import base64
post_data = {'image': base64.b64encode(img).decode()}
# Alternative conversion to text, but can be less space-efficient due to
# how non-ASCII characters are serialized in JSON - \uxxxx escapes:
post_data = {'image': img.decode('latin1')}
(有关更多详细信息,另请参阅此问题)
当然,订阅者必须进行相反的转换才能从收到的消息中取回二进制图像数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.