为什么gStreamer从waylandsink抛出错误?
我正在从事智能鸟食器项目() 在开发板上使用Coral camera运行birdfeeder.sh时,我得到: **(python3:3933):严重**:16:37:50.961:未能刷新Wayland连接 错误在终端窗口中向上流动,并淹没输出,直到I^Z退出程序。“python3:”后面的数字对于给定的运行是常量,但在不同的运行中会有所不同。 如果我将视频监视器插入电路板上的HDMI插座并运行该程序,摄像机的实时图像将显示在监视器中,如果我在摄像机前持有一只鸟的照片,该程序将工作,摄像机的图像将保存,并且鸟的正确识别信息将写入日志文件。 以下是管道代码:为什么gStreamer从waylandsink抛出错误?,gstreamer,google-coral,Gstreamer,Google Coral,我正在从事智能鸟食器项目() 在开发板上使用Coral camera运行birdfeeder.sh时,我得到: **(python3:3933):严重**:16:37:50.961:未能刷新Wayland连接 错误在终端窗口中向上流动,并淹没输出,直到I^Z退出程序。“python3:”后面的数字对于给定的运行是常量,但在不同的运行中会有所不同。 如果我将视频监视器插入电路板上的HDMI插座并运行该程序,摄像机的实时图像将显示在监视器中,如果我在摄像机前持有一只鸟的照片,该程序将工作,摄像机的图
def run_pipeline(user_function,
src_size=(640,480),
appsink_size=(320, 180)):
PIPELINE = 'v4l2src device=/dev/video0 ! {src_caps} ! {leaky_q} ! tee name=t'
if detectCoralDevBoard():
# Test framerate of 1/1 on 200212 (line 69), then 10/1 back to 30/1
SRC_CAPS = 'video/x-raw,format=YUY2,width={width},height={height},framerate=30/1'
PIPELINE += """
t. ! {leaky_q} ! glupload ! glfilterbin filter=glcolorscale
! {dl_caps} ! videoconvert ! {sink_caps} ! {sink_element}
t. ! {leaky_q} ! glupload ! glfilterbin filter=glcolorscale
! rsvgoverlay name=overlay ! waylandsink
"""
我对gstreamer缺乏经验,需要任何帮助。谢谢。问得好,但我不熟悉这个程序,我的珊瑚板上也没有显示器。然而,这里有一些想法供您开始调查。我刚刚进入gstreamer(GST),我觉得它很酷
t.
的每个引用都是一个新的处理线程:一个转到{sink\u element}
(这是python脚本中某个地方定义的字符串),另一个转到waylandsink
。源和汇之间的元素将管道中先前元素的汇作为源并进行某种转换。例如,大量使用videoconvert
插件将源视频信号神奇地转换为接收器可以使用的信号glupload
是一个opengl插件,可以将视频转换为opengl着色(我不清楚这是否必要)。我不认识其他一些插件waylandsink
插件抛出了你的错误。您可以在中查看文档。您可能需要查看C源代码以了解为什么它会生成严重错误,但如果视频显示在本地监视器上,则不应该是严重错误python3:NNN
字符串中的NNN编号是python线程的进程ID。可能对您没有意义,但GST是多线程的,因此有助于调试祝你好运 适用于在Coral Dev Board上努力使GStreamer以无头模式运行且没有活动终端会话(注册为Systemd服务或类似服务)的所有人。 我发现了一个糟糕的hack(现在也以类似的方式包含在更新的Coral示例代码中): 将其放在python代码中,您可以在其中组合GStreamer管道
我以前在一些谷歌代码中看到的另一件事是向gstreamer总线中注入消息,以取悦请求当前显示的元素。非常感谢您的回复。调查是在几个月前开始的,在此期间,我将您在#1中所述的大部分内容拼凑在一起。管道应准备输入到TensorFlow推理引擎。一个必须是320x180图像,但我不确定第二个是什么。我深陷于#2之中,试图理解在没有显示器的情况下,是什么让Wayland陷入愤怒。部署它的时间不会有问题。PS:#3提供了大量信息。我不是一个有经验的Python程序员,但是我已经用很多其他语言编程了。我明白了。是的,第一个线程就是映像本身。第二种是基于TPU对象检测的rsvg覆盖(google it),可能是检测对象的边界框和文本。Wayland是一个窗口管理器,它需要一个GUI。我明白了。Wayland是一个窗口管理器,需要GUI。我怀疑如果没有显示输出,它会产生严重错误。如果没有HDMI信号,则需要将输出流传输到远程系统。使用RTSP信封和udpsink进行流式传输;要在远程服务器上接收的udpsrc。在网上有很多这样做的例子。
os.environ["XDG_RUNTIME_DIR"] = "/run/user/1000"