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: 17.121 ]

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

UZIX - O Linux do MSX (Z80)

HairCAPTURE – Utilizando captura de vídeo em C++ (sem segredos)

SIAGES: Uma oportunidade de negócio com software livre

ReactOS: O irmão open-source do Microsoft Windows NT 4.0

DJVU o formato que pode ameaçar o reinado do PDF

Leitura recomendada

DD-WRT no D-Link Dir-300 Rev A

Paravirtualização com XEN

YouOS- Seu sistema operacional na internet

Um tour pelos players de áudio para Linux

A importância do modo texto

  
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