В любом случае, желаю вам прекрасного дня!

я есть простая веб-камера, которую я считал с помощью OpenCV, и сейчас я пытаюсь отправить это видео в другую (Python) программу, используяZeroMQ, Итак, у меня есть следующий простой скрипт для считывания веб-камеры и отправки ее через сокет ZeroMQ:

import cv2
import os
import zmq
import base64

context = zmq.Context()
footage_socket = context.socket(zmq.PUB)
footage_socket.connect('tcp://localhost:5555')

# init the camera
camera = cv2.VideoCapture(0)

while True:
    try:
        (grabbed, frame) = camera.read()            # grab the current frame
        frame = cv2.resize(frame, (640, 480))       # resize the frame
        footage_socket.send_string(base64.b64encode(frame))

        # Show the video in a window
        cv2.imshow("Frame", frame)                  # show the frame to our screen
        cv2.waitKey(1)                              # Display it at least one ms
        #                                           # before going to the next frame

    except KeyboardInterrupt:
        camera.release()
        cv2.destroyAllWindows()
        print "\n\nBye bye\n"
        break

Это хорошо работает, так как показывает видео и не выдает никаких ошибок.

Я закомментировал две строки, которые показывают изображение (cv2.imshow() а такжеcv2.waitKey(1)). Затем я запустил сценарий ниже в паралеле. Этот второй сценарий должен получить видеозапись и показать ее.

import cv2
import zmq
import base64
import numpy as np

context = zmq.Context()
footage_socket = context.socket(zmq.SUB)
footage_socket.bind('tcp://*:5555')
footage_socket.setsockopt_string(zmq.SUBSCRIBE, unicode(''))

# camera = cv2.VideoCapture("output.avi")

while True:
    try:
        frame = footage_socket.recv_string()
        frame = np.fromstring(base64.b64decode(frame), dtype=np.uint8)
        cv2.imshow("Frame", frame)                  # show the frame to our screen
        cv2.waitKey(1)                              # Display it at least one ms
        #                                           # before going to the next frame
    except KeyboardInterrupt:
        cv2.destroyAllWindows()
        break

print "\n\nBye bye\n"

К сожалению, это зависает наcv2.waitKey(1).

Кто-нибудь знает, что я здесь делаю не так? Нужно ли декодировать отснятый материал по-другому? Все советы приветствуются!

Ответы на вопрос(3)

Ваш ответ на вопрос