linux - 我如何远程处理(低延迟)Raspicam 输出?

标签 linux opencv raspberry-pi netcat

由于 Raspberry Pi 的处理能力有限,我需要在远程机器上处理相机输出。 native 是Linux服务器,应该使用OpenCV来处理视频数据。

我找到了一种解决方案,该解决方案在技术上可行,但在 1280x720 分辨率下会产生约 10 秒的延迟,在 640x360 分辨率下会产生约 17 秒的高延迟。这可能是某些缓冲区大小太大造成的?

到目前为止,我的解决方案:

首先在Raspberry PI上使用raspivid命令采集视频,将此数据输出到标准输出并使用netcat传输:

raspivid --timeout 0 --nopreview --intra 2 --width 1280 --height 720 --framerate 20 --output - | nc 192.168.1.108 5555

然后在接收部分(实际上是在发送前调用):

nc -l -p 5555 | ./receiver

其中接收方是具有以下源代码的 C++ 应用程序:

#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;
}

问题

如何将我的 raspicam 输出传输到 (Linux) 服务器,并能够使用支持 OpenCV 的 C++ 应用程序处理此数据。要求帧传输和该帧的实际处理之间的低延迟(<400 毫秒是可接受的)。

编辑:还需要高分辨率(1280x720 或更高)。

如果有任何错误,请原谅我的英语!

最佳答案

您可以使用 QWebSockets (Qt5)。 您只需要将图片从 cv::Mat 转换为 QByteArray 并进行流式传输。 在 720p 下,我通过 LAN 连接获得了将近 15 FPS。

关于linux - 我如何远程处理(低延迟)Raspicam 输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23474161/

相关文章:

android - 导入android项目时出现问题

linux - Linux 中检查文件是否存在的正确方法

python - 如何使用 compareHist 函数 opencv

linux - 使用 cron 作业将磁盘空间信息转为带有日期的 csv

c++ - 为什么 cv::imread 在包含 tensorflow 的 header 后返回 NULL

c++ - raspbian (raspberry pi 3) 连接到数据库 (mysql/mariadb)

python - 如何在 Raspberry Pi 中同步时钟?

python - 使用 BlueZ 5 模拟键盘

linux - 如何配置 Apache 2 以运行 Perl CGI 脚本?

python - 如何在 Debian Squeeze 上安装 pysqlite2?