De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Alessandro de Oliveira Faria
Data de Publicação: 22 de janeiro de 2013
As bibliotecas de visão computacional (mais especificamente, a biblioteca OpenCV), apresentam:
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.
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 no site Viva o Linux).
Aqui veremos algumas dicas dos pacotes com requisitos obrigatórios e opcionais. A decisão de utilizar todos estes pacotes fica a cargo de leitor e também da capacidade e configuração do hardware em utilização.
Utilizei a biblioteca TBB por utilizar equipamento Intel, porém, o uso de bibliotecas similares é aconselhado. Vale a pena mencionar que a ausência deste recurso não permite a utilização de todos o núcleos presente no processador do seu equipamento. Então, a seguir as instruções de instalação:
$ wget http://www.threadingbuildingblocks.org/uploads/78/154/3.0/tbb30_018oss_src.tgz $ tar -zxvf tbb30_018oss_src.tgz $ make $ cd examples/ $ make
NVIDIA CUDA é uma arquitetura de computação paralela de propósito geral, que tira proveito do mecanismo de computação paralela das unidades de processamento gráfico (GPUs) NVIDIA para resolver muitos problemas computacionais complexos em uma fração do tempo necessário em uma CPU.
Mais informações sobre a instalação e configuração, no link a seguir: CUDA: Programe a sua NVIDIA
O download dos fontes da biblioteca encontra-se no link: http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/
E obtenha o pacote OpenCV-2.4.3.tar.bz2, ou superior. As instruções de compilação e configuração a seguir, foram testadas na versão 2.X.X, então, as demais versões poderão sofrer pequenas modificações.
Com o comando wget, efetue o download e descompacte o pacote:
$ wget http://sourceforge.net/projects/opencvlibrary/files/opencv-unix/2.4.3/OpenCV-2.4.3.tar.bz2 $ tar -jxvf tars/OpenCV-2.4.3.tar.bz2
Após a extração dos arquivos compactados, crie uma nova pasta na recém-criada, pelo comando tar. Entre neste novo diretório para a compilação dos fontes, seguindo as orientações a seguir:
$ cd OpenCV-2.4.3/ $ mkdir opencv.build $ cd opencv.build
Como partimos do princípio que todos os pacotes opcionais foram instalados, a seguir os parâmetros de compilação, ou diretivas de compilação, do comando cmake para utilizar os os recursos na biblioteca OpenCV:
$ cmake -DBUILD_DOCS=ON \ -DCMAKE_BUILD_TYPE=RELEASE -DBUILD_LATEX_DOCS=ON \ -DBUILD_OCTAVE_SUPPORT=ON -DBUILD_PYTHON_SUPPORT=ON \ -DBUILD_SWIG_PYTHON_SUPPORT=ONF -DBUILD_TESTS=ON \ -DENABLE_OPENMP=OFF -DENABLE_PROFILING=OFF \ -DBUILD_PYTHON_SUPPORT=ON -DBUILD_NEW_PYTHON_SUPPORT=ON \ -DBUILD_EXAMPLES=ON -DINSTALL_C_EXAMPLES=ON \ -DINSTALL_OCTAVE_EXAMPLES=ON -DINSTALL_PYTHON_EXAMPLES=ON \ -DWITH_1394=ON -DWITH_TBB=ON -DWITH_CUDA=ON -DWITH_FFMPEG=ON \ -DWITH_GSTREAMER=OFF -DWITH_QT=ON -DWITH_GTK=ON \ -DWITH_JASPER=ON -DWITH_JPEG=ON -DWITH_PNG=ON -DWITH_TIFF=ON \ -DWITH_V4L=ON -DWITH_XINE=ON -DENABLE_SSE=ON -DENABLE_SSE2=ON \ -DENABLE_SSE3=ON -DENABLE_SSSE3=ON -DENABLE_SSE41=ON \ -DENABLE_SSE42=ON -DWITH_QT=ON -DWITH_QT_OPENGL=ON \ -DCUDA_NPP_LIBRARY_ROOT_DIR=/usr/local/cuda/NPP/SDK/..
A seguir, utilize o comando make e make install para compilar e instalar a biblioteca OpenCV:
$ make -j 24
** A opção "-j" permite processar durante a compilação mais de uma tarefa simultaneamente;
*** Vá tomar um café...
Como superusuário, utilize o comando make install e ldconfig e pronto! Nesta etapa todos os requisitos foram instalados com sucesso:
# make install # ldconfig
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
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".
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: Inteligência Coletiva « cabelovivaolinux.wordpress.com
Para finalizar, críticas e sugestões: cabelo[ at ]opensuse.org
Este artigo foi publicado originalmente no portal Viva o Linux
Alessandro de Oliveira Faria é sócio-fundador da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim proporcionando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, diversos documentos técnicos disponibilizados na internet, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários