Проблемы с получением видеопотока из Bebop 2 (python, open cv и ffmpeg) - PullRequest
0 голосов
/ 23 мая 2018

В настоящее время я работаю с дроном Bebop 2 от попугая, и я хотел бы получить видеопоток от бибопа и использовать кадр, который я получаю.Для управления бибопом я использую эту библиотеку: https://github.com/amymcgovern/pyparrot.

Сначала я попытался использовать opencv, открыв файл sdp, используемый бибопом для потоковой передачи видео с этим кодом:

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

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

вот содержимое файла sdp:

c=IN IP4 192.168.42.1
m=video 55004 RTP/AVP 96
a=rtpmap:96 H264/90000

но я получил эту ошибку

[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

Я видел, что это связано с командой ffmpeg, используемойopencv, который не включает опцию -protocol_whitelist. Поэтому я попытался получить изображение напрямую с помощью ffmpeg, используя эту команду

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

Но полученные мной изображения были ужасны и бесполезны.Вот так: bad quality photo

Поэтому я попробовал разные варианты, чтобы улучшить качество, но не могу заставить его работать.Спасибо за вашу помощь.

Я нахожусь на Windows 10 и использую последнюю версию Python

1 Ответ

0 голосов
/ 20 декабря 2018

Я также работал с Бибопом раньше.Полагаю, на Bebop сложно предоставить услугу потокового видео.Поэтому я попытался отследить исходный код для решения этой проблемы низкого качества.

Я заметил, что он (amymcgovern) написал потоковый сервер сам, и вы можете увидеть этот код в pyparrot/networking/wifiConnection.py.Но я не знаю, как создать лучший потоковый сервер, я просто искал варианты настройки сервера.

Я считаю, что два варианта доступны для редактирования:

Первый из них - pyparrot/Bebop.py.Мы можем установить режим потока с помощью функции set_video_stream_video.Содержит три режима: low_latency, high_realiability, high_reliability_low_framerate.Я думаю, что мы можем попробовать другой режим.

Второй находится в pyparrot/DroneVision.py.Он содержит параметр self.fps в __init__, и я думаю, что мы можем уменьшить частоту кадров, чтобы повысить качество изображения и снизить нагрузку на систему.

Кстати, ffmpeg -protocol_whitelist xxxxxx приведет к ffmpegparse args error, и я думаю, что вы можете прокомментировать часть в pyparrot/DroneVision.py. (Командная строка хранится в переменной с именем cmdStr). У меня есть похожее решение, подобное вам, и я просто использую другую программу для сохранения этих изображений,Я использую mplayer для подключения к потоковой передаче и сохранения изображений в jpeg-файл каждую секунду.

mplayer -vo jpeg -sstep 1 bebop.sdp

Возможно, я могу подключиться к потоковому серверу с ffmpeg, но я устал от чтения документаffmpeg.В любом случае, сейчас у нас есть другой дрон, поэтому я не трачу на него много времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...