17 de jun. de 2010

Tutorial Processing + OpenCV no Linux

Para instalar o OpenCV no Processing, utilizando o Linux, siga os passos:

1 - Instalar o Processing na máquina (versão 1.0 ou superior)
www.processing.org

2 - Instalar o OpenCV no Linux.
digite no terminal:

sudo aptitude install libcv-dev

3 - Baixe a biblioteca que integra o OpenCV no processing:
http://ubaa.net/shared/processing/opencv/download/opencv_01.zip

copie a pasta OpenCV para a pasta Libraries, onde ficam as bibliotecas compartilhadas.

4 - lembre de configurar a permissão do processing para execução:
chmod +x processing

 Pronto, para verificar se está tudo ok, tente o exemplo:

import hypermedia.video.*;

OpenCV opencv;

void setup() {
    opencv = new OpenCV(this);
    opencv.capture(width,height);
}

void draw() {
    opencv.read();
    background( opencv.image() );
}

16 de jun. de 2010

OpenCV + Processing, rodando no NetBeans

A biblioteca http://ubaa.net/shared/processing/opencv permite utilizar o OpenCV juntamente com o Processing. Embora não implemente todos os recursos do OpenCV, a grande vantagem desta biblioteca é utilizar o Processing. Um dos problemas que ocorrem, em especial no MacOSX SnowLeopard é quando se utiliza o Processing e o OpenCV no NetBeans. Neste post, apresentamos a solução.

Considere o código exemplo para o OpenCV + Processing:

import processing.core.*;
import hypermedia.video.OpenCV;



public class OpenCV_PApplet extends PApplet {


         OpenCV cv = null;  // OpenCV object

         // Initialise Objects
    @Override
         public void setup() {

             size( 640, 480 );              // set frame size
             cv = new OpenCV( this );       // link OpenCV process to this PApplet
             cv.capture( width, height );   // start video stream
         }

         // Display the input camera stream in frame
    @Override
         public void draw() {
             cv.read();
             image( cv.image(), 0, 0 );
         }

         // Call the PApplet main method
         public static void main( String[] args ) {
             PApplet.main( new String[]{"OpenCV_PApplet"} );
         }
     }


Supondo que as bibliocas core.jar e OpenCV.jar estejam devidamente ligadas ao projeto do NetBeans, ao tentar compilar deve surgir a seguinte mensagem de erro:

!!! required library not found : no OpenCV in java.library.path
Verify that the java.library.path property is correctly set and the opencv.framework exists in '/Library/Frameworks' folder

Exception in thread "Animation Thread" java.lang.UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V
        at hypermedia.video.OpenCV.capture(Native Method)
        at hypermedia.video.OpenCV.capture(OpenCV.java:945)
        at OpenCV_PApplet.setup(OpenCV_PApplet.java:17)
        at processing.core.PApplet.handleDraw(PApplet.java:1571)
        at processing.core.PApplet.run(PApplet.java:1496)
        at java.lang.Thread.run(Thread.java:637)

Mesmo o OpenCV instalado corretamente e o mesmo código executando corretamente no Processing isto ocorre. Duas são as razões: (a) falta da biblioteca libOpenCV.jnilib e (b) Esta versão do OpenCV não funciona em 64bits e necessita da JVM rodando em 32bits.

Vamos a solução dos problemas:

a) A biblioteca libOpenCV.jnilib deve ser acessada pelo programa Java. Para tanto temos duas opções, colocar a biblioteca na mesma pasta do programa compilado, ou ainda copiá-la para a pasta biblioteca de extensão do JVM. A segunda opção é bem interessante, pois permite compartilhar a biblioteca com vários programas. A pasta está localizada em /Library/Java/Extensions.

b) Para configurar a JVM para executar em 32bits, usar a diretiva -d32. No shell isto pode ser feito usando java -d32 meuprograma e para rodar diretamente do Netbeans, acesse as propriedades do projeto e selecione Run, no campo VM options, coloque -d32.

Pronto, agora o programa deverá compilar e executar corretamente.

15 de jun. de 2010

Instalando OpenCV no MacOSX

Basicamente temos 3 maneiras de instalar a OpenCV no MacOSX. 1) usando o macports e limitando a integração da bilbioteca com o SO. 2) compilando a OpenCV a partir da fonte e 3) usando um pacote já compilado.

Entre estas opções a mais simples é a terceira. Basta para tanto copiar o pacote previamente para a pasta /Libray/Frameworks e pronto.

Seguindo este caminho utilize os pacotes:

OpenCV 1.1
http://www.ient.rwth-aachen.de/~asbach/OpenCV-Private-Framework-1.1.dmg
http://ubaa.net/shared/processing/opencv/download/opencv-framework.1.1.dmg (contem xml para reconhecimento de faces, ausente na versão 2.0)

