#python #amazon-web-services #sockets #amazon-ec2 #real-time
#python #amazon-веб-сервисы #сокеты #amazon-ec2 #в режиме реального времени
Вопрос:
Весь процесс можно описать следующими шагами —
- Отправить кадр изображения в экземпляр EC2
- Фрейм процесса
- Отправьте его обратно клиенту
Я использовал программирование сокетов, открыл порт и передал на него данные.Этот метод очень медленный, в среднем требуется 0,7 секунды для отправки фрейма и 1,2 секунды для передачи с сервера на клиент.Ниже приведен фрагмент кода, который я использовал :
Клиент: считывает фрейм, передает на сервер, затем получает обработанный фрейм обратно и отображает его
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)
Этот метод очень медленный, необходимо передавать данные в режиме реального времени.
Комментарии:
1. Вы видели этот документ, он подходит? docs.aws.amazon.com/streams/latest/dev /…
2. @OleksiiDonoha Вы знаете, как я могу подключить веб-камеру к производителю потока Kinesis?
3. Насколько велики кадры в каждом направлении? Вы ожидаете, что будете работать с одним кадром за раз, как подразумевает код? Большинство подобных кодов будут иметь скользящее окно из многих кадров, чтобы помочь с задержкой в сети.
4. @AnonCoward , размер кадра равен 640×480. После передачи кадров я хочу запустить модель глубокого обучения на экземпляре EC2, которая работает с одним кадром. Я попробовал KinesisVideo stream, но есть задержка в 2 секунды. Интересно, как работают веб-сайты для видеоконференций, им также необходимо передавать кадры с клиента на сервер в режиме реального времени
5. Программное обеспечение для видеоконференцсвязи не нуждается в передаче данных в режиме реального времени, есть задержка. Они также сжимают видео и отправляют поток видеоданных, они не отправляют по одному кадру за раз и ждут ответа другой стороны перед отправкой следующего. Предполагая, что вы пытаетесь отправить 640×480 в несжатом виде даже со скоростью 5 кадров в секунду, вам потребуется пропускная способность для загрузки 35 Мбит / с, что кажется маловероятным.