压缩 Numpy 数组 with zlib + base64 [python]



>我正在尝试通过pythonrequests模块向烧瓶服务器发送一个numpy数组。

首先,我用 zlib 压缩了 numpy 数组,然后使用base64对数据进行编码,然后尝试解码和解压缩,但它不起作用。

import numpy as np 
import base64
import zlib
import requests
frame = np.random.randint(0,255,(5,5,3)) # dummy rgb image
# compress
data = zlib.compress(frame)
print('compressed')
print(data)
print(len(data))
print(type(data))
data = base64.b64encode(frame)
print('b64 encoded')
print(data)
print(len(data))
print(type(data))
data = base64.b64decode(data)
print('b64 decoded')
print(data)
print(len(data))
print(type(data))
data = zlib.decompress(data)
print('b64 decoded')

我收到以下错误:

Traceback (most recent call last):
File "client.py", line 26, in <module>
data = zlib.decompress(data)
zlib.error: Error -3 while decompressing data: incorrect header check

data = base64.b64encode(frame)应该是

b64encode (data)

您不小心编码了错误的内容...

在考虑了 base64 编码字符串的额外长度后,我刚刚意识到我可以完全摆脱它。

因此,以下代码片段可以满足您的需求,它压缩numpy数组,然后我可以在不使用base64的情况下取回原始数组。它摆脱了一些开销。

import numpy as np 
import base64
import zlib
import requests
frame = np.random.randint(0,255,(5,5,3)) # dummy rgb image
# compress
data = zlib.compress(frame)
print('compressed')
print(data)
print(len(data))
print(type(data))

data = zlib.decompress(data)
print('b64 decoded')

data = np.frombuffer(data, dtype=np.uint8)
print(data)
print(type(data))

最新更新