Pular para o conteúdo

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.
Alessandro de Oliveira Faria (A.K.A. CABELO) cabelo
Hits: 21.559 Categoria: Linux Subcategoria: Software
  • Indicar
  • Impressora
  • Denunciar
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Parte 2: 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:
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

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


O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
   1. Introdução: Visão computacional
   2. Mão na massa

Detectando assalto na multidão com visão computacional

OneAPI: A plataforma da Intel para facilitar o desenvolvimento com chips Intel, AMD, ARM, NVIDIA POWER e FPGA

Bioloid Control: Robótica virtual em Linux

Zebra Barcode Reader: Lendo código de barras com a sua Webcam no Linux

Instalando leitores de impressão digital modelo Digital Persona no Linux

Lendo formatos EPUB no Kindle com o Calibre

Usando o DVDStyler para autoria de DVDs

Mate Desktop no Slackware

Crie um espelho (mirror) Debian em sua máquina

Como instalar o Novo SGA - Sistema de Gerenciamento de Atendimento

#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

Entre na sua conta para comentar.