Detectando assalto na multidão com visão computacional

Neste documento veremos um texto conceitual sobre uma das aplicabilidades do projeto OpenPose, uma biblioteca que permite a detecção de esqueleto com algoritmos de visão computacional. Com a análise dos vértices do esqueleto, podemos detectar determinadas ações, como um assalto na multidão com câmeras de monitoramento, assim talvez evitando a morte de vítimas de assaltos.

[ Hits: 8.740 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 09/11/2018 | Blog: http://assuntonerd.com.br


Mão na massa



Primeiramente lembramos que a principal dependência deste projeto é a biblioteca openCV 3.X ou superior e a biblioteca CUDA da NVIDIA, devemos efetuar o download dos fontes OpenPose no repositório github com o comando a seguir:

git clone https://github.com/CMU-Perceptual-Computing-Lab/openpose/
Cloning into 'openpose'...
remote: Enumerating objects: 518, done.
remote: Counting objects: 100% (518/518), done.
remote: Compressing objects: 100% (350/350), done.
remote: Total 17652 (delta 283), reused 239 (delta 164), pack-reused 17134
Receiving objects: 100% (17652/17652), 81.35 MiB | 955.00 KiB/s, done.
Resolving deltas: 100% (13463/13463), done.


Após o download dos fontes, entre na pasta openopose, crie a pasta "build" e prepare as diretivas de compilação com o comando cmake.

cd openpose/
$ mkdir build
$ cd build/
$ cmake ..


Se tudo estiver funcionando corretamente, principalmente a dependência do ambiente, teremos a seguinte saída:

-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- 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
-- Detecting C compile features
-- Detecting C compile features - 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
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- GCC detected, adding compile flags
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE
-- Found CUDA: /usr/local/cuda-8.0 (found version "8.0")
-- Building with CUDA.
-- CUDA detected: 8.0
-- Found cuDNN: ver. 6.0.21 found (include: /usr/local/cuda-8.0/include, library: /usr/local/cuda-8.0/lib64/libcudnn.so)
-- Automatic GPU detection failed. Building for all known architectures.
-- Added CUDA NVCC flags for: sm_20 sm_21 sm_30 sm_35 sm_50 sm_52 sm_60 sm_61
-- Found cuDNN: ver. 6.0.21 found (include: /usr/local/cuda-8.0/include, library: /usr/local/cuda-8.0/lib64/libcudnn.so)
-- Found GFlags: /usr/include
-- Found gflags (include: /usr/include, library: /usr/lib64/libgflags.so)
-- Found Glog: /usr/include
-- Found glog (include: /usr/include, library: /usr/lib64/libglog.so)
-- Found OpenCV: / (found version "4.0.0")
-- Caffe will be downloaded from source now. NOTE: This process might take several minutes depending
on your internet connection.
Submodule '3rdparty/caffe' (https://github.com/CMU-Perceptual-Computing-Lab/caffe.git) registered for path '../3rdparty/caffe'
Cloning into '/dados/Fontes/OSS/openpose/3rdparty/caffe'...
Submodule path '../3rdparty/caffe': checked out '9453eb00f6073ab9091f8a3a973538c7bdcb6785'
Switched to branch 'master'
Your branch is up-to-date with 'origin/master'.
-- Caffe will be built from source now.
-- Download the models.
-- Downloading BODY_25 model...
-- NOTE: This process might take several minutes depending on your internet connection.
-- Not downloading body (COCO) model
-- Not downloading body (MPI) model
-- Downloading face model...
-- NOTE: This process might take several minutes depending on your internet connection.
-- Downloading hand model...
-- NOTE: This process might take several minutes depending on your internet connection.
-- Models Downloaded.
-- Configuring done
-- Generating done
-- Build files have been written to: /dados/Fontes/OSS/openpose/build


Após a configuração ambiental para compilação dos fontes, efetue o comando make:

make
Scanning dependencies of target openpose_caffe
[ 12%] Creating directories for 'openpose_caffe'
[ 25%] No download step for 'openpose_caffe'
[ 37%] No patch step for 'openpose_caffe'
[ 50%] No update step for 'openpose_caffe'
[ 62%] Performing configure step for 'openpose_caffe'
-- The C compiler identification is GNU 4.8.5
-- The CXX compiler identification is GNU 4.8.5
-- 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
-- Detecting C compile features
-- Detecting C compile features - 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
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Looking for pthread.h
-- Looking for pthread.h - found
-- Looking for pthread_create
-- Looking for pthread_create - not found
-- Looking for pthread_create in pthreads
-- Looking for pthread_create in pthreads - not found
-- Looking for pthread_create in pthread
-- Looking for pthread_create in pthread - found
-- Found Threads: TRUE  
-- Boost version: 1.61.0
-- Found the following Boost libraries:
--   system
--   thread
--   filesystem
--   chrono
--   date_time
--   atomic
-- Found GFlags: /usr/include  
-- Found gflags  (include: /usr/include, library: /usr/lib64/libgflags.so)
-- Found Glog: /usr/include  
-- Found glog    (include: /usr/include, library: /usr/lib64/libglog.so)
-- Found Protobuf: /usr/lib64/libprotobuf.so  
-- Found PROTOBUF Compiler: /usr/bin/protoc
-- Found HDF5: /usr/lib64/libhdf5_hl.so;/usr/lib64/libhdf5.so;/usr/lib64/libpthread.so;/usr/lib64/libz.so;/usr/lib64/libdl.so;/usr/lib64/libm.so (found version "1.8.15") 
-- CUDA detected: 8.0
-- Found cuDNN: ver. 6.0.21 found (include: /usr/local/cuda-8.0/include, library: /usr/local/cuda-8.0/lib64/libcudnn.so)
-- Automatic GPU detection failed. Building for all known architectures.
-- Added CUDA NVCC flags for: sm_20 sm_21 sm_30 sm_35 sm_50 sm_60 sm_61
-- Found Atlas: /usr/include  
-- Found Atlas (include: /usr/include library: /usr/lib64/atlas/libatlas.a lapack: /usr/lib64/liblapack.so
-- Python interface is disabled or not all required dependencies found. Building without it...
-- Found Git: /usr/bin/git (found version "2.13.7") 
-- 
-- ******************* Caffe Configuration Summary *******************
-- General:
--   Version           :   1.0.0
--   Git               :   1.0-112-g9453eb00
--   System            :   Linux
--   C++ compiler      :   /usr/bin/c++
--   Release CXX flags :   -O3 -DNDEBUG -fPIC -Wall -Wno-sign-compare -Wno-uninitialized
--   Debug CXX flags   :   -g -fPIC -Wall -Wno-sign-compare -Wno-uninitialized
--   Build type        :   Release
-- 
--   BUILD_SHARED_LIBS :   ON
--   BUILD_python      :   OFF
--   BUILD_matlab      :   OFF
--   BUILD_docs        :   OFF
--   CPU_ONLY          :   OFF
--   USE_OPENCV        :   OFF
--   USE_LEVELDB       :   OFF
--   USE_LMDB          :   OFF
--   USE_NCCL          :   OFF
--   ALLOW_LMDB_NOLOCK :   OFF
-- 
-- Dependencies:
--   BLAS              :   Yes (Atlas)
--   Boost             :   Yes (ver. 1.61)
--   glog              :   Yes
--   gflags            :   Yes
--   protobuf          :   Yes (ver. 3.5.0)
--   CUDA              :   Yes (ver. 8.0)
-- 
-- NVIDIA CUDA:
--   Target GPU(s)     :   Auto
--   GPU arch(s)       :   sm_20 sm_21 sm_30 sm_35 sm_50 sm_60 sm_61
--   cuDNN             :   Yes (ver. 6.0.21)
-- 
-- Install:
--   Install path      :   /dados/Fontes/OSS/openpose/build/caffe
-- 

Agora, após a compilação, basta executar o comando openpose.bin presente na pasta bin/examples/openpose:

optirun ./build/examples/openpose/openpose.bin --image_dir /home/cabelo/Imagens/openpose/ --write_images /home/cabelo/Imagens/openpose/save/
Starting OpenPose demo...
Configuring OpenPose...
Starting thread(s)...
Auto-detecting all available GPUs... Detected 1 GPU(s), using 1 of them starting at GPU 0.
OpenPose demo successfully finished. Total time: 18.717633 seconds.
Autor: Alessandro de Oliveira Faria (cabelo@opensuse.org)
Embaixador openSUSE Linux America Latina
Membro openSUSE          http://pt.opensuse.org/Utilizador:Cabelo 
Membro Mozillians        https://mozillians.org/pt-BR/u/cabelo/
Membro Owasp             http://tinyurl.com/owasp-member
Membro Area31 HackerSpachttp://tinyurl.com/HackerSpace-Membere
Membro FOCA Linux        http://tinyurl.com/guia-foca-linux 
Membro Educatux          https://www.educatux.com.br/pessoas 
Membro Intel Innovator   https://tinyurl.com/intel-innovator 
Membro OpenCV            https://tinyurl.com/membro-opencv 
Membro Viva O Linux      https://www.vivaolinux.com.br/~cabelo 
Página anterior    

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

Babytrans, o Babylon for Linux

Biblioteca VBMcgi: Crie aplicações Web CGI em C++ com acesso ao banco Interbase/Firebird sem mistério

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

Membro da comunidade Viva O Linux na Espanha

LINCE - A biblioteca de visão artificial open source

Leitura recomendada

LivreNFE - O emissor Nfe open source para Linux

Substituindo a biblioteca conio.h no Linux usando ncurses curses.h

Ponteiros void na linguagem C (parte 2)

Tutorial OpenGL v2.0

Brincando com o editor HT

  
Comentários
[1] Comentário enviado por SamL em 11/11/2018 - 19:59h

Nossa, com essa tecnologia, eu imagino que dava até pra saber em quem está votando na urna eletrônica apenas filmando lateralmente a pessoa com um celular. Ou saber qual a senha digitada num caixa eletrônico apenas pegando de lado a posição da mão do indivíduo. Ou mesmo, usar na industria do cinema pra colocar os modelos 3D por cima da postura da pessoa, sem nem mesmo renderizar toda a cena antes, seria uma mão na roda pros diretores de filmes com CG.
____________________________________________
https://nerdki.blogspot.com/ acessa aí vai lá, é grátis!

[2] Comentário enviado por FurretUber em 12/11/2018 - 10:47h

Muito interessante o programa, a quantidade de usos possíveis é realmente enorme.

Como as pessoas (eu) não têm noção do hardware que tem, testei o OpenPose no meu notebook com Intel HD Graphics 520.

Em primeiro lugar ele não compilava por não ter CUDA, procurei no CMakeLists.txt e achei uma opção chamada GPU_MODE, e era checado CUDA, OPENCL e CPU_ONLY. Então usei:

cmake -DGPU_MODE=OPENCL ..

E consegui compilar uma versão que funciona no meu computador. Instalei o beignet (OpenCL 2.0) e testei com as imagens do exemplo. No seu caso o tempo requerido foi 18.717633 segundos. Com os mesmos exemplos, aqui foi preciso 352.795914 segundos, quase 19 vezes o tempo que você precisou. O início do processo utiliza apenas um núcleo de CPU, e somente no fim, por alguns segundos, é que a GPU é utilizada, não sei se é limitação do hardware ou a implementação do OpenCL no programa ou em suas dependências.

Você tem como compartilhar os resultados que você obteve das demonstrações? Eu gostaria de comparar com os que eu obtive.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts