【问题标题】:Improving openCV VideoWriter with tmpfs使用 tmpfs 改进 openCV VideoWriter
【发布时间】:2017-03-16 14:23:42
【问题描述】:

我目前正在尝试使用 tmpfs 提高 python/openCV 的性能,因为我在尝试以 640x480 在树莓派 3 上录制 USB 摄像头时卡在 5-10 FPS 左右。

在我的系统上,我使用 dd 命令获得了这些原始写入传输率: SD卡:2.5Mo/s tmpfs : 380 月/秒

遗憾的是,在 tmpfs 文件夹中写入我的 opencv 视频文件时,我没有得到任何改进。这是我的基准代码:

import cv2
import numpy as np
import time

x = np.random.randint(255, size=(480, 640,3)).astype('uint8')

writer1 = cv2.VideoWriter('/home/pi/testDX1.avi',cv2.cv.CV_FOURCC('D','X','5','0'), 10, (640, 480), True)  
ctime=time.time()
for i in range(250):
    writer1.write(x)
writer1.release()
print("SDCard took :  "+`time.time()-ctime`)

writer2 = cv2.VideoWriter('/var/tmp/testDX2.avi',cv2.cv.CV_FOURCC('D','X','5','0'), 10, (640, 480), True)
ctime=time.time()
for i in range(250):
    writer2.write(x)
writer2.release()
print("tmpfs took :  "+`time.time()-ctime`)

它给出了:

SDCard 占用:8.289990901947021 tmpfs 占用:8.240657806396484

tmpfs 已启用,如 mount 命令所述: mount | grep "/var/tmp"tmpfs on /var/tmp type tmpfs (rw,nosuid,nodev,relatime) mount | grep "/ "/dev/mmcblk0p2 on / type ext4 (rw,noatime,data=ordered)

有人知道为什么 tmfs 没有提高写入速度吗?

【问题讨论】:

    标签: python linux opencv raspberry-pi3 tmpfs


    【解决方案1】:

    如果直接写入内存并不能提高速度,那么很可能不是瓶颈。编码时您的 CPU 使用率可能为 100%。

    作为终极测试,您可以尝试保存到/dev/null。根据 dd,我的笔记本电脑的吞吐量约为 5GB/s。虽然要做到这一点,但您需要创建一个指向 /home/pi/null.avi 的符号链接,因为 openCV 需要一个以 .avi 结尾的文件。

    我在笔记本电脑上的 SSD、HDD、tmpfs 和 /dev/null 上测试了您的脚本,它们都给出了大致相同的结果(使用 2500 次而不是 250 次迭代)。

    /dev/null took :  6.05289101600647
    tmpfs took     :  6.018815994262695
    HDD took       :  5.695630073547363
    SSD took       :  5.711660861968994
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-05-26
      • 1970-01-01
      • 2014-06-06
      • 2015-02-01
      • 1970-01-01
      • 2014-05-02
      • 2014-08-01
      相关资源
      最近更新 更多