Archivos de Tags: 12.04 @es

Instalar OpenSceneGraph 2.9.6 con soporte para Collada en Ubuntu 12.04

Aunque normalmente uso OpenSceneGraph 2.8.3 para trabajar con osgART 2.0 RC3 también se puede usar OpenSceneGraph 2.9.6 (de hecho es la última versión compatible con osgART ACTUALIZACIÓN: leer este post para hacer funcionar osgART 2.0 RC3 en la versión 2.9.7 y superiores). Te lo puedes descargar usando SVN:

svn checkout http://www.openscenegraph.org/svn/osg/OpenSceneGraph/tags/OpenSceneGraph-2.9.6 OpenSceneGraph-2.9.6

Los pasos para instalar OSG 2.9.6 con soporte para Collada en Ubuntu 12.04 son los mismos que expliqué en “Instalar OpenSceneGraph 2.8.3 con soporte para Collada en Ubuntu 12.04“, solo que hay que hacer unos cambios más al código fuente por culpa de FFMpeg. Así que tan solo añade estos cambios a los que ya expliqué para OSG 2.8.3 y luego procede a la instalación de manera normal:

/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp
– En la línea 276 cambia esto:

const int bytes_decoded = avcodec_decode_audio2(m_context, reinterpret_cast(buffer), &data_size, m_packet_data, m_bytes_remaining);

Por esto:

#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR==52 && LIBAVCODEC_VERSION_MINOR>=32)
            AVPacket avpkt;
            av_init_packet(&avpkt);
            avpkt.data = const_cast<uint8_t *>(m_packet_data);
            avpkt.size = m_bytes_remaining;

            const int bytes_decoded = avcodec_decode_audio3(m_context, reinterpret_cast<int16_t*>(buffer), &data_size, &avpkt);
#else
            // fallback for older versions of ffmpeg that don't have avcodec_decode_audio3.
            const int bytes_decoded = avcodec_decode_audio2(m_context, reinterpret_cast<int16_t*>(buffer), &data_size, m_packet_data, m_bytes_remaining);
#endif

/src/osgPlugins/ffmpeg/FFmpegDecoderVideo.cpp

– En la línea 168 cambia esto:

const int bytes_decoded = avcodec_decode_video(m_context, m_frame.get(), &frame_finished, m_packet_data, m_bytes_remaining);

Por esto:

#if LIBAVCODEC_VERSION_MAJOR >= 53 || (LIBAVCODEC_VERSION_MAJOR==52 && LIBAVCODEC_VERSION_MINOR>=32)
            AVPacket avpkt;
            av_init_packet(&avpkt);
            avpkt.data = const_cast<uint8_t *>(m_packet_data);
            avpkt.size = m_bytes_remaining;

            const int bytes_decoded = avcodec_decode_video2(m_context, m_frame.get(), &frame_finished, &avpkt);
#else
            // fallback for older versions of ffmpeg that don't have avcodec_decode_video2.
            const int bytes_decoded = avcodec_decode_video(m_context, m_frame.get(), &frame_finished, m_packet_data, m_bytes_remaining);
#endif

Fuentes: http://code.metager.de/source/xref/OpenSceneGraph/src/osgPlugins/ffmpeg/FFmpegDecoderAudio.cpp

Instalar OpenSceneGraph 2.8.3 con soporte para Collada en Ubuntu 12.04

Vamos a instalar OpenSceneGraph 2.8.3 (de ahora en adelante OSG) para usarlo con osgART 2.0 RC3. Hasta donde yo se la última versión de OSG que funciona con osgART es la 2.9.6 (ya que las posteriores no consiguen poner de fondo la imagen que entra por la cámara y se ve todo negro ACTUALIZACIÓN: he encontrado la solución a este error, más información en este post), pero yo de todas maneras recomiendo instalar la versión 2.8.3. Descargárselo de aquí y descomprimirlo.

Instalar las siguientes dependencias:

