我已经在树莓派上使用opencv进行计算机视觉项目了一段时间,该项目通过UDP视频和信息传输到基于Desktop Qt的应用程序。
最近几天我一直陷在一个问题上,我自己无法解决。问题是,我在raspberry pi 3上的opencv应用程序运行正常,但是我需要使用gstreamer通过UDP将应用程序的输出发送到基于Qt的桌面应用程序。
Opencv接受gstreamer管道作为通过videocapture和videowriter的输入和输出,但是为此opencv需要在gstreamer支持下构建,这就是我要解决的问题。虽然我在具有gstreamer支持的树莓派上构建了opencv 3.4.3,但我再也无法使用典型的Videocapture cap(0)打开默认相机了,它只能挂在这里了。该应用程序不会引发任何错误或任何错误,它只是不会打开任何错误并保持该状态。我知道问题就在那里,因为我在应用程序上有几条调试消息,并且卡在其中。除此之外,如果我将gstreamer管道用作输入而不是0(默认摄像头),它将起作用。问题仅在于默认相机,也许V4l搞砸了,我不知道。分别在终端上使用gstreamer管道非常有效。
经过一番研究,我意识到我需要的gst-plugins-bad使用了一些opencv库,并且我在nvidia论坛上看到,正因为如此,这在jestson板上造成了一些麻烦,但是我没有看到一个明确的解决方案。我不知道gst-plugins-bad是否覆盖了我的opencv安装,这就是原因(gst-plugins-bad使用旧版本的opencv)。无论如何,我都尝试过在gst-plugins-bad之后也没有运气的情况下安装opencv 3.4.3。就像V4l在我的opencv 3.4.3构建中无法正常工作。
另一方面,我尝试在台式机ubuntu 18.04上与gstreamer 1.14.1一起构建opencv 3.4.3,它可以正常运行,并且可以正常理解videcapture cap(0),而且我可以毫无问题地运行用于树莓派的应用程序,甚至可以将gstreamer管道添加到输入和输出,一切都很好。我认为raspberry gstreamer是1.10版。
我将尝试从源gstreamer 1.14.1进行构建和安装,该源可在我的桌面Ubuntu,树莓派上与opencv一起使用,但这会很长且很痛苦。如果有人可以对这里发生的事情有所了解,我将非常感激。
非常感谢您。
答案 0 :(得分:0)
我上次检查时(几年前),解决此问题的最佳方法是构建“ gstreamer插件” ...这是假设您没有在使用专有软件(gstreamer是GPL)。
正如您提到的,gstreamer代码库中至少有一个opencv插件(相当大)。上次检查时,它位于gst-plugins-bad存储库中。
一种前进的方式是拉出gstreamer源代码,并自己构建插件。一旦您可以自己构建支持opencv的插件(并使用适当的gst-launch管道对其进行测试),便可以开始根据需要进行修改。第一步是将该插件中的openCV版本替换为您自己项目中的版本。第二步可能是使所有加速工作(如TBB,CUDA等,具体取决于您的平台)。
之后,您可以将您的项目推送到插件中。这样做的好处是,您可以将项目设置为在真正有效的多媒体框架中工作。您也可以在gstreamer的IRC频道上真正轻松地获得帮助,这些开发人员可以“在线”生活(在#gstreamer中的Freenode上)。
如果您不作为gstreamer插件来做项目,(我最后检查的)唯一的其他选择是使用gstreamer的appsource和appsink插件。如果最近有支持的话,这些可能就是openCV在后台使用的功能。我希望gstreamer的版本在这里很重要,因此请检查openCV文档,了解他们为其构建了什么版本的gstreamer。
但是,请考虑将其用作gstreamer插件。这是一个非常酷的世界,有很多友好的开发人员可能会在IRC频道上为您提供很多帮助。。。。。。。。。。。。