gpt4 book ai didi

python - 如何同时分析和流式传输 RaspberryPi 视频

转载 作者:行者123 更新时间:2023-12-01 06:31:19 24 4
gpt4 key购买 nike

我正在使用 raspivid 和 netcat 将视频从 RaspberryPi Zero 流式传输到我的 PC:

raspivid -t 0 -n -w 320 -h 240 -hf -fps 30 -o - | nc PC_IP PORT

现在我想在 RaspberryPi 上逐帧分析该视频以进行对象检测。 Raspi 必须对对象检测使用react,因此我必须在流式传输视频时对 Pi 进行分析。

我的想法是使用 tee 命令创建一个命名管道,并在 python 程序中读取此命名管道以获取帧:

mkfifo streampipe    
raspivid -t 0 -n -w 320 -h 240 -hf -fps 30-o - | tee nc PC_IP PORT | streampipe

但这不起作用,它说sh1:1:streampipe:找不到

我的 python 程序如下所示:

import subprocess as sp
import numpy

FFMPEG_BIN = "ffmpeg"
command = [ FFMPEG_BIN,
'-i', 'streampipe', # streampipe is the named pipe
'-pix_fmt', 'bgr24',
'-vcodec', 'rawvideo',
'-an','-sn', # we want to disable audio processing (there is no audio)
'-f', 'image2pipe', '-']
pipe = sp.Popen(command, stdout = sp.PIPE, bufsize=10**8)

while True:
# Capture frame-by-frame
raw_image = pipe.stdout.read(640*480*3)
# transform the byte read into a numpy array
image = numpy.fromstring(raw_image, dtype='uint8')
image = image.reshape((480,640,3)) # Notice how height is specified first and then width
if image is not None:

analyse(image)...

pipe.stdout.flush()

有人知道如何做到这一点吗?

感谢您的回答。

最佳答案

tee 命令将 stdin 复制到 stdout,并一路复制到您提到的任何其他文件:

ProcessThatWriteSTDOUT | tee SOMEFILE | ProcessThatReadsSTDIN

或制作两份副本:

ProcessThatWriteSTDOUT | tee FILE1 FILE2 | ProcessThatReadsSTDIN

您的 nectcat 命令不是文件,而是一个进程。所以你需要让你的进程看起来像一个文件 - 这就是所谓的“进程替换”你可以这样做:

ProcessThatWriteSTDOUT | tee >(SomeProcess) | ProcessThatReadsSTDIN

所以,要剪一个长篇故事,你需要更多类似的东西:

raspivid ... -fps 30-o - | tee >(nc PC_IP PORT) | streampipe

关于python - 如何同时分析和流式传输 RaspberryPi 视频,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59902143/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com