Visão Computacional - Reconhecendo objetos na plataforma Linux via Webcam

Dispositivos de vídeo-captura ganham inteligência em função de algoritmos de visão computacional. Para tratar deste assunto, tal segmento demanda conhecimentos matemáticos, domínio com rotinas de processamentos de imagens e sólidos fundamentos sobre manipulação da API V4L2. Neste documento, veremos como utilizar todos estes conceitos com soluções Open Source.

[ Hits: 28.991 ]

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


Visão Computacional - Breve introdução



As bibliotecas de visão computacional (mais especificamente, a biblioteca OpenCV), apresentam:
  • Recursos de manipulação de imagem
  • Entrada e saída de vídeo
  • Cálculo de matriz
  • Álgebra linear
  • Morfologia matemática
  • Análise estrutural
  • Reconhecimento de objeto
  • Gráficos primitivos

Como se não fosse o suficiente, a biblioteca OpenCV abstrai a utilização de técnicas de programação multinuclear como OpenMP e TBB da Intel, como também a utilização de GPU.

Para detectar objetos, é preciso utilizar algoritmos que obtêm características invariantes no aspecto de rotação e escala com relação ao ponto de observação do dispositivo de captura. Para que, somente então, posteriormente utilizarmos esta abstração para comparação entre duas imagens.
A imagem acima demonstra na íntegra o problema resolvido de reconhecimento das características invariantes. Ressalto que as soluções propostas neste documento são apenas uma de inúmeras maneiras de equacionar tal tarefa computacional.

Programação multinuclear e GPU

A programação paralela é obrigatório para obter o melhor desempenho em equipamentos atuais multicores. Algumas sugestões são as bibliotecas OpenMP ou TBB (Threading Building Blocks) da Intel, que encarregam-se da utilização do software ao ambiente baseado na quantidade de núcleos.

Para continuar a interminável corrida no código perfeito, para obter leveza e suavidade em sistemas de visão computacional junto à programação paralela, é saudável utilizar o uso orquestrado das GPU e CPUs.

Atualmente existem APIs e/ou SDK da NVIDIA, Intel e ATI/AMD (mais informações em algumas edições na Linux Magazine, ou aqui no Viva o Linux).

    Próxima página

Páginas do artigo
   1. Visão Computacional - Breve introdução
   2. Download e instalação
   3. O sistema find-object
Outros artigos deste autor

Zebra Barcode Reader: Lendo código de barras com a sua Webcam no Linux

Biometria: Transforme-se no usuário root com sua impressão digital

Criando um invejável serviço de backup em CD-R com gravação multi-sessão

Criando aplicativos para o Mac OS X no GNU/Linux

Xtraceroute: O traceroute tridimensional

Leitura recomendada

Fazendo montagens com o Gimp

O espelho do sol e da lua

Desenhando os vilões do Pac-Man com Inkscape

ICINGA - Monitorando máquinas remotas com NRPE

Um pouco de pintura digital

  
Comentários
[1] Comentário enviado por fabio em 07/01/2013 - 17:52h

Não sei de onde tu tira tanta coisa maluca pra implementar :)

Muito bom! Parabéns Cabelo.

[2] Comentário enviado por tsuriu em 07/01/2013 - 18:12h


[1] Comentário enviado por fabio em 07/01/2013 - 17:52h:

Não sei de onde tu tira tanta coisa maluca pra implementar :)

Muito bom! Parabéns Cabelo.


Parabéns Cabelo... O incrível é que eu tava mesmo procurando algo justamente desse tipo..

VLW MSM...

[3] Comentário enviado por izaias em 07/01/2013 - 19:37h

Esse cara tem VISÃO!

Parabéns, Cabelo.

[4] Comentário enviado por eldermarco em 07/01/2013 - 22:26h

Sensacional! Quando eu crescer, quero ser que como ele! hahaha

[5] Comentário enviado por laerciomotta em 08/01/2013 - 10:35h

Maravilha, porem fiz os testes aqui, tudo funcionou mais o find_object não encontrou minha webcam..

Camera initialization failed! (with device 0)

Pelo cheese aparece a webcam normal...

Sistema: Ubuntu 12.04 w/ Gnome Shell (64 bits)
Notebook Dell Vostro v131

Parabens!
[]'s

[6] Comentário enviado por diego.agudo em 08/01/2013 - 21:40h

Mto bom o artigo!
Me diga uma coisa, você já testou se ele também serve para reconhecimento facial? Parece que a idéia é a mesma, não?!

[]s

[7] Comentário enviado por tiagofontoura em 12/01/2013 - 18:51h

beleza cabelo, sera que e muito pessado para raspberry pi?

[8] Comentário enviado por nsoluiz em 19/01/2013 - 10:11h

tche
bom dia
sei que o teu tempo é pouco, vou tentar ser direto…
1 – desculpa postar isso aqui, sei que nao é o lugar correto, se responder fico muito agradecido…
2 – comprei um pentv da infinitoo(http://www.infinitoweb.com.br/sistema/ck/files/downloads/infinito_pentv_driver.zip), gostaria de saber de ti de tem como um ubuntu desktop 12.10 ser um servidor de Streaming de tv, pode fazer um tutorial eu dar as dicas?
3 – não que eu deixei por ultimo, pra que tu aches que estou enchendo o teu ego, mas posso te garantir, tu é um bagal de 1ª estancia, muito bom o conteudo que tu posta no blog e no viva o linux, parabens.
muito obrigado pela atenção e desculpas novamente.

[9] Comentário enviado por marcosregato em 04/08/2014 - 03:22h

Deu erro na minha instalação, estou instalando OpenCV 2.4.9 no Ubuntu.Olha o erro

[ 70%] Building CXX object modules/legacy/CMakeFiles/opencv_legacy.dir/src/blobtrackinglist.cpp.o
[ 70%] [ 70%] Building CXX object modules/core/CMakeFiles/opencv_test_core.dir/test/test_ds.cpp.o
Building CXX object modules/imgproc/CMakeFiles/opencv_perf_imgproc.dir/perf/perf_houghLines.cpp.o
[ 70%] Building CXX object modules/imgproc/CMakeFiles/opencv_perf_imgproc.dir/perf/perf_threshold.cpp.o
Linking CXX shared library ../../lib/libopencv_legacy.so
[ 70%] Built target opencv_legacy
Linking CXX executable ../../bin/opencv_perf_core
[ 70%] Built target opencv_perf_core
Linking CXX executable ../../bin/opencv_perf_imgproc
[ 70%] Built target opencv_perf_imgproc
Linking CXX executable ../../bin/opencv_test_core
[ 70%] Built target opencv_test_core
make: ** [all] Erro 2

Alguém pode me ajuda ?

[10] Comentário enviado por CRACKER-FENIX em 16/10/2014 - 03:52h

parabéns um bom trabalho no artigo algo útil e eficaz mais uma vez o cabelo inovando :-)


Contribuir com comentário