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.