【发布时间】:2019-09-16 14:41:05
【问题描述】:
我正在尝试将帧从本地摄像头(树莓派摄像头,但也可能是我笔记本电脑的网络摄像头)发送到 Google 云实例,我在该实例上运行帧的 AI 处理。
我正在设法通过 http(即 tcp??)发送通过 opencv 捕获的帧,并在烧瓶服务器上接收它们。当烧瓶服务器在本地运行时,我可以获得良好的 fps(图像大小为 640x480 时 50+ fps),但是一旦我将帧发送到谷歌实例上的烧瓶应用程序,fps 急剧下降到 ~5fps。
我目前如何发送帧:
while True:
frame = vs.read() #Separate thread, using cv2 to get the frame
ret, jpeg = cv2.imencode('.jpg', frame)
imgdata = jpeg.tobytes()
response = requests.post(
url='http://<IP address of google instance>:<port>',
data= imgdata,
headers={'content-type':'image/jpeg'},
)
我发现这有两个问题: 1 - 使用 tcp 意味着我比 udp 协议慢,但是 udp 的字节大小有限。如果我错了,请纠正我,但是发送截断的帧并将它们重新放在服务器上似乎非常复杂.. 2 - 即使我有 udp 工作,也没有帧压缩,所以我永远无法达到有效的传输
我希望答案类似于使用 ffmpeg,但到目前为止我只知道如何使用 ffmpeg 在本地端口上流式传输帧,我不知道是否可以将帧发送到远程服务器。
关于最佳前进方向的任何建议?
【问题讨论】:
标签: python opencv ffmpeg video-streaming