Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
162 views
in Technique[技术] by (71.8m points)

python - How to transfer real time data to ec2 instance?

The entire process can be described in following steps -

  1. Send image frame to EC2 instance
  2. Process frame
  3. Send it back to client

I used socket programming, Exposed a port and transferred data to it.This method is very slow, It's taking an average of 0.7 seconds to send a frame and 1.2 seconds to transfer from server to client.Below is the code snippet I used :

Client : Reads a frame, transfers to server, then , receives the processed frame back and displays it

  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)
  

Server : Receives a frame, processes it, send the processed frame back to client

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)

This method is very slow, Need to transfer data real time.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Answer

0 votes
by (71.8m points)
等待大神答复

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome to OStack Knowledge Sharing Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...