使用 zlib + base64 [python] 压缩 numpy 数组

compressing numpy array with zlib + base64 [python]

我正在尝试通过 python requests 模块向 Flask 服务器发送一个 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))