OpenCV 1.2
http://www.ient.rwth-aachen.de/~asbach/OpenCV-Private-Framework-1.2.dmg

OpenCv 2.0
http://vislab.cs.vt.edu/~vislab/wiki/images/4/44/OpenCV2.0.dmg

A primeira opção é simples de usar também, mas ela apresenta uma grande limitação. Nela, a OpenCV não está integrada ao SO, mas pode ser usada sem problemas em c padrão (sem as extravagâncias de GUI).
Para instalar o opencv via port, basta digitar no shell:

sudo port selfupdate
sudo port install opencv

Pronto, o OpenCV e todas as bibliotecas estarão instalados em /opt/local seguindo o padrão Macports. Os binários estão em /opt/local/bin, sempre começando com opencv e as bibliotecas dinâmicas em /opt/local/lib. Quando usamos a opção Framework, algumas bibliotecas dylib ficam ausentes ou embutidas. Neste caso, pode ser utilizado esta compilação para complementar a instalação anterior.

Já na terceira opção, o OpenCV é compilado diretamente a partir do fonte. Para tanto, se deve seguir os passos:

- Instalar o svn no macports:

sudo port install subversion

- instalar o cmake:

sudo port install cmake

- agora entre na sua área ~ e a seguir baixe a última versão do OpenCV com:

svn co https://code.ros.org/svn/opencv/trunk/opencv

- entre no diretório do opencv

cd opencv

- e agora os passos para compilar

pode ser usado o compilador padrao do Unix:

sudo cmake -G "Unix Makefiles" .

ou então o Xcode

sudo cmake -G "Xcode" .

- depois de gerar o cmake basta compilar e instalar:

sudo make -j8
sudo make install

Introdução ao OpenCV

OpenCV é uma biblioteca de programação aberta voltada a Visão Computacional.

Nos próximos posts iremos abordar como instalar e utilizar a OpenCV. Estaremos particularmente interessados em instalar a OpenCV com o Java.

A documentação detalhada sobre o OpenCV e sua instalação podem ser acessados em:

http://opencv.willowgarage.com/wiki/InstallGuide

26 de mar. de 2010

OpenCV no processing

O openCV, biblioteca de Visão Computacional da Intel, é simples de instalar no Processing, por meio da API OpenCV para Java. O site da API é http://ubaa.net/shared/processing/opencv/

baixe o OpenCV para Java: http://ubaa.net/shared/processing/opencv/download/opencv-framework.1.1.dmg

Instale o framework, com um simples double click no arquivo OpenCV Framework.pkg

baixe a biblioteca do OpenCV para Processing: http://ubaa.net/shared/processing/opencv/download/opencv_01.zip

copie a pasta para o diretórios libraries.

Se o Processing estiver rodando durante a instalação re-inicie.

Pronto, o processing esta pronto para rodar o OpenCV

31 de jul. de 2009

posicionar figuras no tex

Uma das dificuldades para os usuários do Latex é o posicionamento das figuras, já que ele tenta fazer isso de forma otimizada e automática. Se o usuário quizer forçar as figuras existem duas possibilidades:

(1) Definir o posicionamento em: (h) aqui, (t) topo, (b) base, ou na (p) página. O uso do ! siginifica para forçar a solicitação do usuário. a ordem [htb] indica a preferencia que o latex vai re-arranjar as figuras.

\begin{figure}[!htbp]
\includegraphics{filename}%
\caption{text}%
\end{figure}

(2) Muitas vezes o usuário não quer otimizar o espaço do texto. Ou seja que posicionar a figura em determinado lugar mesmo que um pedaço da págian fique em branco. Neste caso o indicado é usar o pacote: float e o posicionamento H como o exemplo.

\usepackage{float}
...
\begin{figure}[H]
...
\end{figure}

14 de mai. de 2009

matlab + java: Parte 1

1 - Introdução:
O matlab possui um ótima integração com a linguagem Java, que pode ocorrem em duas direções. Podemos chamar o engine do Matlab e suas rotinas dentro de aplicativos Java e também podemos utilizar classes Java no Matlab. Neste tutorial trataremos a segunda abordagem.

Embora o Matlab apresente um grande número de recursos, muitas vezes nos deparamos com situações em que é necessário desenvolvermos nossos métodos. A utilização de rotinas externas ao Matlab são de grande valia para rotinas em que desempenho é necessário. Para isso, temos o MEX, compilador de C para matlab que permite usar rotinas escritas em C dentro do ambiente matlab. usar MEX em gargalos de scripts matlab é uma ótima opção para desempenho.

