2011-11-03 19 views
10

Sto provando e non riesco a rendere opencv_traincascade utilizzare più thread. L'unica documentazione che riesco a trovare dice "costruire OpenCV con TBB". Non sono sicuro di non riuscire a creare OpenCV con TBB, o se c'è qualche flag che devo impostare per opencv_traincascade.Come posso creare OpenCV con TBB?

Ho scaricato il superpack di OpenCV versione 2.3.1 windows e tbb40_20111003oss_win.zip, che ho estratto in C:\tbb40_20111003oss. Ho quindi generato VC8 .sln e .proj file utilizzando CMake, impostando

WITH_TBB: ON

TBB_INCLUDE_DIR:PATH=C:\tbb40_20111003oss\include

TBB_LIB_DIR:PATH=C:/tbb40_20111003oss/lib/intel64/vc8

OpenCV poi costruisce senza errori, ma quando ho eseguito opencv_traincascade E 'singlethreaded. Qualcuno sa cosa sto sbagliando?

risposta

1

Provare setNumThreads(), con il numero dei core del processore come parametri. C'è una funzione di supporto per trovare il numero ottimale di thread (uguale al numero di core), ma non riesco a ricordarlo.

E assicurarsi che anche ricostruire l'exe train_cascade

+0

Dove faccio a impostare questo?Devo eseguire qualcosa per installare TBB? Tutto quello che ho fatto è estrarre il file .zip. – theotherphil

+0

chiama la funzione nel tuo codice ... se hai il tuo progetto. Ma ... hmm, hai aggiunto il TBB nel sistema PATH? in caso contrario, si prega di farlo, disconnettersi e accedere di nuovo e provarlo. – Sam

+0

I file .vcproj generati da CMake elencano le directory TBB come directory di inclusione aggiuntive. Ho aggiunto TBB al percorso del sistema e ricostruito, ma senza fortuna. La documentazione qui http://opencv.itseez.com/trunk/doc/user_guide/ug_traincascade.html afferma che "L'applicazione nota opencv_traincascade è parallela a TBB. Per utilizzarla in modalità multicore, OpenCV deve essere compilato con TBB." Non menziona un flag multicore come input, quindi sembra suggerire che opencv_traincascade esegua automaticamente il multithreading. Ma non è così. – theotherphil

2

So che questo è un vecchio thread, ma penso che il problema è che si sta utilizzando Traincascade con Haart caratteristica insdead di utilizzare con le funzioni di LBP che utilizzano un numero intero invece di un punto mobile e funzionano 3 volte più velocemente.

Vedere il commento in this question per ulteriori informazioni dall'autore a questo proposito. Breve sommario: l'allenamento Haart è difficile da paralizzare, ma LBP è molto più semplice e sfrutta molti processori.

Spero che sia d'aiuto!

5

Se siete su Mac si può fare questo con homebrew:

brew tap homebrew/science 
brew install opencv --with-tbb 

Oppure, se sei già installato con homebrew:

brew uninstall opencv 
brew install opencv --with-tbb 

Inoltre, il comando info vi racconta altre bandiere te potrebbe essere interessato, ad es --with-java

brew info opencv 
+0

L'op è ovviamente su Windows. – Goddard

+1

@Goddard - Le risposte non sono solo per l'OP. Puoi effettivamente atterrare su questa pagina googling 'build Open CV Mac' come ho fatto io. – Robert

0

Dopo aver costruito i binari TBB, assicurarsi che il percorso sia correttamente dirigendo il vostro eseguibile per le DLL TBB. È possibile che tu stia caricando le dll non-tbb (questo è successo a me) e queste non forniranno il multithreading.

1

per Linux, fare:

cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D WITH_TBB=ON BUILD_TBB=ON .. 
0

Inoltre, un punto di contatto è l'installazione di Intel TBB sul sistema:

$ sudo apt-get install libtbb-dev