【问题标题】:How to fetch opencv frames with ZeroMQ?如何使用 ZeroMQ 获取 opencv 帧?
【发布时间】:2020-12-10 04:15:53
【问题描述】:

我正在使用以下代码从客户端获取帧:

def fetch_frame(self):

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

    while True:
        frame = footage_socket.recv_string()

        frame = frame.encode()

        img = base64.b64decode(frame)

        npimg = np.fromstring(img, dtype=np.uint8)
        source = cv2.imdecode(npimg, 1)

不幸的是,它抛出以下错误:

zmq.error.ZMQError: Operation cannot be accomplished in current state

使用 zmq 检索图像的正确方法是什么?

更新:

以下是回溯:

 File "/home/receive/main.py", line 77, in <module>
    main()
  File "/home/receive/main.py", line 73, in main
    ci.fetch_frame()
  File "/home/receive/main.py", line 59, in fetch_frame
    frame = footage_socket.recv_string()
  File "/home/.local/lib/python3.8/site-packages/zmq/sugar/socket.py", line 608, in recv_string
    msg = self.recv(flags=flags)
  File "zmq/backend/cython/socket.pyx", line 791, in zmq.backend.cython.socket.Socket.recv
  File "zmq/backend/cython/socket.pyx", line 827, in zmq.backend.cython.socket.Socket.recv
  File "zmq/backend/cython/socket.pyx", line 191, in zmq.backend.cython.socket._recv_copy
  File "zmq/backend/cython/socket.pyx", line 186, in zmq.backend.cython.socket._recv_copy
  File "zmq/backend/cython/checkrc.pxd", line 26, in zmq.backend.cython.checkrc._check_rc
zmq.error.ZMQError: Operation cannot be accomplished in current state

【问题讨论】:

  • 什么引发了错误?请编辑您的问题并包含整个回溯(或至少提及您的代码的哪一行导致它)。
  • @martineau 请检查更新后的问题。我已经添加了日志
  • 是的,在这样的问题中应该提供这种信息,以帮助其他人找出问题所在。
  • 问题可能出在另一端吗?

标签: python numpy opencv networking zeromq


【解决方案1】:

ZMQError: Operation cannot be accomplished in current state

核心原因是,您的代码违反了 ZeroMQ REQ/REP 记录的属性。

REQ-instance 已经“询问”其交易对手之前向REP-instance 询问.send()-ed 消息,API 必须抛出此类错误。

类似地,如果试图在REQ 端向.recv() 发送一条消息,在它首先由.send()REP 端“询问”(回复)之前,API 必须抛出这样的错误。


解决方案?

在不需要其他交互的情况下,PUSH/PULL 可扩展的正式通信模式原型,其中PUSH-side 将.send()PULL-side 将.recv(),恕我直言,这是最好的方法.


您可能想在this. 中阅读更多提示和链接

【讨论】:

    猜你喜欢
    • 2018-08-29
    • 1970-01-01
    • 1970-01-01
    • 2021-12-28
    • 2021-10-14
    • 2020-05-07
    • 2015-09-23
    • 2012-03-04
    • 1970-01-01
    相关资源
    最近更新 更多