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: 34.065 ]

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


O sistema find-object



Este pacote é uma solução de código aberto baseado em Qt e OpenCV na plataforma GNU/Linux, que permite o learning (aprendizado) e detectar o objeto recém aprendido pelo sistema.

Este projeto é de código aberto, então, é uma boa fonte de aprendizagem para os programadores. Pois além de manipular Webcam, utiliza diversos algoritmos de reconhecimento de padrão como SURF e outros. Bom, chega de blá-blá-blá.

A instalação é simples. Efetue o download do código fonte no link a seguir:

# wget http://find-object.googlecode.com/files/Find-Object-0.4.0-Source.zip

Agora descompacte o arquivo com o comando unzip conforme o exemplo abaixo:

# unzip Find-Object-0.4.0-Source.zip
Archive: Find-Object-0.4.0-Source.zip
inflating: Find-Object-0.4.0-Source/build/.empty
inflating: Find-Object-0.4.0-Source/src/AddObjectDialog.h
inflating: Find-Object-0.4.0-Source/src/ParametersToolBox.h
inflating: Find-Object-0.4.0-Source/src/Camera.h
inflating: Find-Object-0.4.0-Source/src/ParametersToolBox.cpp
inflating: Find-Object-0.4.0-Source/src/resources.qrc
inflating: Find-Object-0.4.0-Source/src/AboutDialog.cpp
inflating: Find-Object-0.4.0-Source/src/KeypointItem.h
inflating: Find-Object-0.4.0-Source/src/ui/mainWindow.ui
inflating: Find-Object-0.4.0-Source/src/ui/addObjectDialog.ui
inflating: Find-Object-0.4.0-Source/src/ui/aboutDialog.ui
inflating: Find-Object-0.4.0-Source/src/QtOpenCV.h
inflating: Find-Object-0.4.0-Source/src/AddObjectDialog.cpp
inflating: Find-Object-0.4.0-Source/src/Settings.cpp
inflating: Find-Object-0.4.0-Source/src/MainWindow.cpp
inflating: Find-Object-0.4.0-Source/src/AboutDialog.h
inflating: Find-Object-0.4.0-Source/src/ObjWidget.h
inflating: Find-Object-0.4.0-Source/src/utilite/UFile.cpp
inflating: Find-Object-0.4.0-Source/src/utilite/UFile.h
inflating: Find-Object-0.4.0-Source/src/utilite/UDirectory.cpp
inflating: Find-Object-0.4.0-Source/src/utilite/UDirectory.h
inflating: Find-Object-0.4.0-Source/src/utilite/UPlot.h
inflating: Find-Object-0.4.0-Source/src/utilite/UPlot.cpp
inflating: Find-Object-0.4.0-Source/src/utilite/UStl.h
inflating: Find-Object-0.4.0-Source/src/resources/Find-Object.png
inflating: Find-Object-0.4.0-Source/src/resources/TheWorkingGroup_video_play.ico
inflating: Find-Object-0.4.0-Source/src/resources/TheWorkingGroup_video_stop.ico
inflating: Find-Object-0.4.0-Source/src/resources/TheWorkingGroup_video_pause.ico
inflating: Find-Object-0.4.0-Source/src/Camera.cpp
inflating: Find-Object-0.4.0-Source/src/Settings.h
inflating: Find-Object-0.4.0-Source/src/KeypointItem.cpp
inflating: Find-Object-0.4.0-Source/src/MainWindow.h
inflating: Find-Object-0.4.0-Source/src/QtOpenCV.cpp
inflating: Find-Object-0.4.0-Source/src/rtabmap/PdfPlot.h
inflating: Find-Object-0.4.0-Source/src/rtabmap/PdfPlot.cpp
inflating: Find-Object-0.4.0-Source/src/ObjWidget.cpp
inflating: Find-Object-0.4.0-Source/.project
inflating: Find-Object-0.4.0-Source/CMakeLists.txt
inflating: Find-Object-0.4.0-Source/example/CMakeLists.txt
inflating: Find-Object-0.4.0-Source/example/main.cpp
inflating: Find-Object-0.4.0-Source/bin/box.png
inflating: Find-Object-0.4.0-Source/bin/box_in_scene.png
inflating: Find-Object-0.4.0-Source/.cproject
inflating: Find-Object-0.4.0-Source/LICENSE
inflating: Find-Object-0.4.0-Source/README
inflating: Find-Object-0.4.0-Source/app/CMakeLists.txt
inflating: Find-Object-0.4.0-Source/app/Find-Object.icns
inflating: Find-Object-0.4.0-Source/app/Find-Object.ico
inflating: Find-Object-0.4.0-Source/app/Find-Object.ifx
inflating: Find-Object-0.4.0-Source/app/main.cpp
inflating: Find-Object-0.4.0-Source/app/Find-Object.rc
inflating: Find-Object-0.4.0-Source/cmake_uninstall.cmake.in

