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