首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何最有效地将连续帧流发送到服务器

如何最有效地将连续帧流发送到服务器
EN

Stack Overflow用户
提问于 2019-04-27 16:03:30
回答 1查看 1.4K关注 0票数 1

我正在尝试从本地摄像头(raspberry pi摄像头,但也可以是我笔记本电脑的摄像头)发送帧到Google cloud实例,在该实例上我正在运行帧的AI处理。

我正在设法通过http (即tcp??)发送通过opencv捕获的帧。并在flask服务器上接收它们。当flask服务器在本地运行时,我可以获得良好的fps (图像大小为640x480的50+ fps ),但是一旦我将帧发送到google实例上的flask应用程序,fps就会急剧下降到~5fps。

我当前如何发送帧:

代码语言:javascript
复制
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在本地端口上流式传输帧,我不知道是否可以将帧发送到远程服务器。

对最好的前进方式有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-27 17:33:57

对于您的情况,正确选择的协议是TCP。UDP不保证数据以正确的顺序到达并且完好无损。在您的情况下,UDP不会比TCP更快(如果您要确保代码中的数据是完整的和有序的)。

您已经通过将图像转换为jpg来压缩图像。额外的压缩将是非常低效的。TCP和UDP都不会在传输中压缩数据。

我相信现在您受到requests库和将数据编码成HTTP协议的限制。您应该考虑使用纯TCP,而不是HTTP的开销。这可以通过标准python库中的socket模块来完成。然而,您可能仍然会有较低的性能,因为您没有帧间压缩,而只使用帧内压缩。您需要考虑使用ffmpeg来压缩来自摄像机的数据,并使用程序或使用ffmpeg's point 2 point streaming通过TCP发送流。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55878521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档