我正在尝试将通过摄像机捕获的实时视频帧发送到服务器并进行处理。我使用OpenCV进行图像处理,Python作为编程语言。这是我的代码:
client_cv.py
import cv2
import numpy as np
import socket
import sys
import pickle
cap=cv2.VideoCapture(0)
clientsocket=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
clientsocket.connect(('localhost',8089))
while True:
ret,frame=cap.read()
print sys.getsizeof(frame)
print frame
clientsocket.send(pickle.dumps(frame))
server_cv.py
import socket
import sys
import cv2
import pickle
import numpy as np
HOST=''
PORT=8089
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
print 'Socket created'
s.bind((HOST,PORT))
print 'Socket bind complete'
s.listen(10)
print 'Socket now listening'
conn,addr=s.accept()
while True:
data=conn.recv(80)
print sys.getsizeof(data)
frame=pickle.loads(data)
print frame
cv2.imshow('frame',frame)
这段代码给我返回了文件结尾错误,这是合理的,因为数据一直在服务器上流动,而pickle不知道何时结束。我的互联网搜索让我使用pickle,但到目前为止它还没有起作用。
注意:我将conn.recv
设置为80,因为当我说print sys.getsizeof(frame)
时,这就是我得到的数字。