OPENCV Отправить фреймы по TCP Python, Pickle Не удалось найти метку - PullRequest
0 голосов
/ 02 июня 2018

Я пытаюсь отправлять и получать кадры из OpenCV, используя Python через TCP-сокет.я выяснил размер connection.recv (в байтах) с помощью функции sys.getsizeof (), чтобы увидеть размер отправляемых конечных байтов, а затем использовал его в коде сервера.при выполнении этого кода я получаю несколько кадров с 5 по 10, затем я получаю сообщение об ошибке на стороне сервера:

_pickle.UnpicklingError: could not find MARK

, а код клиента зависает и ничего не делает.

код сервера: -

#server
import threading
import cv2
import socket
import time
import pickle
import sys
import numpy as np
class Receive(threading.Thread):
    def __init__(self,RX_PORT):
        threading.Thread.__init__(self)
        self.daemon = True
        self.rx_port = RX_PORT
        self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        self.s.bind(('',self.rx_port))
    def run(self):
        self.s.listen(1)
        self.c, self.addr = self.s.accept()
        print('[+] Incoming Connection From '+str(self.addr))
        while True:
            self.data = self.c.recv(921781)
            self.frame = pickle.loads(self.data)
            cv2.imshow('RECV',self.frame)
    def __del__(self):
        self.s.close()
        cv2.destroyAllWindows()
        self.is_alive = False

RX = Receive(5550)
RX.start()
time.sleep(60)

код клиента: -

#client code
import numpy as np
import cv2
import socket
import pickle
import sys

cap = cv2.VideoCapture(0)

s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(('127.0.0.1',5550))

while(True):
    ret, frame = cap.read()
    data = pickle.dumps(frame)
    s.sendall(data)
    print(sys.getsizeof(data))
    cv2.imshow('frame',frame)
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

cap.release()
cv2.destroyAllWindows()

Ответы [ 2 ]

0 голосов
/ 04 декабря 2018

ки.я решил это.возможно это была проблема с socket.recv (размер)

ответ находится здесь: https://github.com/HarshVaragiya/Chat-Application/tree/master/VideoChat

0 голосов
/ 31 августа 2018

Не знаю, я также пытаюсь выяснить данные рассылки отправки через Kafka.

Возможно, это могут быть ваши решения:

ret, frame = cap.read()
ret, jpeg = cv2.imencode('.jpeg', frame)   #Encode the frame into JPEG
data = pickle.dumps(jpeg)
s.sendall(data)
...