LINCE - A biblioteca de visão artificial open source

Entre uma pesquisa e outra sobre visão artificial encontrei a biblioteca Lince, baseada na comparação entre shapes e suas relações dos vértices internos. Esta biblioteca precisa amadurecer muito em termos matemáticos, mas o seu diferencial é a facilidade de uso, assim desmistificando o assunto e o aprendizado do algoritmo.

[ Hits: 27.096 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 19/07/2006 | Blog: http://assuntonerd.com.br


Conceitos de utilização do Lince



O Lince trabalha em 3 modos (aprendizado, busca e lista de objetos). O modo aprendizado (training) é utilizado para vetorizar a imagem e armazenar no banco de dados, o modo busca (comparing) é o módulo de comparação da imagem atual com os objetos vetorizados armazenados no banco de dados e modo lista exibe na tela todos os objetos cadastrados.

Para usar o modo aprendizado, basta utilizar o argumento "learn" na linha de comando. Nos exemplos abaixo usaremos as imagens ameba.ppm, quadrado.ppm, letra M.ppm e a letra A.ppm para aprendizado do algoritmo.

As imagens utilizadas para processamento neste artigo podem serem obtidas nos links abaixo:

Ameba: http://www.vivaolinux.com.br/imagens/artigos/comunidade/ameba.ppm
Quadrado: http://www.vivaolinux.com.br/imagens/artigos/comunidade/quadrado.ppm
letra M: http://www.vivaolinux.com.br/imagens/artigos/comunidade/M.ppm
letra A: http://www.vivaolinux.com.br/imagens/artigos/comunidade/A.ppm
Teste1: http://www.vivaolinux.com.br/imagens/artigos/comunidade/teste1.ppm

Siga os comandos abaixo para efetuar o aprendizado das imagens:

Para aprender a estrutura da ameba, use:

$ lince learn ameba.ppm
Width: 11
Height: 11
Type: 1
--------- Statistics for object: ameba
Shapes: 1
Shape 0 ---
  Area:         43
  Perimeter:    30
  Roundness:    0.600393
Object ameba stored in database, file lince.db. Thanks for feeding me.

Para aprender a estrutura do quadrado. use:

$ lince learn quadrado.ppm
Width:  66
Height: 66
Type:   1
--------- Statistics for object: quadrado
Shapes: 1
Shape 0 ---
  Area:         1365
  Perimeter:    148
  Roundness:    0.783103
Object quadrado stored in database, file lince.db. Thanks for feeding me.

Para aprender a estrutura da imagem letra A. use:

$ lince learn A.ppm
Width:  66
Height: 66
Type:   1
--------- Statistics for object: A
Shapes: 2
Shape 0 ---
  Area:         303
  Perimeter:    116
  Roundness:    0.282967
Shape 1 ---
  Area:         33
  Perimeter:    32
  Roundness:    0.404971
Two shape comparisons ---
  Shapes 0-1:   5.16523
Object A stored in database, file lince.db. Thanks for feeding me.

Para aprender a estrutura da imagem letra M. use:

$ lince learn M.ppm
Width:  69
Height: 68
Type:   1
--------- Statistics for object: M
Shapes: 1
Shape 0 ---
  Area:         408
  Perimeter:    222
  Roundness:    0.104031
Object M stored in database, file lince.db. Thanks for feeding me.

Vale à pena mencionar que apenas duas funções são invocadas para incluir o objeto no banco de dados, a função print_object_statistics para calcular os vértices, lince_database_add_object para adicionar o objeto e por último lince_database_save para gravar no banco.

Nesta etapa foram inclusos os 4 objetos no banco de dados lince.db, para conferir a inclusão basta utilizar o parâmetro dbstats como no exemplo abaixo:

$ ./lince dbstats
Total objects: 4
Obj 0: Name:    quadrado  Shapes: 1
Obj 1: Name:    A         Shapes: 2
Obj 2: Name:    M         Shapes: 1
Obj 3: Name:    ameba     Shapes: 1
Duas funções são utilizadas nesta etapa, a lince_object_get_name para obter o nome do objeto e a lince_object_number_of_shapes para retornar a quantidade de shapes.

A imagem teste1.ppm é a letra M criada a mão livre no Gimp. Sendo assim vamos submetê-la ao processo de comparação do lince para testar a funcionalidade e eficácia do algoritmo. Basta executar o programa lince com o nome da imagem como parâmetro.

Abaixo a imagem M.ppm armazenada no banco de dados e a imagem teste.ppm submetida a identificação.


Figura armazenada no banco de dados


Figura utilizada para identificação

$ ./lince test1.ppm
Width:  66
Height: 52
Type:   1
--------- Statistics for object: test1
Shapes: 1
Shape 0 ---
  Area:         483
  Perimeter:    222
  Roundness:    0.123155
---------------RESULTS--------------
Total:  2.78058
Name:   M
Como podemos observar, o resultado da busca foi o esperado. Ou seja, na última linha encontramos a mensagem NAME: M, que significa que por semelhança de shape e vetores internos, a imagem M.ppm é o objeto com o maior coeficiente de similaridade encontrado no banco lince.db.

A função responsável pela identificação do objeto é lince_database_compare_object.

Tentei elaborar este documento de forma mais simples possível, pelo simples fato do assunto ser complexo e afastar muitos usuários. Sendo assim tenho como objetivo desmistificar o assunto abordando o projeto de forma mais direta possível.

Página anterior    

Páginas do artigo
   1. Introdução
   2. Jogo rápido: download e instalação
   3. Conceitos de utilização do Lince
Outros artigos deste autor

Gerando em tempo real efeito de voz robotizada

KDE Connect: Integrando o ambiente Android com o desktop Linux

Faça um incrível espetáculo de efeitos visuais com vídeo em tempo real

Acesso aos recursos compartilhados de sua rede Microsoft ou Samba via HTTP

Utilize seu iPad/iPhone/IPod Touch na plataforma GNU/Linux

Leitura recomendada

Alta Disponibilidade (HA) com Debian (Heartbeat + DRBD + Mon)

Como submeter dados de CDDB de um CD de áudio ao Freedb

Para o usuário leigo, qual o melhor: Kurumin ou Ubuntu?

Como usar o Bugzilla do Sabayon

Raspberry Pi: Central Multimídia com OpenELEC

  
Comentários
[1] Comentário enviado por yutaka.nakao@pol em 19/07/2006 - 08:43h

Muito bom,

Muito obrigado pois aprendi algo a mais com sua materia!

[2] Comentário enviado por franklinbr em 19/07/2006 - 10:52h

maneiro

[3] Comentário enviado por andre.vmatos em 19/07/2006 - 11:20h

Kra, mto legal. Vou ver se consigo fazer funcionar como reconhecimento facial com minha web cam!!! Hehe, pense nas possibilidades!!

[4] Comentário enviado por matheusslima em 19/07/2006 - 15:41h

mto massa, lembrei agora dakeles filmes de ficcao cientifica em que a maquina sabe identifica cada um :-)

