【发布时间】:2021-08-13 01:09:25
【问题描述】:
目前我的 Python 服务器接收 base64 编码的 PNG 图像并将其转换为 nparray,如下所示:
input = data['frame'].split(",")[1]
img_data = base64.b64decode(input)
nparr = np.frombuffer(img_data, np.uint8)
img_np = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
反之亦然:
retval, buffer = cv2.imencode('.jpg', output)
pic_str = base64.b64encode(buffer)
pic_str = pic_str.decode()
image_data = "data:image/jpeg;base64," + pic_str
但是,我的实时应用程序花费了太多时间,是否存在更快的方法来做到这一点?在这两个操作之间,nparray 被转换为张量(反之亦然),因此 base64 张量转换也可以。
【问题讨论】:
-
不编码成base64,发送二进制数据怎么样?
-
我已经尝试过,但是从客户端发送(和接收)原始数据并从下面的答案中跳过解码/编码部分迫使我在使用之前将图像显式转换为 RGB 图像我的操作和花费的时间减慢了整个过程。
-
你把事情搞混了。我的意思是不进行 base64 编码/解码,但如果需要,请执行通道顺序转换。
-
对不起,我没有正确解释自己。如果我将二进制数据发送到服务器并将其作为图像打开,我不会得到 RGB 图像(使用 BytesIo 和图像),将其转换为我想要的操作会花费太多时间。
-
那么您应该调查为什么会发生这种情况。在任何情况下,base64 转换都是一个附加步骤,而不是必要步骤,因此您应该避免这种情况。 imencode/imdecode 在纯位图数据和压缩数据(例如 JPEG)之间进行转换。这些功能根本不需要任何 b64 编码。看看你是否可以避免“data:image/jpeg;base64”的东西并发送二进制数据,即在你做
b64encode之前你拥有的数据
标签: python python-3.x tensorflow opencv base64