python - 如何使用 ZeroMQ 通过 TCP 套接字发送 PNG 图像?

标签 python sockets keras zeromq distributed-computing

我有一个在 Python 上工作的 Keras 模型,我想从 Unity 3D 相机向这个模型发送帧。我可以通过使用外部库轻松地在它们之间传输字符串。这个外部库向 Python 发送一个字节数组。因此,我将 Unity 的相机帧转换为字节数组。但是,我不知道如何在 Python 上读取发送的图像(字节数组)。

为了解决这个问题,我尝试了一些仅使用 Python 的 Sender-Receiver 代码。然而,那些没有奏效。

以下是代码:

发件人:

import zmq
import base64


context = zmq.Context()
socket = context.socket(zmq.REP)
socket.bind("tcp://*:5555")

f = open("sample.png", 'rb')
bytes = bytearray(f.read())
strng = base64.b64encode(bytes)
socket.send(strng)
f.close()

收货人:

import zmq
import base64


context = zmq.Context()
socket = context.socket(zmq.REQ)
socket.connect("tcp://localhost:5555")

import base64
message = socket.recv()
f = open("sample.png", 'wb')
ba = bytearray(base64.b64decode(message))
f.write(ba)
f.close()

这是将帧从 Unity 发送到 Python 的好方法吗?或者还有其他方法吗?我该如何处理我的问题?上面的代码有什么问题?

最佳答案

Q : "Is that a good way for sending frames from Unity to Python?"


我敢说。

However, I do not know how to read the sent images (byte array) on Python.


为什么有人会使用工具来 “编码” 一些东西,没有匹配工具到 “解码” ?

Q : "Or are there other ways?"


哦,当然有。

Q : "How can I handle my problem?"


最好学习这样的工具,您可以安全地使用它们,用于编码和解码阶段。大量可用的 Python 标准模块 - numpy pil/pillow cv 对于图像转换, dill pickle 对于 SER/DES 甚至是 struct .
enter image description here
已经使用了这些年with ZeroMQ, you may be sure使用安全工具朝着正确的方向前进。

Q : "What is wrong with the codes above?"


这永远不会飞。
“发件人”,已被提议为 REP -instance 永远不能以调用 开始.send() -方法。从不。
“接收者”已被提议为 REQ -instance 永远不能以调用 开始.recv() -方法。从不。
听起来很复杂?是的,REQ/REP 的选择不是我的。
零MQ REQ/REP 形式化可扩展通信原型(prototype)是最复杂的原型(prototype)之一(运行内部分布式有限状态自动机(dFSA),实际上是其中的 1:N,没有风险,但可以确定不可挽救的自死锁中的任何一个这些 N dFSA 和故事结束了......)
不要误会我的意思,我从那时起就喜欢 ZeroMQ,并钦佩 Pieter HINTJENS 和 Martin SUSTRIK 的大量发明和性能改进,他们已经融入了 ZeroMQ 的“零之禅”,但我尝试提醒您,要掌握禅从头到尾。
上面的链接有一个完整的解决方案,而不是使用 PUB/SUB 用于图像发送以及一些性能调整提示以供进一步思考。

关于python - 如何使用 ZeroMQ 通过 TCP 套接字发送 PNG 图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62234262/

相关文章:

python - 扩展空列表使第一个元素为空

java - 使用套接字将对象从android发送到java(Hibernate类)

python - 套接字对和 fork 中的 FD 重用

python - 使用 keras 对图像进行 convnet 回归 - 精度不能提高超过 40%

python - while 循环计数器比较两个列表

python - Kivy 无法从外部 URL 加载图像

python - Conv2D模型的训练卡住了[MNIST数据集]

python - Keras:打印出预测的类标签

Python Bigram 字典格式

python - 在python中将字节转换为字符串