我想将RPi(3B +)的视频捕获流传输到PC(OS:Ubuntu)。由于我需要对传入的帧进行一些图像处理,因此我选择使用opencv的python。其概念是,视频流从Pi和Netcat通过Wifi发送到PC,并在到达PC时,在通过Python脚本读取fifo的同时,将流馈送到fifo。
我还尝试了mplayer的netcat版本,并且流的接收是无可挑剔的,但是当流被馈送到fifo时,就好像没有开始监听该特定端口一样。如果我使用一个简单的文本文件,它将被传入的字节填充,但是无法与py脚本同时读取。您能帮我如何使fifo和流媒体同时工作吗?
Raspberry代码:
raspivid -w 640 -h 480 -o - -t 30000 -b 2000000 | nc "IP" "PORT"
在PC上创建fifo:
#!/bin/bash
if [ -p fifo ]
then
rm fifo
fi
mkfifo fifo
nc -l -k -p "PORT" > fifo
用于显示框架的Python代码:
import cv2
import numpy
cap = cv2.VideoCapture('fifo')
while(cap.isOpened()):
ret, frame = cap.read()
cv2.imshow('iGenius138 Drone',frame)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()