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

2024-04-25 04:37:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

为了处理这个问题,我尝试了一些仅使用Python的发送方-接收方代码。然而,这些都不起作用

代码如下:

发送方:

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的好方法吗?或者还有其他方法吗?我如何处理我的问题?上面的代码有什么问题


Tags: sample代码模型import字节pngcontextunity
1条回答
网友
1楼 · 发布于 2024-04-25 04:37:34

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/pillowcv,用于SER/DES的dill^{,甚至是^{

enter image description here

多年来一直使用这些工具,使用安全工具朝着正确的方向发展


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

这永远不会飞

“Sender”
被提议作为一个REP-实例,它决不能以调用.send()-方法开始。
决不能

“Receiver”
被提议作为一个REQ-实例,它决不能以调用.recv()-方法开始。
决不能

听起来很复杂?是的,选择REQ/REP不是我的选择

ZeroMQREQ/REP形式化可伸缩通信原型是最复杂的通信原型之一(操作内部分布式有限状态自动机(dFSA),实际上是其中的1:N,没有风险,但可以确定这N个dFSA中的任何一个都无法补救地自锁,故事结束了…)

别误会我的意思,我从一开始就喜欢ZeroMQ,也很欣赏Pieter HINTJENS&;马丁·萨斯特里克的大量发明;性能提升他们已经融入了ZeroMQ的Zero禅宗,但我试着提醒您,掌握Zero禅宗的开始和结束需要一些时间

上面的链接提供了一个完整的解决方案,使用PUB/SUB发送图像,并提供了一些性能调整提示,供进一步思考

相关问题 更多 >