【发布时间】:2020-09-25 18:39:04
【问题描述】:
我有一个使用 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 发送帧的好方法吗?或者还有其他方法吗?我该如何处理我的问题?上面的代码有什么问题?
【问题讨论】:
-
您的问题提到了 "frames"、"byte arrays" 和 "strings",但您的代码似乎从磁盘读取/写入PNG图像。您能否更明确地说明您从发送端开始的确切内容(可能包括前几个字节的数据)以及您希望在接收端结束的确切内容。我猜也不是像你的代码这样的磁盘文件。谢谢。
-
最后,我想将我的游戏 (Unity) 中的帧发送到 Python,并使用我的 Keras 模型分析这些帧。然后,我会将结果(命令)发送到 Unity,但这部分更容易。
-
我仍然不清楚您的 "frame" 是什么 Python 数据结构。是清单吗?还是字符串?还是一个 Numpy 数组?请问你能给出一两行代码来制作一个 128 像素宽 x 64 像素高的红框吗?或者任何有形的东西。谢谢。
-
"frame" 将是一个字节数组,因为任何可以转换为字节的东西都可以通过 ZeroMQ 传输。然后在python中,我需要将字节数组解码成图像。
-
说它是一个字节数组就像说它是信息,或者它是一些字节。什么是字节?他们的意思是什么?前 4 个字节
\x89PNG是否意味着它是 PNG 图像?还是他们\xff\xd8表示它是JPEG?还是他们\xff\x00\x00表示这是一个红色像素?
标签: python sockets keras zeromq distributed-computing