No caso da linguagem Java, sua utilização no ambiente Matlab, permite trazer os recursos de uma liguagem de uso geral dentro do Matlab, permitindo por exemplo acesso a Banco de dados, redes, interface gráfica e também computação gráfica.

A integração do Java no ambiente Matlab é quase imediata, uma vez que uma boa parte do Matlab foi desenvolvida em Java.

O Matlab acessa naturalmente uma grande quantidade de classes Java. Para ter uma lista das classes, digite o comando javaclasspath . Ele vai apresentar os diretórios de classes que o matlab usa. O matlab pois dois tipos de ligações no classpath: Estáticas (static) e dinâmicas (dynamic). As estáticas são carregadas no início da seção do Matlab, já as dinâmicas, podem ser carregadas a qualquer momento. Em geral as classes de usuários são classes dinâmicas.

2 Primeiro exemplo, integrando Matlab e Java:

O exemplo a seguir demonstra o uso de uma classe Java no Matlab.

A classe exemplo_matlab, cujo código é apresentado a seguir, apresenta dois métodos estáticos, checa_primo - que verifica se um determinado inteiro é primo e teste, que apenas incrementa uma variável

listagem de exemplo_matlab.java:

public class exemplo_matlab {

public static boolean checa_primo(int num)
{
int a, //contador
resto; //resto da divisão;
boolean eprimo;
eprimo=true;
if ((num%2)!=0){ //verifica se o número é par
for (a=3;a<num;a+=2){
resto = num%a;
if (resto==0){
eprimo=false;
break;
}
}
} else eprimo=false;
return eprimo;
}

public static int teste(int a)
{
int b;
b = a +1;
return b;
}

}

2.1 Compilando o código Java

Compile o exemplo, entre no terminal do SO (Sistema Operacional) e digite: javac exemplo_matlab.java

No UNIX, linux ou no Macosx o Java do sistema operacional em geral é o mesmo do matlab. Se vc estiver usando windows, o matlab em gera utiliza sua própria JVM que não é a mesma do SO. Neste caso, verifique qual versão de java é a JVM do seu matlab. Para isso no Matlab digite: version -java

compilando no Windows:
No windows em geral a JVM do matlab não é a mesma versão da JVM usada pelo SO. Deste modo, quando compilar a classe, deve-se ter o cuidado de gerar uma versão de bytecode compatível com a versão do matlab (suposta mais antiga que a do SO). Para isso informe no compilador de Java a versão do código Java que vc está compilando e a versão de bytecode que deseja gerar. Veja o exemplo:

javac -source 1.2 -target 1.1 teste_matlab.java

Neste caso, temos um código e compilador de Java na versão 1.2 (SO) e desejamos gerar bytecode para a versão de JVM 1.1

2.2 Chamando a classe no ambiente Matlab
Como primeiro passo, a classe precisa estar listada no classpath do Matlab. Isto pode ser feito de duas formas, alterando o arquivo classpath do Matlab ou então por meio do comando javaaddpath. Vamos usar esta abordagem.

Supondo que a classe está no diretório /Users/estudo_matlab/exemplo_matlabjava, digite:

javaaddpath({'/Users/estudo_matlab/exemplo_matlabjava'});

este comando adiciona um diretório, arquivo ou conjunto de arquivos e diretórios na lista de caminhos dinâmicos. Para verificar como o classpath ficou, digite javaclasspath.

Para rodar o método checa_primo, e verificar se o número 191 é primo use:

primo = exemplo_matlab.checa_primo(191)

a variável primo vai receber true caso 191 seja primo e false no caso oposto.

para usar o método teste e adicionar 1 a variável x,

x = exemplo_matlab.teste(x)

2 de mai. de 2009

Como criar uma biblioteca para o Procesing 1.0

Neste post é apresentado como criar e usar uma biblioteca Java no processing.

Todos os arquivos da bibliteca precisam ser definidos por uma package. Neste exemplo, vamos definir package my_lib.

No diretório do sketchbook do processing, definido como ~usuario/Processing, deve ser criada um diretório libraries

Criar:
~usuario/Processing/libraries/my_lib

Os códigos fonte da nova biblioteca podem estar nesta pasta ou então para melhorar a organização em my_lib/src

Para compilar, entre no diretório src digite:

javac -d . *.java

será criado um sub-diretório com o nome do package, neste caso, my_lib

digite agora:

jar -cf my_lib.jar my_lib

ou ainda zip -r my_lib.jar my_lib

Crie o diretório ~usuario/Processing/libraries/my_lib/library
e copie nele o arquivo my_lib.jar

Agora reinicie o processing.

Para usar a biblioteca:
import my_lib.*;