python-3.x - 如何使用 python 在云中的另一个虚拟机上流式传输我的屏幕?
问题描述
我正在尝试通过我的计算机捕获游戏玩法,并希望将实时捕获的游戏玩法发送到我的云实例以进行对象检测。我尝试了以下代码。它在本地运行良好,但是当我使用 ngrok 对其进行隧道传输时,我收到了 getaddress 错误。
有没有其他方法可以通过互联网以良好的 FPS 将视频帧发送到我的云实例以对其执行深度学习处理?
客户端.py
import cv2
import io
import socket
import struct
import time
import pickle
import zlib
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
#client_socket.connect(('localhost', 8485))
#Tring to connect to the hosted address obtained after using ngrok http 8485 command.
client_socket.connect(('https://fc766cc3.ngrok.io',0))
connection = client_socket.makefile('wb')
cam = cv2.VideoCapture(0)
cam.set(3, 320);
cam.set(4, 240);
img_counter = 0
encode_param = [int(cv2.IMWRITE_JPEG_QUALITY), 90]
while True:
ret, frame = cam.read()
result, frame = cv2.imencode('.jpg', frame, encode_param)
# data = zlib.compress(pickle.dumps(frame, 0))
data = pickle.dumps(frame, 0)
size = len(data)
print("{}: {}".format(img_counter, size))
client_socket.sendall(struct.pack(">L", size) + data)
img_counter += 1
cam.release()
服务器.py
import socket
import sys
import cv2
import pickle
import numpy as np
import struct ## new
import zlib
HOST='localhost'
PORT=8485
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()
data = b""
payload_size = struct.calcsize(">L")
print("payload_size: {}".format(payload_size))
while True:
while len(data) < payload_size:
print("Recv: {}".format(len(data)))
data += conn.recv(4096)
print("Done Recv: {}".format(len(data)))
packed_msg_size = data[:payload_size]
data = data[payload_size:]
msg_size = struct.unpack(">L", packed_msg_size)[0]
print("msg_size: {}".format(msg_size))
while len(data) < msg_size:
data += conn.recv(4096)
frame_data = data[:msg_size]
data = data[msg_size:]
frame=pickle.loads(frame_data, fix_imports=True, encoding="bytes")
frame = cv2.imdecode(frame, cv2.IMREAD_COLOR)
cv2.imshow('ImageWindow',frame)
cv2.waitKey(1)
解决方案
推荐阅读
- kivy - KIVY collide_point 顶点矩形
- firebase - 将 FirebaseUser 转换为 Stream 中的自定义 User 类
- firebase - 用于检查地图中动态字段值的 Firestore 规则
- jquery - 由于值中的双引号,Jquery 中的 JSON.parse 出错
- javascript - 生命周期方法中没有的副作用
- c++ - 是什么让 unorder_map 和 unorder_set 比 map 和 set 更快?
- javascript - 单击取消按钮时如何消除错误
- elasticsearch - Elasticsearch 批量 API
- apache-spark - 火花选项的文档
- python - 通过包含特定字符串从文件中删除行在python中不起作用