Conceito: Evitando acidentes com visão computacional

Neste documento, veremos conceitos computacionais sobre como utilizar recursos de visão computacional para detectar pedestres, ciclistas e animais. Câmeras com tal recurso adaptado em veículos poderiam evitar muitos acidentes. Sendo assim, deixo neste artigo todo o conceito computacional.

[ Hits: 14.259 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 04/08/2014 | Blog: http://assuntonerd.com.br


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


Página anterior    

Páginas do artigo
   1. Introdução: Visão computacional
   2. Mão na massa
Outros artigos deste autor

Visão Computacional - Reconhecendo objetos na plataforma Linux via Webcam

ARToolKit: Criando aplicativos de Realidade Aumentada

Criando aplicativos para o Mac OS X no GNU/Linux

jKiwi: Simulando pintura de cabelo e novo visual com Software Livre

TerminatorX: Linux nas discotecas para os DJs!

Leitura recomendada

Instalando o QEMU no Fedora Core 4

Utilizando o Protheus em estações Linux

Aplicando relevo em símbolos com o Gimp

Funtoo Current - Instalação completa

OpenMPI - Instalação de uma aplicação paralela

  
Comentários
[1] Comentário enviado por Ed_slacker em 04/08/2014 - 09:56h

Cabelo, só uma curiosidade. Acredito que o proposto neste artigo é o mesmo princípio aplicado em alguns veículos da Volvo, que detectam obstáculos como os mencionados e executa frenagem no veículo sem intervenção humana, desde que o mesmo veículo esteja em uma velocidade de até 30km/h. Seria a mesma aplicação?
Grande abraço.

[2] Comentário enviado por cabelo em 04/08/2014 - 13:06h

Levando em consideração tecnologia como tegra 3 ou superior e o processamento acima de 30 quadros por segundos (no video do artigo chegamos a mais de 100). Podemos gerar alertas sonoros como também tomar alguma outra ação. Ressalto que o texto é conceitual e podemos aplicar em diversos outros segmentos. Como por exemplo o próprio semáforo inteligente.

[3] Comentário enviado por COBY em 05/08/2014 - 13:31h

Olá me chamo Franklin, comecei a usar o Zorin OS 09 a 3 dias.
Ainda estou tentando entender muitas coisas.
Li este artigo e não entendi muito bem o objetivo dele, seria que toda vez ao selecionar uma imagem ou um video ele detectar os objetos e animais?

Gostaria que se possível me recomendasse algumas etapas para melhor entender ou me adaptar ao linux. Me mudei para esse OS pela ideia de liberdade, mas ando com algumas problemas.

[4] Comentário enviado por danniel-lara em 06/08/2014 - 11:25h

parabéns muito bom
esse artigo me lembra muito bem o Seriado Person of Interest

[5] Comentário enviado por murilo_ns em 06/08/2014 - 18:14h

Muito bom!
Você teria algum how to para o reconhecimento de texto em placas de carros?

[6] Comentário enviado por rodrigocontrib em 07/08/2014 - 20:28h


[5] Comentário enviado por murilo_ns em 06/08/2014 - 18:14h:

Muito bom!
Você teria algum how to para o reconhecimento de texto em placas de carros?


Ta ai uma boa ideia, o reconhecimento de placas de carro seriam um otimo projeto para o reconhecimento de placas frias, se bater com outros dados Marca/Modelo do veículo.

[7] Comentário enviado por romulogcerqueira em 11/08/2014 - 18:00h

Oi Cabelo, muito obrigado por contribuir com mais um tutorial. Entretanto, eu não consegui encontrar o arquivo "cavalo_v6.mat" no diretório especificado. Está faltando alguma informação no artigo?

Abraços


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts