我目前正在尝试使用 tmpfs 提高 python/openCV 的性能,因为我在尝试在 Raspberry Pi 3 上以 640x480 的速度录制 USB 相机时陷入了 5-10 FPS 左右。
在我的系统上,我使用 dd 命令获得这些原始写入传输速率:SD卡:2.5个月/秒每秒 : 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`)
它给出:
SD卡德采取 : 8.289990901947021 TMPFS 采取 : 8.240657806396484
tmpfs 已启用,如挂载命令所述: 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 没有提高写入速度吗?
如果直接写入内存不能提高速度,那么它很可能不是瓶颈。编码时,您的 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