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: 06 de agosto de 2014
Visão computacional é uma divisão da computação que trabalha com o conceitos das máquinas que enxergam. Esta tecnologia é geralmente aplicada em robôs industriais, veículos autônomos, câmeras inteligentes, biometria e outros sistemas computacionais.
Trabalhos relacionados à visão computacional, têm ainda um longo caminho evolutivo, pois somente após o final da década de 70 que se iniciaram estudos aprofundados. Entretanto, a evolução do hardware e os seus respectivos recursos, vem ajudando muito ao progresso deste segmento.
A visão computacional é um problema mal posto, como também não existe uma formulação padrão para a resolução do mesmo, todos os métodos são baseados em aprendizagem e está cada vez mais comum no mercado de tecnologia.
O reconhecimento de padrões e a aprendizagem de máquina é um processo que consiste em determinar se uma imagem contém ou não um objeto. As principais lógicas de processamento estão classificadas geralmente em:
O princípio computacional do título deste artigo, baseia-se com os devidos treinos computacionais (o qual não é o objetivo deste documento), podemos detectar animais, humanos, partes do corpo e objetos. Então, se identificados os itens mencionados, podemos estimar a ação do indivíduo e/ou animal e objeto.
Após detectar as partes do corpo, calculamos os vetores para simplificar o trabalho do algoritmo de detecção de esqueleto. Sendo assim, facilmente identificamos, por exemplo, pedestres, ciclistas, cavalos e outros prováveis obstáculos possivelmente diante do veículo.
Com todas estas informações, as ações como pular, falar ao celular, tocar um instrumento, ler, cavalgar, correr, tirar foto, usar um computador e outros, tornaram-se uma tarefa tangível.
E a performance? Em 2011 utilizei a biblioteca OpenCV compilada com as chamadas do SDK NVIDIA. Ou seja, utilizei a GPU para obter o máximo desempenho na localização de padrões. No caso do vídeo demonstrativo a seguir uma face.
Atualmente, com a abertura do código Tegra para GNU/Linux, podemos em hardwares embarcados, utilizar todo o poder do hardware junto à biblioteca OpenCV e outros recursos/bibliotecas de visão computacional.
O motor principal do projeto é a biblioteca LibPaBOD, escrita em C++ e criada para detectar objetos usando misturas de modelos, assim, detectando parcialmente peças do objeto em questão.
O processo recebe uma imagem que, por sua vez, é submetida ao processamento, utiliza modelos anteriormente treinados em MATLAB. Esta biblioteca utiliza, como dependência, os pacotes OpenCV e MatIO, então instale na sua distribuição favorita os requisitos para iniciar a instalação desta biblioteca.
O download do código fonte deve ser efetuado com o comando git, conforme o exemplo abaixo:
# git clone ""https://github.com/mjmarin/libpabod Cloning into 'libpabod'... remote: Counting objects: 350, done. remote: Total 350 (delta 0), reused 0 (delta 0) Receiving objects: 100% (350/350), 684.93 KiB | 176.00 KiB/s, done. Resolving deltas: 100% (179/179), done. Checking connectivity... done
Logo a seguir, entre na pasta recém criada, crie a pasta build e utilize o comando cmake:
# cd libpabod/
# mkdir build
# cd build/
# cmake ..
-- The C compiler identification is GNU 4.8.1
-- The CXX compiler identification is GNU 4.8.1
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- 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
-- CMAKE_BUILD_TYPE=
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.28")
-- checking for module 'matio>=1.3.3'
-- found matio, version 1.5.2
-- MATIO lib=matio;hdf5;z
-- -------------------------------------------------------------------------------
-- GNU COMPILER
-- -------------------------------------------------------------------------------
-- OpenCV_LIB_DIR=
--
-- -------------------------------------------------------------------------------
-- General configuration for pabod 0.2.10
-- -------------------------------------------------------------------------------
--
Built as dynamic libs?:ON
Compiler:/usr/bin/c++
-- C++ flags (Release): -Wall -Wno-long-long -ffunction-sections -fopenmp -fomit-frame-pointer -O3 -ffast-math -mmmx -msse -msse2 -msse3 -DNDEBUG
-- C++ flags (Debug): -Wall -Wno-long-long -ffunction-sections -fopenmp -g3 -O0 -DDEBUG -D_DEBUG -W -Wextra -Wno-return-type
-- CMAKE_CXX_FLAGS: -Wall -Wno-long-long -ffunction-sections -fopenmp
-- CMAKE_BINARY_DIR: /tmp/libpabod/build
--
-- CMAKE_SYSTEM_PROCESSOR = x86_64
-- BUILD_SHARED_LIBS = ON
-- CMAKE_INSTALL_PREFIX = /usr/local
-- CMAKE_BUILD_TYPE =
-- CMAKE_MODULE_PATH = /usr/local/lib/cmake/;/usr/lib/cmake
--
-- --------------------------- Documentation -----------------------------
--
-- INSTALL_DOC = OFF
-- USE_LATEX =
-- USE_DOT =
-- USE_CHM =
--
-- OpenCV_LIB_DIR=
-- CMAKE_INSTALL_PREFIX=/tmp/libpabod/build
--
--
-- Change a value with: cmake -D<Variable>=<Value>
--
-- Configuring done
-- Generating done
-- Build files have been written to: /tmp/libpabod/build
Agora, utilize o comando make e make install, para efetuar a compilação e instalação do pacote. Se tudo estiver funcionando corretamente, na pasta /usr/local/bin/ estará presente os arquivos detectobj, detectobj2 e detectvid.
Para entender melhor o funcionamento, ao executarmos o comando detectobj precedido dos parÂmentos cavalo.mat como modelo e uma imagem, teremos a seguinte saída como detecção:
# detectobj -m ../../data/models/cavalo_v6.mat -i livinha.jpg -t 0.1
Model: ../../data/models/cavalo_v6.mat
Image: livinha.jpg
Threshold used: 0.1
init done
opengl support available
Searching for objects... This operation may take a few seconds
Elapsed time: 25.3003 seconds
1 object(s) found using threshold = -9.22337e+18
----------------------------------------------
- cavalo 1, score = 0.137023
Push 't' key to save a copy of (t)agged image
Push 'c' key to save each of objects found on differents (c)ut images
Push 'q' key to (q)uit
Após alguns segundos, o resultado será o processamento similar à imagem a seguir:
Este documento tem como objetivo, demonstrar uma prova de conceito sobre como podemos utilizar o poder dos hardwares atuais, junto à força do software livre.
Então, deixo aqui a minha colaboração para futuras ideias e implementações neste segmento.
Críticas e sugestões, enviem para cabelo[at]opensuse.org.
Linux: Utilize qualquer Tablet/Smartphone como monitor estendido sem fio no GNU/Linux
![]() |
Este artigo foi publicado originalmente no portal Viva o Linux