簡體   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