Opencv 3.4.3 gstreamer, сборка на Raspberry pi 3, последняя растяжка Raspbian не работает - PullRequest
0 голосов
/ 18 октября 2018

Я некоторое время работал над проектом компьютерного зрения, используя opencv на Raspberry Pi, Передача через UDP видео и информацию в приложение на базе Desktop Qt.

Я был последние несколько днейзастрял на проблеме, и я не могу решить ее самостоятельно.Дело в том, что мое приложение opencv на моем raspberry pi 3 работало отлично, но мне нужно было использовать gstreamer для отправки вывода приложения через UDP в мое приложение на базе Qt на рабочем столе.

Opencv принимает конвейеры gstreamer в качестве входных и выходных данных с помощью видеозахвата и VideoWriter, но для этого нужно создать opencv с поддержкой gstreamer, и здесь я столкнулся с проблемой.Хотя я собираю opencv 3.4.3 на raspberry pi с поддержкой gstreamer, я больше не могу использовать типичную шапку Videocapture (0) для открытия камеры по умолчанию, она зависает только здесь.Приложение не выдает никакой ошибки или чего-либо еще, оно просто ничего не открывает и сохраняет в этом состоянии.Я знаю, что проблема здесь, потому что у меня есть несколько отладочных сообщений в приложении, и оно застряло в этом.Кроме того, если я использую конвейер gstreamer в качестве ввода вместо 0 (камера по умолчанию), это работает.Проблема только с камерой по умолчанию, может V4l испортил я не знаю.Отдельное использование конвейеров gstreamer на терминале работает отлично.

Немного изучив, я понял, что gst-plugins-bad, который мне нужен, использует некоторые библиотеки opencv, и я увидел на форуме nvidia, что это вызываетИз-за этого возникли проблемы с досками Jestson, но я не нашел четкого решения.Я не знаю, переопределяет ли gst-plugins-bad мою установку opencv, и в этом причина (gst-plugins-bad использует более старую версию opencv).В любом случае, я попытался установить opencv 3.4.3 после gst-plugins-bad также безуспешно.Похоже, что V4l не работает должным образом на моей сборке opencv 3.4.3.

С другой стороны, я пытался собрать opencv 3.4.3 на настольном компьютере Ubuntu 18.04 вместе с gstreamer 1.14.1, и он работает нормально, и понимает, что видеозахват cap (0) в порядке, как и ожидалось, и я могу без проблем запустить приложение, предназначенное для raspberry pi, даже добавив конвейеры gstreamer для ввода и вывода, все в порядке.Я думаю, что raspberry gstreamer - это версия 1.10.

Я собираюсь попробовать собрать и установить из исходного кода gstreamer 1.14.1, который работает вместе с opencv на моем настольном компьютере Ubuntu, на моем raspberry pi, но это будетдолго и больно.Я был бы очень признателен, если бы кто-нибудь смог пролить немного света на то, что здесь происходит.

Большое спасибо.

1 Ответ

0 голосов
/ 23 октября 2018

Когда я последний раз проверял (несколько лет назад), лучший способ решить эту проблему - создать «плагин gstreamer» ... это предполагает, что вы не используете проприетарное программное обеспечение (gstreamer - GPL).

Как вы упомянули, в базе кода gstreamer есть по крайней мере один плагин opencv (который довольно большой).Когда я последний раз проверял, он находился в репозитории gst-plugins-bad.

Путь вперед был бы - извлечь исходный код gstreamer и создать плагины самостоятельно.Как только вы сможете собрать подключаемый модуль opencv (и протестировать его с помощью соответствующего gst-launch pipe), вы можете начать модифицировать его под свои нужды.Первым шагом будет замена версии openCV в этом плагине на версию, которая есть в вашем собственном проекте.Вторым шагом может быть запуск всех ускорений (как в TBB, cuda и т. Д., В зависимости от вашей платформы).

После этого вы можете вставить свой проект в плагин.Преимущества этого в том, что вы настроили свой проект на работу в действительно эффективной мультимедийной среде.Вы также можете легко получить помощь по этому вопросу на IRC-канале для gstreamer, где эти разработчики «живут» (на Freenode, в #gstreamer).

Если вы не делаете свой проект в качестве плагина gstreamer,только другие варианты (последние, которые я проверял) - это использование appsource и appsink плагинов gstreamer.Это, вероятно, то, что OpenCV использует под капотом, если есть поддержка в эти дни.Я ожидаю, что здесь важна версия gstreamer, поэтому проверьте документацию openCV, для какой версии gstreamer они его создали.

Однако вместо этого рассмотрите возможность сделать это как плагин gstreamer.Это действительно крутой мир для входа, со многими добрыми разработчиками, которые, вероятно, много вам помогут на этом канале IRC ... еще раз: вот как это было в прошлый раз, я проверял ... лет назад

...