sudo apt-get install cmake cmake-curses-gui libopenal-dev libopenal1 libcurl4-openssl-dev libpoppler-dev libpoppler-glib-dev librsvg2-dev libgtkglext1 libgtkglext1-dev libgtkglextmm-x11-1.2-0 libgtkglextmm-x11-1.2-dev libwxgtk2.8-dev libopenthreads-dev libtiff4-dev libinventor0 inventor-dev libgif-dev libgif4 libjasper-dev libjasper1 libopenexr-dev libopenexr6 libavcodec-dev libavdevice-dev libavformat-dev libavutil-dev libswscale-dev libavdevice53 libavcodec53 libavformat53 libavutil51 libswscale2 gstreamer0.10-ffmpeg ffmpeg libxine-dev libquicktime-dev winff dvdrip libavbin-dev libavbin0 libavifile-0.7c2 ffmpeg-dbg ffmpeg libavcodec-dev libavfilter-dev libxine1-ffmpeg moc-ffmpeg-plugin ffmpeg-dbg gstreamer0.10-fluendo-mp3 gstreamer0.10-plugins-bad gstreamer0.10-plugins-ugly libavbin-dev libavbin0 libavfilter-dev libavifile-0.7c2 libbabl-0.0-0 libcdaudio1 libmpeg2-4 libmpcdec6 libmp3lame0 libquicktime2 libxine1 libxine1-console libxine1-ffmpeg libxine1-misc-plugins libxine1-x moc-ffmpeg-plugin moc mjpegtools ogmtools xine-ui winff dvdrip libavbin-dev libavbin0 libavifile-0.7c2 ffmpeg-dbg ffmpeg-dbg ffmpeg libavcodec-dev libavfilter-dev libxine1-ffmpeg moc-ffmpeg-plugin

Instalar collada-dom como expliqué en “Instalar la librería collada-dom en Ubuntu 10.04, 10.11, 11.04, 11.10 y 12.04“.

Algunas de las librerías de las que depende OSG han cambiado por lo que hace falta cambiar algunas partes del código para que funcione:

