您尚未登录。

楼主 #1 2020-08-10 22:02:56

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

我有6个摄像头,如何30FPS不掉帧率的采集呢?

我有6个USB摄像头,接到PC机上,我使用opencv和qt,能全部同时打开,并imshow
显示出图像,并保持30fps的帧率,

我每个USB摄像头使用了1个线程去读取摄像头数据,然后显示出来。

我想将采集的图片一张一张无损的保存在本地png格式,但是当我在读取的线程中imwrite保存的时候,就会降低帧率(摄像头保持30FPS,PC的读取帧率降低)
我改变了思路,我创建了6个队列,每一个线程去获取图片,然后扔到对应的队列里面,然后创建6个线程去读取队列并保存。
我发现帧率还是降低的,并不能保证满帧率,
因为PC机是4核8线程,即使加了很多线程,都是在轮询执行,保存图片的线程占用了读取图片线程的时间。
有没有大佬有好的解决办法呢,我想30fps不丢帧的保存下来摄像头拍摄的图片,并且图片需要无损的方式。

离线

#2 2020-08-10 22:05:25

春风吹又生
会员
注册时间: 2020-02-25
已发帖子: 61
积分: 60

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

一张一张无损的保存在本地png格式

磁盘IO速度与CPU不在一个量级, 你现在是机械硬盘? 要不要用DDR模拟一个磁盘试一试?

离线

楼主 #3 2020-08-10 22:18:55

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

春风吹又生 说:

磁盘IO速度与CPU不在一个量级, 你现在是机械硬盘? 要不要用DDR模拟一个磁盘试一试?

我的DDR是16GB的,因为读取速度很快,硬盘存储速度慢,图片有一堆都堆在了队列里面,队列就是内存,能在任务管理器看到内存占用暴涨,一会就2GB或3GB,时间再长就内存爆了。。。。

离线

楼主 #4 2020-08-10 22:20:17

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

春风吹又生 说:

磁盘IO速度与CPU不在一个量级, 你现在是机械硬盘? 要不要用DDR模拟一个磁盘试一试?

还有,我现在用的是垃圾固态硬盘,
好像保存小文件的速度慢,我拷贝大文件能达到300MB/S,但是保存的图片是一张张小文件,一个进程读队列保存的话,从任务管理看,速度只有3~4MB/S.

离线

楼主 #5 2020-08-10 22:24:38

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

我说一个思路,不知道可不可行,如果我采集到一张图片我就把图片拼起来,我拼成一个长图,当图片长度达到一定时,我就保存,这样相当于保存大图,不知道是不是速度会加速。

离线

#6 2020-08-10 22:47:32

黄粱梦
会员
注册时间: 2020-03-17
已发帖子: 45
积分: 39

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

建议先堆硬件, 先把需求实现再说, 毕竟配一台好的电脑比人工划算多了.

然后后面再做cost down, 找到性价比的平衡点.

离线

楼主 #7 2020-08-10 22:56:25

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

我现在是I7 7700  16GB内存   ssd

离线

#8 2020-08-11 08:43:52

拉轰的脚踏车
会员
注册时间: 2020-03-20
已发帖子: 288
积分: 222

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

VisualStudio工具里面有一个性能分析器, 可以采集一段时间内程序运行情况,

分析报告非常详细,可以显示每行代码/每个函数占用的时间,

楼主可以试一试。

离线

楼主 #9 2020-08-11 08:49:56

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

拉轰的脚踏车 说:

VisualStudio工具里面有一个性能分析器, 可以采集一段时间内程序运行情况,

分析报告非常详细,可以显示每行代码/每个函数占用的时间,

楼主可以试一试。

我就是看的那个分析,内存暴涨

离线

楼主 #10 2020-08-11 08:51:15

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

我有个思路不知道怎么样,采集图像到内存速度时很快的,我使用1个线程去轮询采集图像到队列,将更多的线程留给保存图片到硬盘

