2017-03-16 7 views
0

Ich versuche derzeit, Python/OpenCV-Performances mit tmpfs zu verbessern, wie ich bin stecken 5-10 FPS beim Versuch, eine USB-Kamera auf einem Raspberry Pi 3 bei 640x480 aufzunehmen.Verbessern von openCV VideoWriter mit tmpfs

Auf meinem System, erhalte ich diese Sätze rohen Schreibübertragung, dd Befehl: SD-Karte: tmpfs s 2,5Mo/380

s Mo /, leider, wenn sie auf einem tmpfs meine opencv Videodatei schreiben Ordner, ich habe keine Verbesserung bekommen. Hier ist meine Benchmark-Code:

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`) 

Es gibt:

SDCard nahm: 8,289990901947021 tmpfs nahm: 8,240657806396484

Die tmpfs gut aktiviert ist, wie Mount-Befehl angegeben: mount | grep "/var/tmp" ergibt tmpfs on /var/tmp type tmpfs (rw,nosuid,nodev,relatime) mount | grep "/ " ergibt /dev/mmcblk0p2 on/type ext4 (rw,noatime,data=ordered)

Hat jemand wissen, warum Tmfs Schreibgeschwindigkeit nicht verbessert?

Antwort

2

Wenn das Schreiben in den Speicher direkt die Geschwindigkeit nicht verbessert, ist es wahrscheinlich nicht der Flaschenhals. Ihre CPU-Auslastung liegt beim Kodieren wahrscheinlich bei 100%.

Als ultimativer Test können Sie versuchen, in/dev/null zu speichern. Laut dd hat das auf meinem Laptop einen Durchsatz von ca. 5GB/s. Um dies zu tun, müssen Sie einen symbolischen Link zu /home/pi/null.avi erstellen, da openCV eine Datei haben möchte, die mit .avi endet.

Ich testete Ihr Skript auf meinem Laptop auf SSD, HDD, Tmpfs und/dev/null und sie alle gaben ungefähr das gleiche Ergebnis (mit 2500 anstelle von 250 Iterationen).

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

Danke dude, du bringst mich wieder auf die richtige Spur! – technico

Verwandte Themen