sexta-feira, 22 de outubro de 2010

A arte de gerar marcadores para o FLARManager

Se assim como nos, voce precisa de mais marcadores (ou tags) do que os que ja vem por padrao com o FLARManager, voce ja deve ter notado que e um tato quanto problematico. Entao, aqui esta um passo-a-passo de como conseguimos.

A primeira coisa necessaria e fazer seu marcador. Tenha em mente quando fize-lo que nao pode ser muito detalhado para ser identificado a distancia e de forma alguma podem existir simetrias tanto horizontais quanto verticais.
Aqui fica disponível um modelo generico de marcador (em svg, para ser editado no inkscape) para você criar seu marcador personalizado.

Com o seu marcador em maos, vamos gerar o .pat correspondente a ele (este e o arquivo que o FLARToolkit usa para identificar os marcadores).
Acesse esta paginae clique em "ARToolKit Marker Generator Online". Com o gerador aberto selecione a opcao "Load marker image" da combobox "Mode select" e selecione a imagem do seu marcador. Agora e preciso configurar o gerador.
A opcao "Marker segments" define a resolucao da imagem capturada , "16x16" e uma boa configuracao. Quanto menor a resolucao, melhor vai ser a identificacao dos marcadores a distancia, mas voce perde em detalhes e em variedade de marcadores possiveis (os marcadores do FLARManager estao em 8x8). Tambem, resolucoes muito altas, como 64x64, tornam o processamento extremamente pesado.
A opcao "Marker size" define o quanto da imagem sera usada para a identificacao do marcador. Voce deve saber que apenas as areas que podem variar entre preto e branco devem aparecer na previa, ou seja, nao devem aparece a borda preta e muito menos a borda branca. Para gerar os nossos marcadores utilizamos esta opcao em 45%.
Feito isso, clique em "Get pattern" e deve aparecer uma previa do padrao do marcador. Se estiver de acordo com o descrito acima, otimo clique em "save" e salve o .pat do seu marcador. Mas, nao se esqueca das configuracoes que voce utilizou, pois elas serao necessarias no proximo passo.

Agora, com o .pat em maos vamos configurar o marcador paraser identificado pelo FLARManager.
Dentro da pasta "resources" utilizada pelo seu projeto ha uma pasta "flar" e dentro dela um arquivo "flarConfig.xml". Abra-o. Dentro dele ha a tag <patterns>, com quatro opcoes.
Na primeira, "resolution", voce deve colocar o equivalente ao que voce colocou na "Marker segments" do gerador. Eu quero dizer que, se "Marker segments" foi "16x16", "resolution" deve ser "16".
Nas proximas duas, voce deve colocar o que pos em "Marker size" mas sem o %. Ou seja, se voce usou "Marker size" de "45%" as opcoes "patternToBorderRatioX"  e "patternToBorderRatioY" devem ser "45".
A ultima, "confidence", define o quao sensivel o FLARManager deve ser a deteccao de marcadores. Ou seja, se ele identifica qualquer coisa como marcador, talvez seja bom mudar o valor desta opcao para um valor mais alto. Se a deteccao e muito instavel, talvez seja bom baixar o valor desta opcao. Mas, 0.5 e um bom valor.
A tag <patterns> tem uma subtag <pattern> que e o lugar onde voce deve colocar o caminho para o o .pat que voce gerou na opcao "path". aqui esta um exemplo:

<patterns resolution="16" patternToBorderRatioX="45" patternToBorderRatioY="45" minConfidence="0.3" >
    <pattern path="../markers/pat/marker3a.pat" />
</patterns>

Se voce seguiu todos os passos, ao abrir seu executavel swf novamente, ele deve estar reconhecendo seu marcador.
Aqui ficam disponíveis os 20 marcadores que estao sendo usados em nosso projeto e seus .pat. As configuracoes para estes marcadores são as que foram sugeridas antes.

Fontes:
http://flash.tarotaro.org/blog/2008/12/14/artoolkit-marker-generator-online-released
http://www.squidder.com/2009/03/05/for-nerds-only-custom-flar-markers-explained

2 comentários:

  1. Boa noite

    Meu TCC é com RA no Flartookit,preciso de classes dos objetos geometricos, hoje eu so tenho um cubo, preciso dos demais, vc tem algum conhecimento de como eu conseguir o restante?

    ResponderExcluir
  2. Boa noite!

    Antes de tudo, desculpe a demora! Espero que ainda esteja em tempo.

    Se eu entendi direito você precisa de classes que lidem com qualquer objeto, correto? Se você modelar os objetos em md2, o pacote AugmentedReality que escrevemos no projeto é capaz de fazer o serviço.

    Todo o nosso código fonte está disponível no github e o link para este pacote em especifico é: https://github.com/rafamanzo/Xadrez-em-Realidade-Aumentada/tree/master/src

    Espero ter ajudado!

    ResponderExcluir