Conceito - Evitando acidentes com visão computacional
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:
- Aquisição da imagem: geralmente a imagem é obtida através de um dispositivo de vídeo captura, câmeras digitais, celulares, smartphones e outros.
- Pré-processamento: geralmente, é necessário processar a imagem para garantir as condições mínimas. Por exemplo, redução de ruídos, balanceamento de brilho e contraste.
- Extração da características: características matemáticas em diversos níveis de dificuldades são extraídas. Como exemplo, o processo de detecção de borda, cantos, morfologia matemática e muitos outros.
- Segmentação: a seleção de regiões de interesse e/ou segmentação são incluídas nas áreas que contém o objeto.
- Processamento: um conjunto de dados é processado e verificado a satisfação e conformidades matemáticas.
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.
Mão na massa
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