从子流程实时捕获标准输出和摄像机帧

时间:2018-11-17 20:06:06

标签: python

我有一个无线传感器节点,可以无线传输到与计算机相连的接收器。我使用此命令实时查看数据

5 = 1 + 1 + 1 + 1 + 1    -->     X     X   X   X   X
5 = 2 + 1 + 1 + 1        -->     XX    X   X   X
5 = 3 + 1 + 1            -->     XXX   X   X
5 = 2 + 2 + 1            -->     XX    XX  X
5 = 4 + 1                -->     XXXX  X
5 = 3 + 2                -->     XXX   XX
5 = 5                    -->     XXXXX

我是Python的新手,但是我能够开发如下代码来捕获标准输出,并从连接到同一台计算机的相机拍摄帧。就是说,当接收到一个数据包(数据)时,将在该时间戳处捕获一个帧。

它运行正常,但运行缓慢。我以10 Hz的频率运行传感器(每0.1秒发送一次),但是代码以较低的速度运行。我知道那是因为我正在使用sudo stdbuf -o0 ./pip_sense.v2 l l | stdbuf -o0 grep -P "TX:03(376|004) (我注释掉了这一部分,这有助于减少延迟)。而且,正如本post及其所说(据我所知)所讨论的那样,使用cv2.imwrite()可以调用额外的shell进程,从而增加延迟。

另外,看着thisshell=True似乎也造成了延误。第二个链接中提出了一个解决方案,但是我真的不明白如何修改它以适合我。

Popen()

感谢您的帮助

谢谢

1 个答案:

答案 0 :(得分:0)

更新: 我从朋友那里得到了建议,并且奏效了。

在save_webcam函数之外(作为全局变量)调用cam = cv2.VideoCapture(-1)可以大大减少延迟。

在这种情况下,每次打开save_webcam ...时,相机将打开一次,然后将捕获图像,因此,打开和关闭相机会减慢该过程。

但是,我想进一步增强该程序,因为有时会卡住。因此,任何人都知道此post中的内容以及应该如何修改我的stdout部分,然后请在此处评论。我很欣赏这个。