gpt4 book ai didi

c++ - 初始突发后 OpenCV 网络 (IP) 相机每秒帧数变慢

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:24:02 27 4
gpt4 key购买 nike

编辑:升级到 OpenCV 2.4.2 和 FFMPEG 0.11.1 似乎已经解决了所有的错误和连接问题,但它仍然没有解决帧率下降的问题。

我在 Ubuntu 12.04 中使用默认的 OpenCV 包,我认为它是 2.3.1。我正在连接到流式传输 MJPEG 的 Foscam FI8910W。我看到有人说最好的方法是使用 opencv+libjpeg+curl,因为 it is faster than the gstreamer solution .但是,我偶尔(50% 的时间)可以在构建时从 OpenCV 连接到相机并获取视频流。该流以大约 30 fps 的速度开始大约 1 秒,然后减慢到 5-10 fps。我正在从事的项目需要 6 个摄像头,最好以 15-30 fps 的速度运行(越快越好)。

这是我的问题:

  1. 这是一个在 2.4.2 中修复的问题吗,我应该只是升级?
  2. 如果没有,请问我为什么会出现短暂的爆发然后它减速?
  3. 最好的方案还是使用curl+libjpeg吗?
  4. 我看到很多人说已经发布了解决方案,但是很少有指向带有解决方案的帖子的实际链接。拥有所有的实际在一个地方引用的解决方案(包括 curl 和 gstreamer)将是根据 http://opencv-users.1802565.n2.nabble.com/IP-camera-solution-td7345005.html 非常方便.

这是我的代码:

  VideoCapture cap;
cap.open("http://10.10.1.10/videostream.asf?user=test&pwd=1234&resolution=32");
Mat frame;
cap >> frame;
wr.open("test.avi", CV_FOURCC('P','I','M','1'), 29.92, frame.size(), true);
if(!wr.isOpened())
{
cout << "Video writer open failed" << endl;
return(-1);
}
Mat dst = Mat::zeros(frame.rows + HEADER_HEIGHT, frame.cols, CV_8UC3);
Mat roi(dst, Rect(0, HEADER_HEIGHT-1, frame.cols, frame.rows));
Mat head(dst, Rect(0,0,frame.cols, HEADER_HEIGHT));
Mat zhead = Mat::zeros(head.rows, head.cols, CV_8UC3);
namedWindow("test", 1);
time_t tnow;
tm *tS;
double t1 = (double)getTickCount();
double t2;
for(int i = 0; i>-1 ; i++) // infinite loop
{
cap >> frame;
if(!frame.data)
break;
tnow = time(0);
tS = localtime(&tnow);
frame.copyTo(roi);
std::ostringstream L1, L2;
L1 << tS->tm_year+1900 << " " << coutPrep << tS->tm_mon+1 << " ";
L1 << coutPrep << tS->tm_mday << " ";
L1 << coutPrep << tS->tm_hour;
L1 << ":" << coutPrep << tS->tm_min << ":" << coutPrep << tS->tm_sec;
actValueStr = L1.str();
zhead.copyTo(head);
putText(dst, actValueStr, Point(0,HEADER_HEIGHT/2), fontFace, fontScale, Scalar(0,255,0), fontThickness, 8);
L2 << "Frame: " << i;
t2 = (double)getTickCount();
L2 << " " << (t2 - t1)/getTickFrequency()*1000. << " ms";
t1 = (double)getTickCount();
actValueStr = L2.str();
putText(dst, actValueStr, Point(0,HEADER_HEIGHT), fontFace, fontScale, Scalar(0,255,0), fontThickness, 8);
imshow("test", dst);
wr << dst; // write frame to file
cout << "Frame: " << i << endl;
if(waitKey(30) >= 0)
break;
}

下面是正确运行时列出的错误:

Opening 10.10.1.10
Using network protocols without global network initialization. Please use avformat_network_init(), this will become mandatory later.
Using network protocols without global network initialization. Please use avformat_network_init(), this will become mandatory later.
[asf @ 0x701de0] max_analyze_duration reached
[asf @ 0x701de0] Estimating duration from bitrate, this may be inaccurate
[asf @ 0x701de0] ignoring invalid packet_obj_size (21084 656 21720 21740)
[asf @ 0x701de0] freeing incomplete packet size 21720, new 21696
[asf @ 0x701de0] ff asf bad header 0 at:1029744
[asf @ 0x701de0] ff asf skip 678 (unknown stream)
[asf @ 0x701de0] ff asf bad header 45 at:1030589
[asf @ 0x701de0] packet_obj_size invalid
[asf @ 0x701de0] ff asf bad header 29 at:1049378
[asf @ 0x701de0] packet_obj_size invalid
[asf @ 0x701de0] freeing incomplete packet size 21820, new 21684
[asf @ 0x701de0] freeing incomplete packet size 21684, new 21836
Using network protocols without global network initialization. Please use avformat_network_init(), this will become mandatory later.
Using network protocols without global network initialization. Please use avformat_network_init(), this will become mandatory later.
[asf @ 0x701de0] Estimating duration from bitrate, this may be inaccurate
Successfully opened network camera
[swscaler @ 0x8cf400] No accelerated colorspace conversion found from yuv422p to bgr24.
Output #0, avi, to 'test.avi':
Stream #0.0: Video: mpeg1video (hq), yuv420p, 640x480, q=2-31, 19660 kb/s, 90k tbn, 29.97 tbc
[swscaler @ 0x9d25c0] No accelerated colorspace conversion found from yuv422p to bgr24.
Frame: 0
[swscaler @ 0xa89f20] No accelerated colorspace conversion found from yuv422p to bgr24.
Frame: 1
[swscaler @ 0x7f7840] No accelerated colorspace conversion found from yuv422p to bgr24.
Frame: 2
[swscaler @ 0xb9e6c0] No accelerated colorspace conversion found from yuv422p to bgr24.
Frame: 3

有时它会在第一个 Estimating duration from bitrate 语句之后挂起

最佳答案

您是否尝试删除写入磁盘的代码?当磁盘缓冲区填满时,我已经看到与 USB 相机非常相似的性能问题。一开始帧率很高,然后急剧下降。

如果这是问题所在,另一种选择是将您的压缩编解码器更改为压缩更显着的编解码器。

关于c++ - 初始突发后 OpenCV 网络 (IP) 相机每秒帧数变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11333698/

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