Java/processing con OpenCV en 64bits

// Enero 23rd, 2010 // Processing, Software

Según la wikipedia “OpenCV es una biblioteca libre de visión artificial originalmente desarrollada por Intel. Desde que apareció su primera versión alfa en el mes de enero de 1999, se ha utilizado en infinidad de aplicaciones. Desde sistemas de seguridad con detección de movimiento, hasta aplicativos de control de procesos donde se requiere reconocimiento de objetos. Esto se debe a que su publicación se da bajo licencia BSD, que permite que sea usada libremente para propósitos comerciales y de investigación con las condiciones en ella expresadas”.

Y gracias a Stephane Cousot y Douglas Edric Stanley contamos con la implementación de OpenCV para processing y/o java.

INSTALACIÓN

Para instalarla tenemos que en primer lugar instalar opencv, lo bueno es que figura en la mayoría de respositorios así que bastaría usar el administrador de paquetes para instalarlo.
aptitude install opencv
urpmi opencv
pacman -S opencv
emerge opencv
....

dependiendo del sistema en el que estes.

Esto debiera instalar las librerías y cabeceras necesarias en las carpetas del sistema /usr/include y /usr/lib. Como estas ubicaciones ya hacen parte del PATH no vanos a tener los problemas que normalmente se presentan en windows. Al parecer en ubuntu algunas librerías se instalan por aparte, por si acaso esta es la lista de librerías que deberías tener instalada:
/usr/lib/libml.so
/usr/lib/libhighgui.so
/usr/lib/libcxcore.so
/usr/lib/libcvaux.so
/usr/lib/libcv.so
Si no es así seguramente es un paquete separado así que por medio del administrador de paquetes lo puedes buscar e instalar.

Ahora descargamos la librería para processing al momento la 01, aconsejable también los ejemplos para java y/o processing.

El procedimiento es el mismo que cualquier librería, descomprimimos el paquete y copiamos la carpeta dentro de processing-1.0.9/libraries/ y listo.

A este momento si tenemos un dispositivo v4l conectado y configurado correctamente (osea funcionando), debería estar funcionando los ejemplos de la librería, y ya se podría trabajar en ella. Pero los que usamos distribuciones de 64 bits encontraremos un problema como es ya habitual.

AMD64

Si corres algún ejemplo de opencv en processing sobre 64bits puedes encontrar un error del tipo:

!!! required library not found : /usr/lib/libOpenCV.so: /usr/lib/libOpenCV.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)

Si has visto mis post anteriores ya sabrás cual es el problema, tenemos que encontrar un libOpenCV.so compilado para 64bits, pero esta vez la solución fué un poco más “elaborada”, ya que este paquete no existe en los repositorios, fué un paquete compilado especialmente para la implementación de OpenCv en Processing.

Tendremos entonces que compilarlo de las fuentes que se incluyen en el paquete de lka librería que descargamos. Para una solución más sencilla subí el archivo compilado a mi servidor, así que lo pueden descargar de aquí: libOpenCV.so y reemplazar el existente en processing-1.0.9/libraries/OpenCV/library. Con esto queda solucionado y podrás utilizar opencv en 64bits sin problema.

Si quieres compilarlo estos son los pasos que yo seguí, para evitar compilar las clases, lo que hize fué extraer del archivo processing-1.0.9/libraries/OpenCV/library/OpenCV.jar los archivos Bob.class y OpenCV.class, con cualquier gestor de compresión de archivos lo puedes hacer, y los copié en processing-1.0.9/libraries/OpenCV/source/java/hypermedia/video luego desde consola

cd processing-1.0.9/libraries/OpenCV/source/java
javah -jni hypermedia.video.OpenCV

esto nos genera un fichero cabecera hypermedia_video_OpenCV.h, lo movemos a processing-1.0.9/libraries/OpenCV/source/cpp y compilamos la libreria libOpenCV.so
mv ./hypermedia_video_OpenCV.h processing-1.0.9/libraries/OpenCV/source/cpp
cd processing-1.0.9/libraries/OpenCV/source/cpp
g++ -shared OpenCV.cpp -o libOpenCV.so -I/usr/include/opencv/ -I/usr/lib/jvm/java-1.6.0-openjdk/include/ -lcv -lhighgui -fPIC

esto nos genera la librería libOpenCV.so que podemos copiar a processing-1.0.9/libraries/OpenCV/library reemplazando la anterior, y listo!! OpenCV funcionando.

10 Responses to “Java/processing con OpenCV en 64bits”

  1. Julio dice:

    Hola que tal excelente post, solo una duda, lo anterior funciona tanto para OpenCV 1.0 como OpenCV 2.0, de antemano muchas gracias saludos

  2. la verdad no sé decirte si funciona con la 1.0, yo instalé la 2.0.0, pero supongo que si, ya que la librería funciona en windows con openCV 1.0.

  3. Gabriel dice:

    Que tal Sergio, te agradezco por escribir tan detalladamente los pasos para hacer funcionar opencv con processing en 64 bits.
    Intente ambos métodos: bajar la libreria compilada, y compilarla yo (al compilarla yo me da unos errores con el jni.h y no supe que más hacer). Bajando la libreria libOpenCV.so y correr cualquier cosa que use opencv me dice:
    wrong ELF class: ELFCLASS64 (Possible cause: architecture word width mismatch)

    Lo que me deja perplejo porque mi maquina deberia ejecutar ELFCLASS64… alguna idea?

    Gracias de antemano!

  4. Hola Gabriel,
    Debe ser que tienes el java que incluye processing, el cual es de 32 bits. Debes instalar un jdk y linkearlo para reemplazar el java de processing.
    Fijate el post anterior http://www.gnu-media.org/?p=49
    Es el mismo error que inicialmente genera GSVideo, en ese post explico como solucionarlo y solucionar el problema derivado que se presenta con opengl a partir de esto.

  5. Gabriel dice:

    Muchísimas gracias Sergio! Seguí tu consejo de reemplazar processing-1.0.9/java con un link al openjdk y todo funciona de maravilla :)
    Gracias!

  6. Julio dice:

    Hola que tal Sergio, sigo con los problemas, he logrado cargarlo en Linux, sin embargo para mi es necesario que corra tambien en windows, pero al tratar de adquirir una imagen desde la web cam no es posible, me prende el foco de la camara y como si la tomase pero no sale nada,, Tendras alguna idea de que sera??? de antemano Gracias

  7. No Julio, la verdad no lo he probado en windows, aunque mi intención es similar a la tuya y es poder contar con programas multiplataforma.
    Pero nadie en la casa usa windows, así que me toca probar después en la universidad sobre windows xp, y mac 10.5.
    Tan pronto lo haga comentaré los resultados.

  8. Miguel dice:

    Por favor como, de donde consigo OpenCV para winXp de 64 bits…slds

  9. La verdad no se decirte, en windows siempre he manejado 32bits, precisamente por problemas de compatibilidad, incluso en windows 7.

  10. Miguel dice:

    Por favor, como instalo OpenCV en plataforma de 64bits pero en WINXP…..Gracias por la rpta.

Leave a Reply