【共享学习】关于存图那些事儿
存图是机器视觉领域绕不过去的环节,逢年过节,机器视觉从业者见面寒暄第一句多半都是:“今天你家设备丢图了吗?”针对机器视觉存图原理及常见问题点,结合个人多年经验做出解答。
要想获得解决方案,首先需要了解原理。为向大家更直观地描述存图的完整过程,画了一张精简的图如下:

结合个人经验,总结如下:
- 非图像处理模块都是获取内存图像地址(称为浅拷贝),因此耗时短,内存占用低;图像处理模块、深度学习模块在获取内存图像地址后,还需要将图像数据拷贝复制(格式不同情况下还需要转换)到指定图像对象(称为深拷贝),因此耗时长、内存占用高。
- 由上图可知,图像越大,则复制图像数据、压缩图像、写入磁盘IO整个过程的耗时就越长。
- 内容丰富的图像可压缩信息量小,因此压缩率分别选择90%和30%,图像大小差异不大;内容单一的图像可压缩信息量大,因此压缩率分别选择90%和30%,图像大小差异较大。因此,对于内容丰富的图像,压缩率选择90%可能比压缩率选择30%耗时更短,因为图像压缩也需要CPU参与计算(采用PCA等压缩算法),会增加耗时。
- 高速存图时,耗时瓶颈在读写磁盘IO。因为只有读写磁盘IO不是在内存(RAM)中进行的,而内存的带宽通常是硬盘的几十倍。因此,想要提高存图速度,除了提升CPU外,更重要的是提升硬盘的读写速度,如将机械硬盘更换为高速的固态硬盘(SSD)。
- 高速存图时,耗时波动瓶颈在CPU。Windows系统是多任务操作系统,可以同时处理多个进程,背后实现机制是复杂的中断策略(分时调度策略)。假设有两个进程A和B,则CPU会执行A一段时间,然后中断,跳转执行B一段时间,再跳转到A执行,如此往复,直到两个进程都执行结束。因此,当CPU利用率较高时(例如大于70%),CPU中断的时间就会变长,进而导致存图耗时变长。因此,除了提升CPU、关闭非必要进程外,还可以通过在任务管理器中提升指定进程的优先级,使得该进程得到更多的CPU。任务管理器提升进程优先级的操作方法如下图所示。

版权声明:本文为V社区用户原创内容,转载时必须标注文章的来源(V社区),文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件至:
v-club@hikrobotics.com 进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容。