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() );
}
17 de jun. de 2010
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.
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
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
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
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}
(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)
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.*;
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.*;
Assinar:
Postagens (Atom)