/src/osgPlugins/curl/ReaderWriterCURL.cpp
– Eliminar la línea 24 (#include <curl/types.h>").
/src/osgPlugins/ffmpeg/FFmpegDecoder.cpp
– Añadir el siguiente include en la línea 2:

#include <libavutil/mathematics.h>

– Cambiar CODEC_TYPE_AUDIO por AVMEDIA_TYPE_AUDIO en la línea 220.
– Cambiar CODEC_TYPE_VIDEO por AVMEDIA_TYPE_VIDEO en la línea 238.
– Reemplazar el contenido de las líneas de 84 a la 96 (la sentencia switch) por:

error_str = AVERROR(error);

/src/osgPlugins/ffmpeg/FFmpegHeaders.hpp
– Añadir el siguiente define debajo de “#define __STDC_CONSTANT_MACROS“:

#define FF_API_OLD_SAMPLE_FMT 0

Si quieres instalar OSG 2.9.6 mete también estos cambios al código.

Ahora ya puede ir dentro de la carpeta del código fuente de OSG 2.8.3 y ejecutar:

mkdir build
cd build
cmake .. -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS=-D__STDC_CONSTANT_MACROS
make
sudo make install

He añadido “-DCMAKE_CXX_FLAGS=-D__STDC_CONSTANT_MACROS” al comando cmake para solucionar un error con la definición de UINT64_C. Puede añadir la opción “-DBUILD_OSG_EXAMPLES=1” para compilar los ejemplos (se instalan en “/usr/local/share/OpenSceneGraph/bin/“). Si los compilas descárgate también los OpenSceneGraph-Data así:

sudo svn checkout http://www.openscenegraph.org/svn/osg/OpenSceneGraph-Data/tags/OpenSceneGraph-Data-2.8.0/ /usr/local/share/OpenSceneGraph/OpenSceneGraph-Data

Si quieres comprobar que la librería collada-dom se detecta correctamente al configurar OSG con cmake ejecuta ccmake .. y verifica que los datos de Collada son correctos:

COLLADA_BOOST_FILESYSTEM_LIBRA   /usr/lib/libboost_filesystem.so              
COLLADA_BOOST_FILESYSTEM_LIBRA   COLLADA_BOOST_FILESYSTEM_LIBRARY_DEBUG-NOTFOU
COLLADA_BOOST_SYSTEM_LIBRARY     /usr/lib/libboost_system.so                  
COLLADA_BOOST_SYSTEM_LIBRARY_D   COLLADA_BOOST_SYSTEM_LIBRARY_DEBUG-NOTFOUND  
COLLADA_DOM_ROOT                 /dom                                         
COLLADA_DYNAMIC_LIBRARY          /usr/local/lib/libcollada14dom.so            
COLLADA_DYNAMIC_LIBRARY_DEBUG    COLLADA_DYNAMIC_LIBRARY_DEBUG-NOTFOUND       
COLLADA_INCLUDE_DIR              /usr/local/include/colladadom                 
COLLADA_MINIZIP_LIBRARY          /usr/local/lib/libminizip.so                 
COLLADA_MINIZIP_LIBRARY_DEBUG    COLLADA_MINIZIP_LIBRARY_DEBUG-NOTFOUND       
COLLADA_PCRECPP_LIBRARY          /usr/lib/i386-linux-gnu/libpcrecpp.so        
COLLADA_PCRECPP_LIBRARY_DEBUG    COLLADA_PCRECPP_LIBRARY_DEBUG-NOTFOUND       
COLLADA_PCRE_LIBRARY             /usr/lib/i386-linux-gnu/libpcre.so           
COLLADA_PCRE_LIBRARY_DEBUG       COLLADA_PCRE_LIBRARY_DEBUG-NOTFOUND          
COLLADA_STATIC_LIBRARY           COLLADA_STATIC_LIBRARY-NOTFOUND              
COLLADA_STATIC_LIBRARY_DEBUG     COLLADA_STATIC_LIBRARY_DEBUG-NOTFOUND 

Cuando terminas de compilar e installar OSG deberías tener un fichero llamado “osgdb_dae.so” en tu carpeta de plugins de OSG (“/usr/local/lib/osgPlugins-2.8.3“). Si no lo tienes comprueba que has instalado bien la librería collada-dom y que OSG está configurado para usarla.

Una vez instalado añade las carpetas de las librerías (/usr/local/lib y /usr/local/lib/osgPlugins-2.8.3) a la variable de entorno LD_LIBRARY_PATH en el fichero ~/.bashrc o ~/.profile:

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib:/usr/local/lib/osgPlugins-2.8.3

Si te descargaste OpenSceneGraph-Data añade también:

export OSG_FILE_PATH=/usr/local/share/OpenSceneGraph/OpenSceneGraph-Data

Puede comprobar que OSG funciona correctamente ejecutando uno de los ejemplos (si es que los compilaste):

/usr/local/share/OpenSceneGraph/bin/osglogo

Se debería ver algo como esto:

Instalar la librería collada-dom en Ubuntu 10.04, 10.11, 11.04, 11.10 y 12.04

Quería instalar collada-dom para añadir el soporte de ficheros DAE a OpenSceneGraph. Para instalarlo usé el código del repositorio SVN a fecha 2011/03/12 (simplemente porque ya lo tenía descargado de hace tiempo y sabía que funcionaba). Se puede descargar la versión de ese mismo día con el siguiente comando:

svn co -r {20110312} https://collada-dom.svn.sourceforge.net/svnroot/collada-dom/trunk collada-dom

La última versión del trunk SVN falla al compilar los projectos rt y fx e incluso no funciona con OpenSceneGraph (al parecer unos tipos de datos han desaparecido de Collada DOM y el plugin para ficheros DAE de OpenSceneGraph aún los usa). De todas maneras si quieres intentarlo esta es la manera de bajarse la última versión:

svn co https://collada-dom.svn.sourceforge.net/svnroot/collada-dom/trunk collada-dom

Instalar estas dependencias para Ubuntu 10.04:

sudo apt-get install libboost1.40-dev libpcre++-dev nvidia-cg-toolkit libboost-filesystem1.40-dev libglut3-dev

Para Ubuntu 10.10 y 11.04 instalar estas:

sudo apt-get install libboost1.42-dev libpcre++-dev nvidia-cg-toolkit libboost-filesystem1.42-dev libglut3-dev

Para Ubuntu 11.10 y 12.04 instalar estas:

sudo apt-get install libboost1.46-dev libpcre++-dev nvidia-cg-toolkit libboost-filesystem1.46-dev freeglut3-dev

Para compilar ejecutar, dentro de la carpeta de collada-dom, lo siguiente:

make os=linux project=minizip -C dom
make os=linux project=dom -C dom
make os=linux project=rt -C rt
make os=linux project=fx -C fx

Ahora ya podemos simplemente copiar las librerías y los ficheros de cabecera a “/usr/local/lib” y “/usr/local/include“:

sudo cp dom/build/linux-1.4/libminizip.* /usr/local/lib/
sudo cp dom/build/linux-1.4/libcollada14dom.* /usr/local/lib/
sudo cp -R dom/include /usr/local/include/colladadom
sudo cp rt/build/linux-1.4/libcollada14rt.* /usr/local/lib/
sudo cp fx/build/linux-1.4/libcollada14fx.* /usr/local/lib/

ACTUALIZACIÓN: Solucionados los problemas de compilación e instalación para saltarnos el error con domTest y viewer. También he quitado los proyectos rt y fx porque no son necesarios. Ignorar el resto del post.

Pero como la librería Boost que se usa en Ubuntu 12.04 ha sufrido unos cambios hay que cambiar un poco el código de collada-dom para que funcione: la función native_file_string() ha sido eliminada de Boost así que tenemos que cambiar el fichero “dom/test/1.4/domTest.cpp” en las líneas 91 y 95 para llamar a la función c_str() en vez de a native_file_string(). Es decir, cambiar esto:

string lookupTestFile(const string& fileName) {
	return (dataPath() / fileName).native_file_string();
}

string getTmpFile(const string& fileName) {
	return (tmpPath() / fileName).native_file_string();
}

A esto:

string lookupTestFile(const string& fileName) {
	return (dataPath() / fileName).c_str();
}

string getTmpFile(const string& fileName) {
	return (tmpPath() / fileName).c_str();
}

Tuve otro error mientras compilaba donde domTest se quejaba de que no encontraba la referencia a la librería libboost_system:

make[1]: Entering directory `/home/user/compilations/collada-dom/dom'
Linking build/linux-1.4/domTest
/usr/bin/ld: build/linux-1.4/obj/domTest.o: undefined reference to symbol 'boost::system::system_category()'
/usr/bin/ld: note: 'boost::system::system_category()' is defined in DSO /usr/lib/libboost_system.so.1.46.1 so try adding it to the linker command line
/usr/lib/libboost_system.so.1.46.1: could not read symbols: Invalid operation

Añadí -lboost_system -lboost_filesystem a la variable libOpts en el fichero “dom/make/common.mk” (línea 25) y se solucionó.

libOpts := -lboost_system -l boost_filesystem

También tuve un error similar mientras se compilaba la librería “viewer”, pero como no la necesitamos para nada no hay problema.

Instalar ARToolKit 2.72.1 en Ubuntu 11.10 y 12.04

La instalación es igual que en Ubuntu 10.10 salvo que parece que hay algún problema con el script de configuración. Al ejecutar “./Configure” las librerías de gstreamer no se configuran correctamente en la variable GST_LIBS. Así es como está definida en el script:

GST_LIBS=`pkg-config --libs gstreamer-0.10`

Se puede solucionar el problema añadiendo manualmente la variable GST_LIBS a la definición de la variable LIBS:

LIBS="-lpthread -lglut -lGLU -lGL -lXi -lX11 -lm $GST_LIBS"

También se puede añadir el resultado de ejecutar el comando “pkg-config --libs gstreamer-0.10” a esa variable, al final las dos maneras hacen que LIBS tenga el siguiente valor:

LIBS="-lpthread -lglut -lGLU -lGL -lXi -lX11 -lm -pthread -lgstreamer-0.10 -lgobject-2.0 -lgmodule-2.0 -lxml2 -lgthread-2.0 -lrt -lglib-2.0"

Es posible que también tengas un problema con V4L al ejecutar make, debido a que han cambiado el nombre del fichero de cabecera “linux/videodev.h” a “libv4l1-videodev.h”. Si te pasa esto cambia ese nombre del fichero de cabecera en los siguientes ficheros de ARToolKit:

include/AR/sys/videoLinuxV4L.h
lib/SRC/VideoLinuxV4L/video.c

Instalar OpenCV 2.4 en Ubuntu 12.04

Instalar OpenCV 2.4 desde el código fuente de la misma manera que lo hice con OpenCV 2.3.1a en Ubuntu 10.10 funcionó sin problemas, no hizo falta hacer ningún cambio en las librerías de ffmpeg como sucedía en Ubuntu 11.10.

Te puedes bajar el código fuente desde aquí.

Pero hay que tener cuidado con los cambios en la nueva versión. Si estás actualizando desde una versión anterior de OpenCV hay que prestar atención a los múltiples cambios que han introducido porque tu aplicación podría no funcionar ahora. Estos son algunos de los cambios más importantes:

  • OpenCV provee ahora información bastante completa sobre la construcción de sí mismo via (sorpresa) cv::getBuildInformation().
  • La lectura/escritura de video con ffmpeg funciona por fin y está disponible en MacOSX también.
  • La eliminación de fondo MOG2 de Zoran Zivkovic ha sido optimizada mediante TBB.
  • Más de 20 bugs en nuestro bug tracker han sido solucionados (http://code.opencv.org/projects/opencv/roadmap).
  • HighGUI soporta correctamente Asus Xtion. Por ahora, debes especificar este dispositivo de forma manual mediante el uso de VideoCapture(CV_CAP_OPENNI_ASUS) en vez de con VideoCapture(CV_CAP_OPENNI).
  • Algunas viejas funcionalidades de los módulos imgproc, video, calib3d, features2d, objdetect se ha movido a legacy.
  • Los scripts CMake han sido modificados sustancialmente. Ahora es muy fácil añadir nuevos módulos – tan solo pon el directorio con los subdirectorios de include, src, doc y test en tu módulo, crea un muy simple CMakeLists.txt y tu módulo se construirá como parte de OpenCV. También, es posible excluir ciertos módulos de la construcción (las variables de CMake “BUILD_opencv_” controlan eso).
  • Se ha introducido la nueva clase base cv::Algorithm. Está planeado que sea la base de la funcionalidad “no trivial”.
  • La API de features2d se ha limpiado. Ya no hay múltiples clases con funcionalidad duplicada. Las clases FeatureDetector y DescriptorExtractor derivan ahora de cv::Algorithm. También existe ahora la base Feature2D, mediante la cual se pueden detectar keypoints y calcular los descriptores en una sola llamada. Esto también es más eficiente.
  • SIFT y SURF han sido movidos a un nuevo módulo a parte llamado nonfree para marcar los posibles problemas legales de usar estos algoritmos en aplicaciones de usuario. También, el rendimiento de SIFT ha sido mejorado sustancialmente (en un factor de 3-4x).
  • El actual algoritmo de detección sin textura, Line-Mod por S. Hinterstoisser, ha sido incluido gracias a Patrick Mihelich. Ver objdetect/objdetect.hpp, clase Detector.
  • 3 algoritmos de detección de caras han sido añadidos por Philipp Wagner. Por favor, mirar opencv/contrib/contrib.hpp, clase FaceRecognizer, y opencv/samples/cpp/facerec_demo.cpp.
  • 2 algoritmos para resolver PnP han sido añadidos. Por favor, comprobar el parámetro flags en las funciones solvePnP y solvePnPRansac.
  • Una implementación mejorada de LogPolar (que usa modelos Blind-Spot) ha sido introducida por Fabio Solari y Manuela Chessa, ver opencv/contrib/contrib.hpp, clases LogPolar_* y el ejemplo opencv/samples/cpp/logpolar_bsm.cpp.
  • El esquema para un módulo de fotografía ha sido creado para dar soporte al rapidamente creciente are de la “computación fotográfica”. En estos momentos, solo contiene algoritmos de restauración, movidos desde imgproc, pero se planea añadir muchas más funcionalidades.
  • Otro módulo de nombre videostab (versión beta) que resuelve tareas específicas pero muy importantes de estabilización de video ha sido añadido. El módulo está siendo activamente desarrollado. Por favor, mirar el ejemplo opencv/samples/cpp/videostab.cpp.
  • findContours puede ahora encontrar contornos en imagenes con etiquetas de integer 32-bit (no solo en imagenes blanco y negro de 8-bit). Esto supone un paso adelante en el análisis más práctico de componentes conectados.
  • El detector de bordes Canny puede ahora ejecutarse en imágenes en color, obteniendo así mejores mapas de bordes.

Fuente del changelog: Computer vision talks.