сжатие numpy массива с помощью zlib + base64 [python] - PullRequest
0 голосов
/ 27 мая 2020

Я пытаюсь отправить массив numpy через модуль python requests на сервер flask.

Сначала я сжал массив numpy с помощью zlib, затем использовал 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

Ответы [ 2 ]

0 голосов
/ 27 мая 2020

Я только что понял, рассмотрев дополнительную длину строки в кодировке 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))
0 голосов
/ 27 мая 2020

data = base64.b64encode(frame) должно быть

b64encode (data)

Вы случайно кодируете не то ...

...