问题描述
整个过程可以用以下步骤来描述 -
- 将图像帧发送到 EC2 实例
- 流程框架
- 发回给客户
我使用了socket编程,暴露了一个端口并向其传输数据。这种方法非常慢,发送一帧平均需要0.7秒,从服务器传输到客户端平均需要1.2秒。下面是我的代码片段使用:
Client:读取一个帧,传输到服务器,然后,接收处理后的帧返回并显示
ret,frame = cap.read()
data = pickle.dumps(frame) # Serialising data
message_size = struct.pack("L",len(data))
clientsocket.sendall(message_size + data) #Sending frame
#Receiving frame
while len(recv_data) < payload_size:
recv_data += clientsocket.recv(8192)
packed_msg_size = recv_data[:payload_size]
recv_data = recv_data[payload_size:]
msg_size = struct.unpack("L",packed_msg_size)[0]
while len(recv_data) < msg_size:
recv_data += clientsocket.recv(8192)
frame_data = recv_data[:msg_size]
new_frame = pickle.loads(frame_data)
recv_data = recv_data[msg_size:]
#displaying received data
cv2.namedWindow("output",cv2.WINDOW_norMAL)
cv2.imshow("output",new_frame)
服务器:接收帧,处理它,将处理后的帧发送回客户端
while True:
while len(data) < payload_size:
data += conn.recv(4096)
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack("L",packed_msg_size)[0]
while len(data) < msg_size:
data += conn.recv(4096)
frame_data = data[:msg_size]
data = data[msg_size:]
frame = pickle.loads(frame_data)
#Processing frame
new_frame = pickle.dumps(frame)
#Data received
message_size = struct.pack("L",len(new_frame))
#Sending data back
conn.sendall(message_size + new_frame)
这种方法很慢,需要实时传输数据。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)