Para iniciar a compilação, entre na pasta Find-Object-0.4.0-Source/build e utilize o comando cmake:

# cd Find-Object-0.4.0-Source/build
# cmake ..

-- The C compiler identification is GNU 4.7.1
-- The CXX compiler identification is GNU 4.7.1
-- Check for working C compiler: /usr/bin/gcc
-- Check for working C compiler: /usr/bin/gcc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Looking for Q_WS_X11
-- Looking for Q_WS_X11 - found
-- Looking for Q_WS_WIN
-- Looking for Q_WS_WIN - not found.
-- Looking for Q_WS_QWS
-- Looking for Q_WS_QWS - not found.
-- Looking for Q_WS_MAC
-- Looking for Q_WS_MAC - not found.
-- Found Qt4: /usr/bin/qmake (found version "4.8.1")
-- --------------------------------------------
-- Info :
--    CMAKE_INSTALL_PREFIX = /usr/local
--    CMAKE_BUILD_TYPE = Release
-- --------------------------------------------
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/Find-Object-0.4.0-Source/build

Para iniciar a compilação e instalação, abaixo os comandos:

# make
# make install


Conceitos operacionais

Inicie o programa Find Object com o comando find_object, como no exemplo abaixo. Logo após, iniciaremos a nossa Webcam pressionando a tecla espaço. Se tudo estiver funcionando corretamente, entre na opção "EDIT" do menu, e selecione o item "Add object from scene".

find_object
Agora, para executar o modo learning (aprendizado computacional), devemos focar a Webcam no objeto desejado e selecionar os pontos característicos do objeto e logo a seguir, clique em "NEXT".
Linux: Visão Computacional - Reconhecendo objetos na plataforma Linux via Webcam   Linux: Visão Computacional - Reconhecendo objetos na plataforma Linux via Webcam
Pronto, ao concluir o processo, o sistema passa a identificar e/ou reconhecer no vídeo, ao vivo, o objeto selecionado anteriormente.
A seguir, um vídeo demonstrativo com a funcionalidade do sistema em operação...

Mais dicas sobre este assunto, disponibilizarei no meu blog:
Para finalizar, críticas e sugestões: cabelo[ at ]opensuse.org
Linux: Visão Computacional - Reconhecendo objetos na plataforma Linux via Webcam
Página anterior    

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

Criando aplicativos para o Mac OS X no GNU/Linux

Conceito: Evitando acidentes com visão computacional

DJVU o formato que pode ameaçar o reinado do PDF

Neste Natal: liberte o seu Motorola Atrix, e o transforme no desktop perfeito

Instalando o Android SDK na plataforma Linux

Leitura recomendada

"Tatuando" pessoas com o Gimp

Pequenas coleções (parte 2)

Fontes personalizadas no GNU/Linux

Desenhando um avatar do Tux no InkScape

Como simular fluidos 3D com o Blender

  
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 removido 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




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts