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.
$ ./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.