neuromander, eu robo, nesses filmes/livros isto ta cheio :P

[5] Comentário enviado por Savago em 20/07/2006 - 17:36h

Amigos

Faz uns 3 anos eu pesquisei por varias bibliotecas de visao artificial que tivessem os requisitos:

a) Open Source
b) Performance
c) Multiplataforma

Na epoca me lembro de ter testado umas 8 - 10 bibliotecas diferentes.

Em geral, as bibliotecas de visao que voce encontra na web costumam ser projetos que foram descontinuados ou possuem somente 1 mantenedor.

Quando negativo, o processo de compilacao/instalacao pode ser extremamente demorado ou complicado, sendo comum a biblioteca nao compilar com versoes mais recentes do gcc/g++.

Considerando todos estes fatores, acabei escolhendo a OpenCV. Alem de cumprir todos os requisitos, tem uma comunidade bem ativa e uma lista extensa de colaboradores/desenvolvedores. O modelo de programacao dela tambem eh agradavel.

Fica como sugestao para quem tiver interesse na area.

Um outro projeto interessante para quem ainda estah estudando o assunto: SIP (Scilab Image Processing toolbox). Trata-se de um pacote de visao artificial para o Scilab (um projeto opensource parecido com o matlab da vida). Voce pode escrever programas sofisticados de visao artificial usando linguagem de script do scilab.

Atenciosamente

Savago


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts