linux - raspberry - ¿Cómo puedo procesar de forma remota(con baja latencia) la producción de Raspicam?
escritorio remoto raspberry pi 3 (1)
Puede usar QWebSockets (Qt5). Todo lo que necesita es convertir las imágenes de cv :: Mat a QByteArray y transmitirlas. En 720p obtengo casi 15 FPS por conexión LAN.
Debido a la potencia de procesamiento limitada en la Raspberry Pi, debo procesar la salida de la cámara en una máquina remota. Esta máquina es un servidor Linux y debe usar OpenCV para procesar los datos de video.
Encontré una solución que funciona técnicamente pero produce una alta latencia inaceptable de alrededor de 10 segundos con una resolución de 1280x720 y alrededor de 17 segundos con una resolución de 640x360. ¿Tal vez esto se deba a que algún tamaño de buffer es demasiado grande?
Entonces, mi solución hasta el momento:
En Raspberry PI, primero use el comando raspivid para capturar el video, envíe estos datos a la salida estándar y transmita usando netcat:
raspivid --timeout 0 --nopreview --intra 2 --width 1280 --height 720 --framerate 20 --output - | nc 192.168.1.108 5555
Luego, en la parte receptora (realmente llamada antes de transmitir):
nc -l -p 5555 | ./receiver
where receiver es una aplicación C ++ con el siguiente código fuente:
#include <opencv2/highgui/highgui.hpp>
#include <iostream>
int main()
{
cv::VideoCapture cap("/dev/stdin");
if(!cap.isOpened())
{
std::cout << "Could not open ''/dev/stdin''!" << std::endl;
return -1;
}
cv::namedWindow("Receiver");
cv::Mat frame;
while(cap.read(frame))
{
cv::imshow("Receiver", frame);
cv::waitKey(30);
}
cv::waitKey(0);
return 0;
}
Pregunta
¿Cómo puedo transmitir mi salida raspicam a un servidor (Linux) y ser capaz de procesar estos datos con una aplicación C ++ habilitada para OpenCV? Se requiere baja latencia (<400 ms es aceptable) entre la transmisión de un fotograma y el procesamiento real de este fotograma.
editar: también se requiere una resolución alta (1280x720 o más).
¡Perdón por mi inglés si se cometen errores!