Infra - Linux
ARToolKit: Criando aplicativos de Realidade Aumentada
Neste documento apresento a ARToolKit, uma biblioteca criada para facilitar o desenvolvimento de aplicativos com o recurso de realidade aumentada. Ou seja, a sobreposição de objetos virtuais e tridimensionais gerados por computador junto ao ambiente real.
por Alessandro de Oliveira FariaIntrodução: O que é Realidade Aumentada e ARToolKit
Download e instalação
Calibração e utilização
Em primeiro lugar, devemos imprimir os arquivos de calibração calib_cpara.pdf e calib_dist.pdf localizados na pasta patterns. O arquivo calib_cpara.pdf é uma grade de linhas e deverá ser impresso em escala para que as linhas fiquem separadas de exatamente 40 mm.
Já o arquivo calib_dist.pdf contém um padrão de 6x4 pontos e deverá também ser impressos em escala para que os pontos fiquem separados de 40 mm. Ambos deverão ser impressos em papéis papelão ou colados em superfícies rígidas.
A calibração da câmera é calculada extraindo ponto central, distorções da lente e a distância focal da câmera. O programa calib_dist é usado para calcular o ponto central da imagem e as distorções das lentes. Já o programa calib_param calcula a distância focal da câmera. Todos os fontes estão disponíveis para estudos. Primeiramente devemos executar o programa calib_dist e depois o calib_cparam.
Execute o programa calib_dist, aponte a câmera para o arquivo calib_dist.pdf impresso de tal modo que todos os pontos estejam visíveis. Então clique com o botão esquerdo do mouse para congelar a imagem de vídeo. Agora, pressione o botão esquerdo do mouse sobre a imagem e desenhe um retângulo em volta de cada ponto da imagem (segurando o botão do mouse pressionado). Inicie com o ponto mais próximo ao canto superior esquerdo da imagem e prossiga até que todos os pontos tenham sido desenhados. Repita este procedimento de 5 a 10 vezes em vários ângulos. $ ./calib_dist "v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink"
Using supplied video config string [videotestsrc v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
libARvideo: GStreamer pipeline is PLAYING!
-----------
Press mouse button to grab first image,
or press right mouse button or [esc] to quit.
Grabbed image 1.
-----------
Press mouse button and drag mouse to rubber-bound features (6 x 4),
or press right mouse button or [esc] to cancel rubber-bounding & retry grabbing.
Marked feature position 1 of24
Marked feature position 2 of24
Marked feature position 3 of24
Marked feature position 4 of24
Marked feature position 5 of24
Marked feature position 6 of24
Marked feature position 7 of24
Marked feature position 8 of24
Marked feature position 9 of24
Marked feature position10 of24
Marked feature position11 of24
Marked feature position12 of24
Marked feature position13 of24
Marked feature position14 of24
Marked feature position15 of24
Marked feature position16 of24
Marked feature position17 of24
Marked feature position18 of24
Marked feature position19 of24
Marked feature position20 of24
Marked feature position21 of24
Marked feature position22 of24
Marked feature position23 of24
Marked feature position24 of24
Para finalizar a captura pressione o botão direito do mouse. O programa começará a calcular os valores de distorção da câmera.
-----------
Press mouse button to grab next image,
or press right mouse button or [esc] to calculate distortion parameter.
[480,0, 360,0, 9,4] 1294,330078
[430,0, 310,0, 9,3] 1284,283364
[430,0, 315,0, 9,4] 1283,999911
[430,0, 320,0, 9,5] 1283,841552
[430,0, 325,0, 9,6] 1283,816407
[430,0, 325,0, 9,6] 1283,816407
[425,0, 323,0, 9,5] 1283,484534
[425,0, 323,0, 9,5] 1283,484534
Olen = 425,000000, Ilen = 432,696135
Olen = 535,000000, Ilen = 550,881766
Olen = 323,000000, Ilen = 326,300477
Olen = 397,000000, Ilen = 403,228407
--------------
Center X: 425,000000
Y: 323,000000
Dist Factor: 9,500000
Size Adjust: 1,010218
--------------
-----------
Checking fit on image 1 of 5.
Press mouse button to check fit of next image.
Para verificar se estes parâmetros e/ou cálculos estão corretos, pressione o botão esquerdo do mouse para mostrar as imagens capturadas com as linhas vermelhas desenhadas passando pelos pontos de calibração. Estas linhas deverão se cruzar no centro de cada um destes pontos. Cada vez que o botão esquerdo do mouse é pressionado, a próxima imagem capturada é mostrada.
O calib_cparam, como mencionado anteriormente, é usado para encontrar a distância focal da câmera, além de outros parâmetros. Para continuarmos, execute o programa e informe as coordenadas do centro e o fator de distorção disponibilizado pelo aplicativo calib_dist.
Coloque o arquivo calib_cpara.pdf diante à câmera de tal modo que a imagem fique o mais perpendicular possível ao eixo óptico da câmera, e também todas as linhas devem ser visualizadas. Agora pressione o botão esquerdo do mouse para capturar a imagem. Logo a seguir aparecerá uma linha branca horizontal na imagem. Movimente a linha branca até cobrir a linha preta no topo e pressione ENTER. A linha movimenta-se para cima ou para baixo usando-se as teclas de seta para cima e para baixo. A linha pode ainda ser rotacionada no sentido horário e anti-horário usando as teclas de setas para a direita e para a esquerda. Repetir este processo com todas as linhas verticais e horizontais por 5 vezes. Ao terminar, informe o nome do arquivo e pronto. $ ./calib_cparam
Input center coordinates: X = 425
: Y = 323
Input distortion ratio: F = 9.500000
Input size adjustment factor: S = 1.010218
Number of horizontal lines (7):
Number of vertical lines (9):
Number of iteration (5):
Distance among lines (40.000000):
Distance to move (100.000000):
Using supplied video config string [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
point_num = 315
--------------------------------------
SIZE = 960, 720
Distortion factor = 425,000000 323,000000 9,500000 1,010218
389,57470 -967,88703 -97,42965 0,00000
0,00000 594,43782 -644,58036 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
Input filename: webcam3_para.dat
Para utilizar este arquivo de calibração, basta copiá-lo na pasta Data com o nome camera_para.dat.
Agora, para testar o funcionamento da realidade aumentada, execute o programa simpleTest e veja o resultado ao apresentar o arquivo pattHiro.pdf impresso para a câmera.
$ ./simpleTest
Using config string from environment [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Image size (x,y) = (960,720)
*** Camera Parameter ***
--------------------------------------
SIZE = 960, 720
Distortion factor = 477,750000 395,250000 11,644444 1,012757
1051,42721 0,00000 474,75000 0,00000
0,00000 1089,14127 362,25000 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
libARvideo: GStreamer pipeline is PLAYING!
2. Captura um quadro.
3. Detecta as marcas do padrão na imagem.
4. Calcula a transformação relativa.
5. Desenha o objeto virtual sob o padrão detectado.
6. Finaliza o dispositivo de captura.
A aplicação ExView exibe a visão externa da câmera, como se a câmera estivesse sendo rastreada. Para executar este aplicativo, digite o comando ./exview na pasta bin. Vejam como é simples a funcionalidade do loop principal:
Captura o quadro.
Checa a visibilidade
Calcula a transformação relativa.
Desenha o objeto:
Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...
Em 30/03/2009 disponibilizei um documento sobre o jogo Levelhead, um jogo de realidade aumentada. Define-se realidade aumentada como a sobreposição de objetos virtuais e tridimensionais, gerados por computador junto ao ambiente real, por meio de algum dispositivo tecnológico de vídeo captura.
A Realidade Aumentada disponibiliza uma interação sem necessidade de treinamento, pois o usuário pode trazer para o ambiente real objetos virtuais, incrementando e aumentando a visão do mundo real. Isto somente é possível com técnicas de visão computacional junto a computação gráfica.
Os objetos virtuais introduzidos no ambiente real podem ser manipulados com as próprias mão, assim proporcionando ao usuário uma interação inovadora e atrativa. Veja no vídeo a seguir um exemplo de interatividade com a tecnologia de realidade aumentada. Logo, Realidade Aumentada é um sistema que:
A complexidade do desenvolvimento das aplicações de Realidade Aumentada é calcular precisamente, em tempo real, o ponto de observação do usuário, para somente então projetar corretamente os objetos virtuais no mundo real. Este é o principal objetivo da biblioteca ARToolKit, ou seja, rastrear rapidamente e calcular a posição real da câmera e de seus marcadores de referência possibilitando que o programador acrescente objetos virtuais sobre estes marcadores no mundo real sem magia negra. Para tudo isto funcionar (a biblioteca ARToolKit) primeiramente é preciso transformar o quadro capturado no vídeo ao vivo em uma imagem com valores binários (P&B). Em seguida ele examina essa imagem para encontrar regiões quadradas. Ao encontrar um quadrado, a imagem no seu interior é capturada e comparada com algumas imagens pré-cadastradas. Encontrando alguma similaridade com a imagem pré-cadastrada, a biblioteca utiliza o tamanho conhecido do quadrado e a orientação do padrão encontrado para calcular a posição real da câmera em relação à posição real do marcador.
A Realidade Aumentada disponibiliza uma interação sem necessidade de treinamento, pois o usuário pode trazer para o ambiente real objetos virtuais, incrementando e aumentando a visão do mundo real. Isto somente é possível com técnicas de visão computacional junto a computação gráfica.
Os objetos virtuais introduzidos no ambiente real podem ser manipulados com as próprias mão, assim proporcionando ao usuário uma interação inovadora e atrativa. Veja no vídeo a seguir um exemplo de interatividade com a tecnologia de realidade aumentada. Logo, Realidade Aumentada é um sistema que:
- combina elementos virtuais com o ambiente real;
- é interativa e tem processamento em tempo real;
- é concebida em três dimensões.
ARToolKit
ARToolKit é uma biblioteca escrita em C, baseada em software livre e desenvolvida pelo Dr. Hirokazu Kato, utilizada atualmente por pesquisadores do Laboratório Tecnológico de Interface Humana, na Universidade de Washington. Criada para a construção de aplicações de Realidade Aumentada, a biblioteca ARToolKit utiliza recursos de visão computacional e processamento de imagens para prover os recursos de RA.A complexidade do desenvolvimento das aplicações de Realidade Aumentada é calcular precisamente, em tempo real, o ponto de observação do usuário, para somente então projetar corretamente os objetos virtuais no mundo real. Este é o principal objetivo da biblioteca ARToolKit, ou seja, rastrear rapidamente e calcular a posição real da câmera e de seus marcadores de referência possibilitando que o programador acrescente objetos virtuais sobre estes marcadores no mundo real sem magia negra. Para tudo isto funcionar (a biblioteca ARToolKit) primeiramente é preciso transformar o quadro capturado no vídeo ao vivo em uma imagem com valores binários (P&B). Em seguida ele examina essa imagem para encontrar regiões quadradas. Ao encontrar um quadrado, a imagem no seu interior é capturada e comparada com algumas imagens pré-cadastradas. Encontrando alguma similaridade com a imagem pré-cadastrada, a biblioteca utiliza o tamanho conhecido do quadrado e a orientação do padrão encontrado para calcular a posição real da câmera em relação à posição real do marcador.
Download e instalação
Podemos encontrar o código fonte no SourceForge:
A seguir, o comando para efetuar o download do projeto:
$ wget http://downloads.sourceforge.net/project/artoolkit/artoolkit/2.72.1/ARToolKit-2.72.1.tgz
Descompacte o pacote com o comando:
$ tar -zxvf ARToolKit-2.72.1.tgz
$ cd ARToolKit/
Execute o comando ./configure, selecione a opção 1 e responda as perguntas como no exemplo a seguir:
$ ./configure
Select a video capture driver.
1: Video4Linux
2: Video4Linux+JPEG Decompression (EyeToy)
3: Digital Video Camcoder through IEEE 1394 (DV Format)
4: Digital Video Camera through IEEE 1394 (VGA NONCOMPRESSED Image Format)
5: GStreamer Media Framework
Enter : 1
Color conversion should use x86 assembly (choose "n" for 64bit systems)?
Enter : n
Do you want to create debug symbols? (y or n)
Enter : n
Build gsub libraries with texture rectangle support? (y or n)
GL_NV_texture_rectangle is supported on most NVidia graphics cards
and on ATi Radeon and better graphics cards
Enter : y
create ./Makefile
create lib/SRC/Makefile
create lib/SRC/AR/Makefile
create lib/SRC/ARMulti/Makefile
create lib/SRC/Gl/Makefile
create lib/SRC/VideoLinux1394Cam/Makefile
create lib/SRC/VideoLinuxDV/Makefile
create lib/SRC/VideoLinuxV4L/Makefile
create lib/SRC/VideoSGI/Makefile
create lib/SRC/VideoMacOSX/Makefile
create lib/SRC/VideoGStreamer/Makefile
create lib/SRC/ARvrml/Makefile
create util/Makefile
create util/calib_camera2/Makefile
create util/calib_cparam/Makefile
create util/calib_distortion/Makefile
create util/mk_patt/Makefile
create util/graphicsTest/Makefile
create util/videoTest/Makefile
create examples/Makefile
create examples/collide/Makefile
create examples/exview/Makefile
create examples/loadMultiple/Makefile
create examples/modeTest/Makefile
create examples/multi/Makefile
create examples/optical/Makefile
create examples/paddle/Makefile
create examples/paddleDemo/Makefile
create examples/paddleInteraction/Makefile
create examples/range/Makefile
create examples/relation/Makefile
create examples/simple/Makefile
create examples/simple2/Makefile
create examples/simpleLite/Makefile
create examples/twoView/Makefile
create examples/simpleVRML/Makefile
create include/AR/config.h
Done.
Crie a variável ambiental ARTOOLKIT_CONFIG conforme o exemplo abaixo:
$ export ARTOOLKIT_CONFIG="-dev=/dev/video0 -palette=YUV420P -width=640 -height=480"
Entre na pasta bin e execute o programa videoTest para verificar se tudo está funcionando corretamente.
$ cd bin
$ ./videoTest
Using config string from environment [-dev=/dev/video0 -palette=YUV420P -width=640 -height=480].
Image size (x,y) = (640,480)
Se tudo estiver funcionando corretamente, será apresentada uma janela cujo seu conteúdo será o vídeo ao vivo da sua webcam.
$ wget /artigos/img_artigos/alessandro_faria/ARToolKit/artk-v4l2-2.72.1.20080427.patch
E o aplique na pasta recém criada:
$ patch -p0 -d . < artk-v4l2-2.72.1.20080427.patch
Agora entre na pasta ARToolKit.
$ cd ARToolKit/
Execute o comando ./configure, selecione a opção 3 e responda as perguntas como no exemplo a seguir:
./configure
Select a video capture driver.
1: Video4Linux
2: Video4Linux+JPEG Decompression (EyeToy)
3: Video4Linux2
4: Digital Video Camcoder through IEEE 1394 (DV Format)
5: Digital Video Camera through IEEE 1394 (VGA NONCOMPRESSED Image Format)
6: GStreamer Media Framework
Enter : 3
Do you want to create debug symbols? (y or n)
Enter : n
Build gsub libraries with texture rectangle support? (y or n)
GL_NV_texture_rectangle is supported on most NVidia graphics cards
and on ATi Radeon and better graphics cards
Enter : y
create ./Makefile
create lib/SRC/Makefile
create lib/SRC/AR/Makefile
create lib/SRC/ARMulti/Makefile
create lib/SRC/Gl/Makefile
create lib/SRC/VideoLinux1394Cam/Makefile
create lib/SRC/VideoLinuxDV/Makefile
create lib/SRC/VideoLinuxV4L/Makefile
create lib/SRC/VideoLinuxV4L2/Makefile
create lib/SRC/VideoSGI/Makefile
create lib/SRC/VideoMacOSX/Makefile
create lib/SRC/VideoGStreamer/Makefile
create lib/SRC/ARvrml/Makefile
create util/Makefile
create util/calib_camera2/Makefile
create util/calib_cparam/Makefile
create util/calib_distortion/Makefile
create util/mk_patt/Makefile
create util/graphicsTest/Makefile
create util/videoTest/Makefile
create examples/Makefile
create examples/collide/Makefile
create examples/exview/Makefile
create examples/loadMultiple/Makefile
create examples/modeTest/Makefile
create examples/multi/Makefile
create examples/optical/Makefile
create examples/paddle/Makefile
create examples/paddleDemo/Makefile
create examples/paddleInteraction/Makefile
create examples/range/Makefile
create examples/relation/Makefile
create examples/simple/Makefile
create examples/simple2/Makefile
create examples/simpleLite/Makefile
create examples/twoView/Makefile
create examples/simpleVRML/Makefile
create include/AR/config.h
Done.
Crie a variável ambiental ARTOOLKIT_CONFIG conforme o exemplo abaixo:
$ export ARTOOLKIT_CONFIG="v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink"
Entre na pasta bin e execute o programa videoTest para verificar se tudo está funcionando corretamente.
$ cd bin/
$ ./videoTest
Using config string from environment [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Image size (x,y) = (960,720)
Se tudo estiver funcionando corretamente, será apresentado uma janela cujo seu conteúdo será o vídeo ao vivo da sua webcam.
A seguir, o comando para efetuar o download do projeto:
$ wget http://downloads.sourceforge.net/project/artoolkit/artoolkit/2.72.1/ARToolKit-2.72.1.tgz
Descompacte o pacote com o comando:
$ tar -zxvf ARToolKit-2.72.1.tgz
Procedimentos para dispositivos compatíveis com a API V4L1
Entre na pasta recém-criada.$ cd ARToolKit/
Execute o comando ./configure, selecione a opção 1 e responda as perguntas como no exemplo a seguir:
$ ./configure
Select a video capture driver.
1: Video4Linux
2: Video4Linux+JPEG Decompression (EyeToy)
3: Digital Video Camcoder through IEEE 1394 (DV Format)
4: Digital Video Camera through IEEE 1394 (VGA NONCOMPRESSED Image Format)
5: GStreamer Media Framework
Enter : 1
Color conversion should use x86 assembly (choose "n" for 64bit systems)?
Enter : n
Do you want to create debug symbols? (y or n)
Enter : n
Build gsub libraries with texture rectangle support? (y or n)
GL_NV_texture_rectangle is supported on most NVidia graphics cards
and on ATi Radeon and better graphics cards
Enter : y
create ./Makefile
create lib/SRC/Makefile
create lib/SRC/AR/Makefile
create lib/SRC/ARMulti/Makefile
create lib/SRC/Gl/Makefile
create lib/SRC/VideoLinux1394Cam/Makefile
create lib/SRC/VideoLinuxDV/Makefile
create lib/SRC/VideoLinuxV4L/Makefile
create lib/SRC/VideoSGI/Makefile
create lib/SRC/VideoMacOSX/Makefile
create lib/SRC/VideoGStreamer/Makefile
create lib/SRC/ARvrml/Makefile
create util/Makefile
create util/calib_camera2/Makefile
create util/calib_cparam/Makefile
create util/calib_distortion/Makefile
create util/mk_patt/Makefile
create util/graphicsTest/Makefile
create util/videoTest/Makefile
create examples/Makefile
create examples/collide/Makefile
create examples/exview/Makefile
create examples/loadMultiple/Makefile
create examples/modeTest/Makefile
create examples/multi/Makefile
create examples/optical/Makefile
create examples/paddle/Makefile
create examples/paddleDemo/Makefile
create examples/paddleInteraction/Makefile
create examples/range/Makefile
create examples/relation/Makefile
create examples/simple/Makefile
create examples/simple2/Makefile
create examples/simpleLite/Makefile
create examples/twoView/Makefile
create examples/simpleVRML/Makefile
create include/AR/config.h
Done.
Crie a variável ambiental ARTOOLKIT_CONFIG conforme o exemplo abaixo:
$ export ARTOOLKIT_CONFIG="-dev=/dev/video0 -palette=YUV420P -width=640 -height=480"
Entre na pasta bin e execute o programa videoTest para verificar se tudo está funcionando corretamente.
$ cd bin
$ ./videoTest
Using config string from environment [-dev=/dev/video0 -palette=YUV420P -width=640 -height=480].
Image size (x,y) = (640,480)
Se tudo estiver funcionando corretamente, será apresentada uma janela cujo seu conteúdo será o vídeo ao vivo da sua webcam.
Procedimentos para dispositivos compatíveis com a API V4L2
Após a descompactação do pacote, baixe o patch para a API V4L2:$ wget /artigos/img_artigos/alessandro_faria/ARToolKit/artk-v4l2-2.72.1.20080427.patch
E o aplique na pasta recém criada:
$ patch -p0 -d . < artk-v4l2-2.72.1.20080427.patch
Agora entre na pasta ARToolKit.
$ cd ARToolKit/
Execute o comando ./configure, selecione a opção 3 e responda as perguntas como no exemplo a seguir:
./configure
Select a video capture driver.
1: Video4Linux
2: Video4Linux+JPEG Decompression (EyeToy)
3: Video4Linux2
4: Digital Video Camcoder through IEEE 1394 (DV Format)
5: Digital Video Camera through IEEE 1394 (VGA NONCOMPRESSED Image Format)
6: GStreamer Media Framework
Enter : 3
Do you want to create debug symbols? (y or n)
Enter : n
Build gsub libraries with texture rectangle support? (y or n)
GL_NV_texture_rectangle is supported on most NVidia graphics cards
and on ATi Radeon and better graphics cards
Enter : y
create ./Makefile
create lib/SRC/Makefile
create lib/SRC/AR/Makefile
create lib/SRC/ARMulti/Makefile
create lib/SRC/Gl/Makefile
create lib/SRC/VideoLinux1394Cam/Makefile
create lib/SRC/VideoLinuxDV/Makefile
create lib/SRC/VideoLinuxV4L/Makefile
create lib/SRC/VideoLinuxV4L2/Makefile
create lib/SRC/VideoSGI/Makefile
create lib/SRC/VideoMacOSX/Makefile
create lib/SRC/VideoGStreamer/Makefile
create lib/SRC/ARvrml/Makefile
create util/Makefile
create util/calib_camera2/Makefile
create util/calib_cparam/Makefile
create util/calib_distortion/Makefile
create util/mk_patt/Makefile
create util/graphicsTest/Makefile
create util/videoTest/Makefile
create examples/Makefile
create examples/collide/Makefile
create examples/exview/Makefile
create examples/loadMultiple/Makefile
create examples/modeTest/Makefile
create examples/multi/Makefile
create examples/optical/Makefile
create examples/paddle/Makefile
create examples/paddleDemo/Makefile
create examples/paddleInteraction/Makefile
create examples/range/Makefile
create examples/relation/Makefile
create examples/simple/Makefile
create examples/simple2/Makefile
create examples/simpleLite/Makefile
create examples/twoView/Makefile
create examples/simpleVRML/Makefile
create include/AR/config.h
Done.
Crie a variável ambiental ARTOOLKIT_CONFIG conforme o exemplo abaixo:
$ export ARTOOLKIT_CONFIG="v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink"
Entre na pasta bin e execute o programa videoTest para verificar se tudo está funcionando corretamente.
$ cd bin/
$ ./videoTest
Using config string from environment [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Image size (x,y) = (960,720)
Se tudo estiver funcionando corretamente, será apresentado uma janela cujo seu conteúdo será o vídeo ao vivo da sua webcam.
Calibração e utilização
Calibração da câmera
As propriedades padrão da biblioteca ARToolKit encontram-se no arquivo de parâmetros da câmera, camera_para.dat, localizado na pasta ARToolKit/bin/Data. Este arquivo é carregado na inicialização da aplicação. Os parâmetros padrão abrangem um amplo conjunto de modelos e fabricantes de câmeras. Porém, sugiro a calibração da câmera conforme as instruções a seguir.Em primeiro lugar, devemos imprimir os arquivos de calibração calib_cpara.pdf e calib_dist.pdf localizados na pasta patterns. O arquivo calib_cpara.pdf é uma grade de linhas e deverá ser impresso em escala para que as linhas fiquem separadas de exatamente 40 mm.
Já o arquivo calib_dist.pdf contém um padrão de 6x4 pontos e deverá também ser impressos em escala para que os pontos fiquem separados de 40 mm. Ambos deverão ser impressos em papéis papelão ou colados em superfícies rígidas.
A calibração da câmera é calculada extraindo ponto central, distorções da lente e a distância focal da câmera. O programa calib_dist é usado para calcular o ponto central da imagem e as distorções das lentes. Já o programa calib_param calcula a distância focal da câmera. Todos os fontes estão disponíveis para estudos. Primeiramente devemos executar o programa calib_dist e depois o calib_cparam.
Execute o programa calib_dist, aponte a câmera para o arquivo calib_dist.pdf impresso de tal modo que todos os pontos estejam visíveis. Então clique com o botão esquerdo do mouse para congelar a imagem de vídeo. Agora, pressione o botão esquerdo do mouse sobre a imagem e desenhe um retângulo em volta de cada ponto da imagem (segurando o botão do mouse pressionado). Inicie com o ponto mais próximo ao canto superior esquerdo da imagem e prossiga até que todos os pontos tenham sido desenhados. Repita este procedimento de 5 a 10 vezes em vários ângulos. $ ./calib_dist "v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink"
Using supplied video config string [videotestsrc v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
libARvideo: GStreamer pipeline is PLAYING!
-----------
Press mouse button to grab first image,
or press right mouse button or [esc] to quit.
Grabbed image 1.
-----------
Press mouse button and drag mouse to rubber-bound features (6 x 4),
or press right mouse button or [esc] to cancel rubber-bounding & retry grabbing.
Marked feature position 1 of24
Marked feature position 2 of24
Marked feature position 3 of24
Marked feature position 4 of24
Marked feature position 5 of24
Marked feature position 6 of24
Marked feature position 7 of24
Marked feature position 8 of24
Marked feature position 9 of24
Marked feature position10 of24
Marked feature position11 of24
Marked feature position12 of24
Marked feature position13 of24
Marked feature position14 of24
Marked feature position15 of24
Marked feature position16 of24
Marked feature position17 of24
Marked feature position18 of24
Marked feature position19 of24
Marked feature position20 of24
Marked feature position21 of24
Marked feature position22 of24
Marked feature position23 of24
Marked feature position24 of24
Para finalizar a captura pressione o botão direito do mouse. O programa começará a calcular os valores de distorção da câmera.
-----------
Press mouse button to grab next image,
or press right mouse button or [esc] to calculate distortion parameter.
[480,0, 360,0, 9,4] 1294,330078
[430,0, 310,0, 9,3] 1284,283364
[430,0, 315,0, 9,4] 1283,999911
[430,0, 320,0, 9,5] 1283,841552
[430,0, 325,0, 9,6] 1283,816407
[430,0, 325,0, 9,6] 1283,816407
[425,0, 323,0, 9,5] 1283,484534
[425,0, 323,0, 9,5] 1283,484534
Olen = 425,000000, Ilen = 432,696135
Olen = 535,000000, Ilen = 550,881766
Olen = 323,000000, Ilen = 326,300477
Olen = 397,000000, Ilen = 403,228407
--------------
Center X: 425,000000
Y: 323,000000
Dist Factor: 9,500000
Size Adjust: 1,010218
--------------
-----------
Checking fit on image 1 of 5.
Press mouse button to check fit of next image.
Para verificar se estes parâmetros e/ou cálculos estão corretos, pressione o botão esquerdo do mouse para mostrar as imagens capturadas com as linhas vermelhas desenhadas passando pelos pontos de calibração. Estas linhas deverão se cruzar no centro de cada um destes pontos. Cada vez que o botão esquerdo do mouse é pressionado, a próxima imagem capturada é mostrada.
O calib_cparam, como mencionado anteriormente, é usado para encontrar a distância focal da câmera, além de outros parâmetros. Para continuarmos, execute o programa e informe as coordenadas do centro e o fator de distorção disponibilizado pelo aplicativo calib_dist.
Coloque o arquivo calib_cpara.pdf diante à câmera de tal modo que a imagem fique o mais perpendicular possível ao eixo óptico da câmera, e também todas as linhas devem ser visualizadas. Agora pressione o botão esquerdo do mouse para capturar a imagem. Logo a seguir aparecerá uma linha branca horizontal na imagem. Movimente a linha branca até cobrir a linha preta no topo e pressione ENTER. A linha movimenta-se para cima ou para baixo usando-se as teclas de seta para cima e para baixo. A linha pode ainda ser rotacionada no sentido horário e anti-horário usando as teclas de setas para a direita e para a esquerda. Repetir este processo com todas as linhas verticais e horizontais por 5 vezes. Ao terminar, informe o nome do arquivo e pronto. $ ./calib_cparam
Input center coordinates: X = 425
: Y = 323
Input distortion ratio: F = 9.500000
Input size adjustment factor: S = 1.010218
Number of horizontal lines (7):
Number of vertical lines (9):
Number of iteration (5):
Distance among lines (40.000000):
Distance to move (100.000000):
Using supplied video config string [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Camera image size (x,y) = (960,720)
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
libARvideo: GStreamer pipeline is PLAYING!
Grabbed image.
point_num = 315
--------------------------------------
SIZE = 960, 720
Distortion factor = 425,000000 323,000000 9,500000 1,010218
389,57470 -967,88703 -97,42965 0,00000
0,00000 594,43782 -644,58036 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
Input filename: webcam3_para.dat
Para utilizar este arquivo de calibração, basta copiá-lo na pasta Data com o nome camera_para.dat.
Agora, para testar o funcionamento da realidade aumentada, execute o programa simpleTest e veja o resultado ao apresentar o arquivo pattHiro.pdf impresso para a câmera.
$ ./simpleTest
Using config string from environment [v4l2src device=/dev/video1 use-fixed-fps=false ! ffmpegcolorspace ! capsfilter caps=video/x-raw-rgb,bpp=24,width=960,height=720 ! identity name=artoolkit ! fakesink].
libARvideo: GStreamer 0.10.22
libARvideo: GStreamer pipeline is PAUSED!
libARvideo: GStreamer negotiated 960x720
libARvideo: GStreamer pipeline is PLAYING!
libARvideo: GStreamer pipeline is PAUSED!
Image size (x,y) = (960,720)
*** Camera Parameter ***
--------------------------------------
SIZE = 960, 720
Distortion factor = 477,750000 395,250000 11,644444 1,012757
1051,42721 0,00000 474,75000 0,00000
0,00000 1089,14127 362,25000 0,00000
0,00000 0,00000 1,00000 0,00000
--------------------------------------
libARvideo: GStreamer pipeline is PLAYING!
Princípio de desenvolvimento
1. Inicialização: Inicializa o dispositivo de captura, carrega em memória o modelo impresso e carrega o parâmetros de calibração da câmera.2. Captura um quadro.
3. Detecta as marcas do padrão na imagem.
4. Calcula a transformação relativa.
5. Desenha o objeto virtual sob o padrão detectado.
6. Finaliza o dispositivo de captura.
A aplicação ExView exibe a visão externa da câmera, como se a câmera estivesse sendo rastreada. Para executar este aplicativo, digite o comando ./exview na pasta bin. Vejam como é simples a funcionalidade do loop principal:
Captura o quadro.
arVideoCapNext();
Checa a visibilidade
k = -1;
for( j = 0; j < marker_num; j++ ) {
if( patt_id == marker_info[j].id ) {
if( k == -1 ) k = j;
else if( marker_info[k].cf < marker_info[j].cf ) k = j;
} }
if( k == -1 ) {
contF = 0;
argSwapBuffers();
return;
}
for( j = 0; j < marker_num; j++ ) {
if( patt_id == marker_info[j].id ) {
if( k == -1 ) k = j;
else if( marker_info[k].cf < marker_info[j].cf ) k = j;
} }
if( k == -1 ) {
contF = 0;
argSwapBuffers();
return;
}
Calcula a transformação relativa.
if( mode == 0 || contF == 0 ) {
arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
}
else {
arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
}
contF = 1;
arGetTransMat(&marker_info[k], patt_center, patt_width, patt_trans);
}
else {
arGetTransMatCont(&marker_info[k], patt_trans, patt_center, patt_width, patt_trans);
}
contF = 1;
Desenha o objeto:
draw( patt_trans );
Conclusão
ARToolKit é muito utilizado pelo fato de ser distribuído no modelo open source e para fins não comerciais, incentivando a liberdade para os usuários executarem, estudarem e modificarem os códigos-fontes da biblioteca conforme a sua necessidade.Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...
- Login automático com SSH e Automatização da instalação (deploy) e atualização de sites com GitLinux
- Extensão Sun Presentation Minimizer para Broffice.ORGLinux
- Otimização de Desempenho em sistemas GNU/LinuxLinux
- Hardware para sistemas GNU/Linux - Dicas de Desempenho - Parte 3Hardware
- Hardware para sistemas GNU/Linux - Dicas de Desempenho - Parte 2Hardware