【问题标题】:How do I remotely process (with low latency) Raspicam output?如何远程处理(低延迟)Raspicam 输出?
【发布时间】:2014-06-21 20:30:29
【问题描述】:

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

我找到了一个解决方案,该解决方案在技术上可行,但在 1280x720 分辨率下会产生不可接受的高延迟,在 10 秒左右,在 640x360 分辨率下会产生大约 17 秒。也许这是由于某些缓冲区太大造成的?

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

在树莓派上先用 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++ 应用程序处理这些数据。要求传输帧和实际处理该帧之间的低延迟(

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

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

【问题讨论】:

  • 你的问题是什么?延迟?
  • 是的,延迟太长了。
  • 看看这篇文章,也许有帮助:stackoverflow.com/questions/16750395/…
  • 他使用的分辨率对于我的应用程序来说太低了。将使用 360 度镜头。 720p 20FPS 200 ms 延迟应该是可能的。它与 mplayer 完美配合!
  • 我想知道管道是否“|”太小了

标签: linux opencv raspberry-pi netcat


【解决方案1】:

您可以使用 QWebSockets (Qt5)。 您所需要做的就是将图片从 cv::Mat 转换为 QByteArray 并将它们流式传输。 在 720p 时,我通过 LAN 连接获得近 15 FPS。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-23
    • 1970-01-01
    • 2016-07-19
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多