lunes, 22 de septiembre de 2014

OpenCV en java

OpenCV es una serie de librerias desarrolladas en un principio por intel para demostrar el poder de sus procesadores. Esto implicaba que solo funcionaba en procesadores de intel. Hoy en dia estas librerias son opensources y soportan diversos tipos de procesadores.


 OpenCV esta desarrolladpo en C/C++, pero afortunadamente existen wrappers (puentes o envoltorios) para diversos lenguajes. Por ello se pueden usar las librerias de OpenCV en Pyton, C#, o Java.

Setup

Para poder usar OpenCV en Java necesitamos bajar el paquete de librerias de OpenCV . En el sitio de OpenCV solo tenemos que bajar el pequete que corresponda a nuestro sistema. Este paquete pesa unos cuantos cientos de megas, así que necesitamos espacio en la computadora. En mi caso bajo un ejecutable para windows, que solo descomprime el contenido del archivo en una carpeta dada.

  Una vez que se extrajo el contenido, hay que ir a la carpeta donde se descomprimieron los datos.

  De la carpeta se requiere buscar los dll's y el jar que sirve de wrapper(usa JNI para hacer el enlace). Para poder saber que dll's son los que van a funcionar en windows, se necesita saber si nuestro sistema es de 32 o 64 bits. Esto se puede ver siguiendo estas indicaciones.

  Ya sabiendo el tipo de sistema elegimos la carpetas de donde tomaremos los dll's.

  Si es de 32 bits opencv\build\x86\
  Si es de 64 bits opencv\build\x64\


Ahi dentro debemos de ver una serie de carpetas. Estas carpetas contienen cada una los dll's, por lo que debemos de elegir la carpeta adecuada. El nombre de cada carpea se refiere a la version del compilador de C con el cual fueron creadas las librerias. Por ello se debe de elegir aquella carpeta con el compilado que pueda correr en nuestro equipo. Para saber esto, se debe de saber si contamos con algun VisualC runtime (librerias para ejecutar programas de visualC).

 Si no tenemos el runtime o no sabemos si la maquina lo tiene, podemos descargarlo de la pagina de microsoft , en esta pagina esta la ultima version y las anteriores del runtime. La carpeta que contiene los dll's es nombrada usando la siguiente norma: vcXX, donde XX corresponde a la version de las librerias de Visual C, asi de esta manera sabras cuales runtimes puedes instalar para que funcione OpenCV.

Despues de instalar el runtime o verificar la version que tenemos, entramos a la carpeta que corresponde y de ahi a la carpeta bin. En mi caso tengo sistema de 64 bits y tengo instalado el runtime de visualC version 12, Asi que mi ruta de dll's es 

opencv\build\x64\vc12\bin

Dentro vas a encontrar varias dll's, no se necesitan todas. Creo que las que tienen nombre xxxxxd.dll son para realizar debug, y no se necesitan. Ademas hay librerias especializadas en ciertas acciones que no se suelen usar y esas pueden omitirse. Pero si tenemos espacio, es preferible usar lo mas que podamos, por si en dado caso usamos alguna funcionalidad extra de OpenCV.

  Para instalar los dll's en nuestro equipo, basta con copiar los dll dentro de la carpeta Window\System32  o copiar los dll a donde va a correr el programa. Yo prefiero hacer la primera acción para evitar copiar dll's en todo proyecto que use OpenCV.

 Aparte de estos dll's, hay un dll adicional que se debe de copiar, este lo encuentras en 

opencv\build\java\x64  si tienes sistema de 64 bits
opencv\build\java\x86  si tienes sistema de 32 bits

Dentro esta un solo dll, este dll se copia en el mismo sitio donde se copiaron las otras dll's

una vez realizado esto, solo falta usar el jar que sirve de wrapper, este se encuentra en \opencv\build\java.

Netbeans setup

Para realizar el setup en netbeans se hace un proceso similar al que se realizo para registrar OpenGL, solo que el nombre de la libreria seria bueno cambiarlo a algo como OpenCV y solo usamos el jar que encontramos en \opencv\build\java.


OpenCV Hola mundo

Una vez agregada la libreria de opencv en algun proyecto (puede ser nuevo o uno ya existente, en mi caso el mismo que use para opengl).



En una clase nueva TestOpenCV, agregamos el siguiente codigo

import org.opencv.core.*;
import org.opencv.imgproc.*;
import org.opencv.ml.*;
import org.opencv.utils.*;
import org.opencv.highgui.*;
import org.opencv.objdetect.*;
import org.opencv.video.*;

public class TestOpenCV{    
    public static void main(String[] args) {
        //Preguntamos el numero de la version
        System.out.println("Bienvenido a OpenCV " + Core.VERSION);  
        //Cargamos las librerias
        System.loadLibrary(Core.NATIVE_LIBRARY_NAME);
        //Obtenemos mediante OpenCV el numero de cpu's
        System.out.println("Numero de CPU's: " + Core.getNumberOfCPUs());
    }    
}

Esto si realizamos lo anterior adecuadamente, nos dara como salida algo como:

Bienvenido a OpenCV X.X.X.X
Numero de CPU's: X

La X son solo para indicar algun numero. lo mas importante es que no de be de darnos error. Si vemos algo similar, en hora buena, ya esta funcionando lo basico de OpenCV. 
 

No hay comentarios:

Publicar un comentario