从bebop2(python、open cv和ffmpeg)获取视频流时遇到问题

2024-09-28 23:55:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我目前正在与贝博普2无人机从鹦鹉和我想得到视频流从贝博普和使用我得到的帧。为了控制bebop,我使用了这个库:https://github.com/amymcgovern/pyparrot。在

首先,我尝试使用opencv,方法是打开bebop使用的sdp文件来流式传输带有以下代码的视频:

capture = cv2.VideoCapture('./bebop.sdp')

    while True :
        rt,img = capture.read()
        cv2.imshow("cam",img)
        cv2.waitKey(10)

以下是sdp文件的内容:

^{pr2}$

但我有个错误

[rtp @ 0000020b890b3300] Protocol 'rtp' not on whitelist 'file,crypto'!
warning: Error opening file (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:808)
warning: ./bebop.sdp (/build/opencv/modules/videoio/src/cap_ffmpeg_impl.hpp:809)
False
OpenCV Error: Assertion failed (size.width>0 && size.height>0) in cv::imshow, file C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp, line 331
Traceback (most recent call last):
 File "pilotage.py", line 109, in <module>
   _main_(args)
 File "pilotage.py", line 56, in main
   cv2.imshow('drone view',im)
cv2.error: C:\projects\opencv-python\opencv\modules\highgui\src\window.cpp:331: error: (-215) size.width>0 && size.height>0 in function cv::imshow

我看到这是由于opencv使用的ffmpeg命令不包括选项-protocol\u白名单 所以我尝试使用这个命令直接用ffmpeg获取图像

"ffmpeg -protocol_whitelist \"file,rtp,udp\"  -i  ./bebop.sdp -r 30 -b:v 800k image_%03d.png &"

但是我得到的图像很糟糕,毫无用处。 像这个: bad quality photo

所以我尝试了不同的方法来提高质量,但是我不能让它发挥作用。 谢谢你的帮助。在

我在Windows10上,使用最新的python版本


Tags: 文件方法insrcmodulessdpsizeline
1条回答
网友
1楼 · 发布于 2024-09-28 23:55:03

我以前也和贝博普一起工作。我想在Bebop上提供视频流服务是很困难的。所以我试图追踪源代码来解决这个质量低劣的问题。在

我注意到他(amymgovern)自己编写了一个流式服务器,您可以在pyparrot/networking/wifiConnection.py中看到这些代码。但我不知道如何建立一个更好的流媒体服务器,我只是在寻找调整服务器的选项。在

我发现有两个选项是可编辑的:

第一个在pyparrot/Bebop.py。我们可以通过函数set_video_stream_video来设置流模式。它包含三种模式:low_latencyhigh_realiabilityhigh_reliability_low_framerate。我想我们可以尝试不同的模式。在

第二个是pyparrot/DroneVision.py。它在__init__中包含了一个选项self.fps,我认为我们可以通过降低帧速率来提高图像质量和减少系统负载。在

顺便说一句,ffmpeg -protocol_whitelist xxxxxx会导致ffmpegparse args错误,我想您可以对pyparrot/DroneVision.py中的部分进行注释(命令字符串存储在一个名为cmdStr)的变量中。我有一个与您类似的解决方案,我只是使用另一个程序来保存这些图片。我使用mplayer连接到流媒体并每秒将图片保存到jpeg文件中。在

mplayer -vo jpeg -sstep 1 bebop.sdp

也许我可以用ffmpeg连接到流服务器,但是我已经厌倦了阅读ffmpeg的文档。不管怎样,我们现在又有一架无人机了,所以我没花太多时间在上面。在

相关问题 更多 >