2011-11-03 15 views
10

Estoy intentando y no hacer que opencv_traincascade use varios hilos. La única documentación que puedo encontrar dice "construir OpenCV con TBB". No estoy seguro de si estoy logrando crear OpenCV correctamente con TBB, o si hay alguna bandera que deba establecer para opencv_traincascade.¿Cómo construyo OpenCV con TBB?

He descargado el superpaquete de Windows OpenCV versión 2.3.1 y tbb40_20111003oss_win.zip, que extraje en C:\tbb40_20111003oss. entonces me genera VC8 .sln y .proj archivos usando CMake, el establecimiento de

WITH_TBB: ON

TBB_INCLUDE_DIR:PATH=C:\tbb40_20111003oss\include

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

OpenCV entonces construye sin errores, pero cuando corro opencv_traincascade Es singlethreaded. ¿Alguien sabe lo que estoy haciendo mal?

Respuesta

1

Pruebe setNumThreads(), con la cantidad de núcleos de procesador como parámetros. Hay una función de ayuda para encontrar el número óptimo de hilos (es igual a la cantidad de núcleos), pero no puedo recordarlo.

Y asegúrese de que también vuelve a generar el exe train_cascade

+0

¿Dónde fijo esto?¿Debo ejecutar algo para instalar TBB? Todo lo que hice fue extraer el archivo .zip. – theotherphil

+0

llama la función en tu código ... si tienes tu propio proyecto. Pero ... hmm, ¿agregaste el TBB en el sistema PATH? si no, hágalo, cierre sesión e inicie sesión nuevamente y pruébelo. – Sam

+0

Los archivos .vcproj generados por CMake enumeran los directorios TBB como directorios de inclusión adicionales. He agregado TBB a la ruta del sistema y reconstruido, pero sin suerte. La documentación aquí http://opencv.itseez.com/trunk/doc/user_guide/ug_traincascade.html establece que "Note que la aplicación opencv_traincascade está paralelizada a TBB. Para usarla en modo multinúcleo, OpenCV debe construirse con TBB". No menciona una bandera multinúcleo como entrada, por lo que parece sugerir que opencv_traincascade debería ejecutarse automáticamente en subprocesos múltiples. Pero no es así – theotherphil

2

Sé que esto es un hilo viejo, pero creo que el problema es que está utilizando Traincascade con el TARGA función insdead de utilizar con las características de LBP que usan enteros en lugar de coma flotante y funcionan 3 veces más rápido.

Vea el comentario en this question para obtener más información del autor sobre esto. Resumen rápido: el entrenamiento de Haart es difícil de paralelizar, pero LBP es mucho más fácil y se beneficia de una gran cantidad de procesadores.

Espero que ayude!

5

Si se encuentra en Mac se puede hacer esto con homebrew:

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

O si ya ha instalado con homebrew:

brew uninstall opencv 
brew install opencv --with-tbb 

Además, el comando info le informa acerca de otras banderas que podría estar interesado, por ejemplo --with-java

brew info opencv 
+0

La operación es obviamente en Windows. – Goddard

+1

@Goddard - Las respuestas no son solo para el OP. De hecho, puede aterrizar en esta página buscando en Google 'build Open CV Mac' como yo lo hice. – Robert

0

Después de construir los binarios tbb, asegúrese de que su trayectoria está dirigiendo correctamente el ejecutable para los archivos DLL tbb. Es posible que estés cargando los dlls no-tbb (esto me pasó a mí) y estos no proporcionarán multihilo.

1

para Linux, hacer:

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

Además, un punto de contacto es la instalación de Intel TBB en el sistema:

$ sudo apt-get install libtbb-dev