2011-11-03 4 views
10

J'essaie et ne parvient pas à faire opencv_traincascade utiliser plusieurs threads. La seule documentation que je peux trouver dit de "construire OpenCV avec TBB". Je ne suis pas sûr si je ne parviens pas à construire avec succès OpenCV avec TBB, ou s'il y a un drapeau que je dois définir pour opencv_traincascade.Comment construire OpenCV avec TBB?

J'ai téléchargé le superpack Windows OpenCV version 2.3.1 et le tbb40_20111003oss_win.zip, que j'ai extrait à C:\tbb40_20111003oss. Je me suis alors généré VC8 .sln et .proj fichiers en utilisant CMake, la mise en

WITH_TBB: ON

TBB_INCLUDE_DIR:PATH=C:\tbb40_20111003oss\include

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

OpenCV construit alors sans erreur, mais quand je lance opencv_traincascade il est singlethreaded. Est-ce que quelqu'un sait ce que je fais mal? Essayez setNumThreads(), avec le nombre de cœurs de processeur en tant que paramètres.

Répondre

1

Il y a une fonction d'assistance pour trouver le nombre optimal de threads (égal au nombre de cœurs), mais je ne m'en souviens pas.

Et assurez-vous reconstruisez aussi le train_cascade exe

+0

Où puis-je mis cela?Dois-je exécuter quelque chose pour installer TBB? Tout ce que j'ai fait est d'extraire le fichier .zip. – theotherphil

+0

appelez la fonction dans votre code ... si vous avez votre propre projet. Mais .. hmm, avez-vous ajouté le TBB dans le système PATH? Sinon, faites-le, déconnectez-vous, reconnectez-vous et essayez-le. – Sam

+0

Les fichiers .vcproj générés par CMake listent les répertoires TBB en tant que répertoires d'inclusion supplémentaires. J'ai ajouté TBB au chemin du système et j'ai reconstruit, mais sans chance. La documentation ici http://opencv.itseez.com/trunk/doc/user_guide/ug_traincascade.html indique que "L'application Note opencv_traincascade est parallélisée TBB Pour l'utiliser en mode multicore, OpenCV doit être construit avec TBB." Il ne mentionne pas d'indicateur multicœur comme entrée, il semble donc suggérer que opencv_traincascade devrait automatiquement fonctionner en multithread. Mais ce n'est pas le cas. – theotherphil

2

Je sais que c'est un vieux fil, mais je pense que le problème est que vous utilisez Traincascade HAART fonction insdead d'utiliser avec les fonctionnalités LBP qui utilisent des entiers au lieu de virgule flottante et travaillent 3 fois plus vite.

Voir le commentaire en this question pour plus d'informations de l'auteur à ce sujet. Résumé rapide: L'entraînement Haart est difficile à paraleliser mais LBP est beaucoup plus facile et profite de beaucoup de processeurs.

Espérons que ça aide!

5

Si vous êtes sur Mac, vous pouvez le faire avec homebrew:

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

Ou si vous avez déjà installé avec homebrew:

brew uninstall opencv 
brew install opencv --with-tbb 

En outre, la commande info vous informe sur d'autres drapeaux que vous pourrait être intéressé, par exemple --with-java

brew info opencv 
+0

L'op est évidemment sur Windows. – Goddard

+1

@Goddard - Les réponses ne sont pas seulement pour l'OP. Vous pouvez réellement atterrir sur cette page en recherchant sur Google «build Open CV Mac» comme je l'ai fait. – Robert

0

Après avoir construit les binaires TBB, assurez-vous que votre chemin dirige correctement votre exécutable aux dll TBB. Il est possible que vous chargiez les dlls non-tbb (cela m'est arrivé) et ceux-ci ne fourniront pas de multithreading.

1

Pour linux, faites:

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

En outre, un point de contact est l'installation d'Intel TBB sur le système:

$ sudo apt-get install libtbb-dev 
Questions connexes