2017-03-16 19 views
0

私は現在、640x480でラズベリーパイ3にUSBカメラを記録しようとしている間に、5-10FPS前後で立ち往生しているので、tmpfsを使ってpython/openCVのパフォーマンスを改善しようとしています。悲しいことに380のMo/sのtmpfsでopenCV VideoWriterを改善する

、tmpfsの上で私のOpenCVのビデオファイルの書き込み:私のシステムで

、私はddコマンドを使用して、これらの生の書き込み転送速度を得る: SDカード:2.5Mo/sの tmpfsのフォルダ、私は何か改善が得られませんでした。ここに私のベンチマークのコードは次のとおりです。

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

をmountコマンドで述べたように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が書き込み速度を改善していない理由を知っていましたか?

答えて

2

メモリに直接書き込んでも速度が向上しない場合は、ボトルネックではない可能性があります。あなたのCPU使用率は、おそらくエンコード中に100%です。

究極のテストとして、/ dev/nullに保存してみてください。 ddによると、私のラップトップには約5GB/sのスループットがあります。 openCVは.aviで終わるファイルを必要とするため、/home/pi/null.aviへのシンボリックリンクを作成する必要があります。

私のラップトップでSSD、HDD、tmpfs、および/ dev/nullでスクリプトをテストしたところ、おおよそ同じ結果が得られました(250回の反復ではなく2500回の使用)。

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

おかげで、あなたは正しいトラックに戻ってきました! – technico

関連する問題