离线

#11 2020-08-11 08:57:07

哇酷小二
管理员
所在地: 你猜
注册时间: 2020-04-22
已发帖子: 3,387
积分: 1902
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

用 ffmpeg 的 sdk, 把图片保存成H.264压缩的视频,这样把压力传给了CPU,对磁盘IO影响比较小。

可能需要在每帧照片上面打上时间戳。





离线

楼主 #12 2020-08-11 09:17:42

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

哇酷小二 说:

用 ffmpeg 的 sdk, 把图片保存成H.264压缩的视频,这样把压力传给了CPU,对磁盘IO影响比较小。

可能需要在每帧照片上面打上时间戳。

保存成视频是会对图片造成有损的,我采集的图片并不是普通的彩色图片,是具有深度信息的图片,每一个像素点信息都是不能丢的,所以视频方式目前没有无损的方式

离线

#13 2020-08-11 11:28:27

iamseer
会员
注册时间: 2020-06-06
已发帖子: 69
积分: 46.5

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

既然硬盘是瓶颈,那多插几个高质量优盘行不行?几个摄像头写往不同优盘,只要总线带宽不满吞吐量应该可以上升。

离线

楼主 #14 2020-08-11 18:34:03

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

iamseer 说:

既然硬盘是瓶颈,那多插几个高质量优盘行不行?几个摄像头写往不同优盘,只要总线带宽不满吞吐量应该可以上升。

不是硬盘是瓶颈,硬盘的写入速度可达300MB/s
但由于一帧帧保存图片属于小文件,单个文件保存速度很慢,达不到较高的速度。

离线

#15 2020-08-11 18:42:45

barcode
会员
注册时间: 2020-03-27
已发帖子: 3
积分: 2.5

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

迪卡 说:

不是硬盘是瓶颈,硬盘的写入速度可达300MB/s
但由于一帧帧保存图片属于小文件,单个文件保存速度很慢,达不到较高的速度。

看起来瓶颈在写文件?

每秒要写 6*30 = 180 个png 文件?

写一个单线程程序, 全速写png文件, 看平均每秒能写多少个?

比如算下来每秒能写 60个png文件, 那么就准备3个硬盘继续测试.

离线

楼主 #16 2020-08-12 06:44:57

迪卡
会员
所在地: 河北
注册时间: 2018-11-02
已发帖子: 916
积分: 903
个人网站

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

barcode 说:

看起来瓶颈在写文件?

每秒要写 6*30 = 180 个png 文件?

写一个单线程程序, 全速写png文件, 看平均每秒能写多少个?

比如算下来每秒能写 60个png文件, 那么就准备3个硬盘继续测试.

摄像头采集速度是25MB/S,单线程写入速度是4MB/S左右

离线

#17 2020-08-12 13:10:07

jujiaqi
会员
注册时间: 2019-10-19
已发帖子: 17
积分: 16

Re: 我有6个摄像头,如何30FPS不掉帧率的采集呢?

楼主可以贴一下每个图片文件的大小,方便大家分析。
如果是 30fps ,每次采集完后有30ms时间压缩并存储文件。
我认为6个摄像头 30fps png 对硬盘不会造成压力,除非保存的是非压缩格式,瓶颈应该不在IO,尤其是SSD。

“但由于一帧帧保存图片属于小文件,单个文件保存速度很慢,达不到较高的速度” 这个结论不一定可靠,建议楼主比较严格的方式测试,比如写个小程序,循环创建文件并写入几百k的数据,看看每次写入耗费的时间,算算一秒能写多少个这样的文件。

最后有可能是imwrite 效率太低了。

离线

页脚

工信部备案:粤ICP备20025096号 Powered by FluxBB

感谢为中文互联网持续输出优质内容的各位老铁们。 QQ: 516333132, 微信(wechat): whycan_cn (哇酷网/挖坑网/填坑网) service@whycan.cn