【发布时间】:2015-09-08 09:09:36
【问题描述】:
我正在尝试将我用相机捕捉到的实时视频帧发送到服务器并进行处理。我使用 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 不知道何时完成。我在互联网上的搜索让我使用了泡菜,但到目前为止它不起作用。
注意:我将 conn.recv 设置为 80,因为这是我说 print sys.getsizeof(frame) 时得到的数字。
【问题讨论】:
-
宁可使用 cv2.imencode() / cv2.imdecode() 而不是pickle
-
任何尝试过此直播的人,是否可以将其发送到服务器?还是在本地处理框架更好?比如连续的face_recognition,一检测到人脸就应该ping一下?