Infra - Linux
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 de produto final, mas o seu diferencial é a facilidade de uso, assim desmistificando o assunto e o aprendizado do algoritmo relacionado ao assunto. Ao meu parecer, é um bom ponto de partida para quem deseja se aventurar neste segmento computacional.
por Alessandro de Oliveira Faria
A biblioteca LINCE é baseada na comparação entre shapes e suas relações de um prévio aprendizado. As principais vantagens desta técnica é não precisar relacionar um objeto a um código explícito, aprendizado dinâmico durante a execução da aplicação e rápido treino do algoritmo.
O reconhecimento é dividido em 3 etapas:- A primeira etapa é o pré-processamento, ou seja, esta etapa é a mais importante, pois trata-se da análise da imagem em si.
- A segunda etapa é a conversão da imagem em shape e internamente convertida em uma lista de vetores.
Imagem: ameba.png
ameba.png convertida em shape
ameba.png com a lista de vetores calculada - A terceira parte é o reconhecimento do objeto baseado na similaridade do shape e a sua representação interna (lista de vetores).
Neste documento executaremos alguns testes com imagens de caracteres e figuras básica como círculo e quadrado. O reconhecimento se mostrou eficaz por se tratar de um algoritmo de fácil compreensão.
Este projeto pode ser um ponto de partida para algoritmo de identificação de impressões digitais ou de face em vídeo ao vivo de sobre muitas implementações e aprimoramento matemático, mas não deixa de ser um bom ponto de partida.
Jogo rápido: download e instalação
Faça o download em: http://lince.sourceforge.net
Abaixo um exemplo com o comando wget:
$ wget http://ufpr.dl.sourceforge.net/sourceforge/lince/lince-0.20.tar.gz
Descompacte o pacote lince-0.20.tar.gz com o comando tar como no exemplo
abaixo:
$ tar -zxvf lince-0.20.tar.gz
Como no exemplo
abaixo, entre na pasta lince-0.20 e execute o comando ./configure:
$
cd lince-0.20/
$ ./configure
Agora use o comando make para
compilar a aplicação:
$ make
Após a compilação, siga os
comandos abaixo para verificar se o binário lince foi criado na pasta
src:
$ cd src
$ ls lince
Nesta etapa estamos com o
programa lince pronto para ser executado.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: ameba.ppm Quadrado: quadrado.ppm letra M: M.ppm letra A: A.ppm Teste1: 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. |
- 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