2017-11-29 1 views
0

Ich habe einen zufälligen Datensatz von 100000 Bildern.Wie kann man mit opencv und python schneller über einen großen Bilddatensatz loopen?

Ich habe den folgenden Code für das gleiche Dataset verwendet, aber die Verarbeitungsgeschwindigkeit ist schrecklich langsam (in AWS-GPU-Instanz).

import cv2 
from progressbar import ProgressBar 
pbar = ProgressBar() 
def image_to_feature_vector(image, size=(128, 128)): 
    return cv2.resize(image, size).flatten() 
imagePath = #path to dataset 
data = [] 
#load images 
for i in pbar(range(0,len(imagePath))): 
    image = cv2.imread(imagePath[i]) 
    image=cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) 
    features = image_to_feature_vector(image) 
    data.append(features) 

Wie kann man die Verarbeitungsgeschwindigkeit verbessern?

+0

Wie lange dauert es? –

+0

@ElisByberi 1 Stunde – snfs

+0

~ 28 Bilder/s. Hast du es ohne 'ProgressBar()' versucht? Vielleicht wird es schneller! GPU beschleunigt 'ProgressBar()' nicht! –

Antwort

1

Die eigentliche Lösung hängt von der Engpassanalyse ab.

Wie dem auch sei, die Bildlese- (Lade-) Zeit ist eine wertvolle Ressource, die Sie verwenden könnten.

Ihr Prozess ist sequenzieller:

enter image description here

In Szenarien, wie, dass ich etwas verwenden IO-Pipeline oder parallele Pipeline genannt. Die Idee besteht darin, einen Thread zu verwenden, um die Bilder seriell zu laden und sie für mehrere Verarbeitungsthreads bereitzustellen. Während Sie also Input-thread lesen, verwenden ein oder mehrere Threads die CPUs, um vorherige Bilder zu verarbeiten. Verwenden Sie einen einzelnen Thread die Daten seriell als auch zu schreiben:

enter image description here

Leider benutze ich nicht Python so viel wie etwas Beispiel zu schreiben. Dieses Muster wäre bereits in einem Python-Thread-Framework implementiert.

Ich benutze diesen Ansatz für Grab Kamera Frames und Verarbeitung in hoher Geschwindigkeit, aber ich benutze C++ dafür. Wenn es Ihnen nichts ausmacht, in C++ zu programmieren, würden Sie in diesem impressive answer etwas inspirierendes finden.

Verwandte Themen