繁体   English   中英

在json中通过kafka收发图片使用python

[英]Send and receive images through kafka in json using python

我正在将 Kafka 管道用于计算机视觉项目。 我必须将 JSON 个对象摄取到管道中并在消费者端接收它们。 我这样做是这样的:

>>> a = some_image_numpy_array
>>> b = base64.b64encode(a)
>>> c = b.decode('utf-8')

如何在消费者端再次解码为 NumPy 数组格式? 我无法将图像以字节形式转储到 JSON 中。 我必须使用 utf 解码或 str() 将其转换为字符串。

注意:我不能只进行 base64 编码并将其转储到 json,因为字节不是 json 可序列化的。

你可以使用这个base64.b64decode

>>> a = some_image_numpy_array
>>> b = base64.b64encode(a)
>>> c = base64.b64decode(b)
%python
import base64
encoded = base64.b64encode(b'a0JD0000006SxKJMA0')
print(base64.b64decode(encoded))

会给你解码字符串

b'a0JD0000006SxKJMA0'

你可以这样做:

# convert image to string
image_to_kafka = base64.b64encode(cv2.imencode('.jpg', img)[1]).decode()

# put string image into dictionary
some_dict = {
             'some_id': 123, 
             'image': image_to_kafka
            }

# send using your producer
producer.send('some_topic', value=some_dict)

在我的案例中,生产者的创建方式如下:

producer = KafkaProducer(bootstrap_servers=[kafka_server],
                     value_serializer=lambda x:json.dumps(x).encode('utf-8'))

但是你必须考虑到:

  • 你上传图片会有一些延迟(在我的例子中是 2 秒/图片)
  • 你在阅读图像时会有一些滞后(在我的例子中是 0.5 秒/图像)

恕我直言,更好的选择是使用一些存储空间来保存图像并仅发送图像的 ID 和/或路径。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM