Infra - Linux

Linux: Camera Kombat: Mortal Kombat ao vivo com WebCam

Camera Kombat é um projeto que utiliza recursos da biblioteca OpenCV, utilizada em aplicações de visão computacional. Com o processamento do vídeo ao vivo os movimentos realizados pelos jogadores são interpretados e convertidos em ação no jogo. Neste artigo veremos como funciona o projeto como um todo.

por Alessandro de Oliveira Faria



Introdução (como funciona)

Em primeiro lugar parabenizo os autores do projeto Fábio R. de Miranda, Luis Roberto Pereira de Paula e Renato Bonini Neto. O trabalho e a idéia foram excelentes, estou desenvolvendo pesquisas sobre visão computacional e pensava em desenvolver algo similar se um dia tivesse tempo disponível.

O trabalho de tratamento de imagens deste projeto ficou sobre responsabilidade das funções da biblioteca OpenCV. Para quem não sabe, OpenCV ou Open Source Computer Vision é uma biblioteca com mais de 500 funções de geração e manipulação de imagens, que ajuda os pesquisadores a desenvolverem aplicações de visão computacional, como o reconhecimento de face, de gestos, de formas ou objetos e atualmente o reconhecimento audiovisual. Desde o seu lançamento em 2000, a OpenCV presenciou mais de 500.000 downloads de código e atraiu mais de 5.000 membros inscritos para seu grupo de usuários.

Tentarei descrever um resumo de como funciona o projeto. Quando uma seqüencia dos movimentos com os braços são identificados, um objeto virtual (o poder) é disparado contra o adversário. O adversário deve se desviar deste objeto (poder) que caminha em sua direção.

As imagens são capturas de uma webcam, analisadas, processadas e exibidas no monitor. Na inicialização o sistema captura uma imagem para processar os elementos e/ou objetos estáticos presente na cena.

Depois de definido o fundo capturado inicialmente pela webcam, o processo de subtração acontece pixel a pixel com os quadros extraídos do vídeo ao vivo. Logo após são localizados as regiões cabeça, mãos, pés e centro de massa.

Ao detectar todos os pontos, os gestos devem ser identificados. Para isto verifica-se o ângulo formado pela abertura do braço e distância da altura da mão comparado a cabeça. Na figura abaixo, reparem que os braços ligeiramente abertos não caracterizam socos, já com o braço inteiramente aberto é reconhecido como um soco.

Agora chega de historinha e vamos descer o dedo para o teclado ;-) Download e instalação da biblioteca OpenCV

Para instalar a biblioteca a partir do código fonte, baixe o pacote .tar.gz, descompacte e execute os tradicionais comandos de magia negra ./configure, make e make install, como no exemplo abaixo.

# wget http://easynews.dl.sourceforge.net/sourceforge/opencvlibrary/opencv-1.0.0.tar.gz
# tar -zxvf opencv-1.0.0.tar.gz
# cd opencv-1.0.0
# ./configure


Se todas as dependências foram satisfeitas e tudo estiver funcionando corretamente, teremos uma tela similar ao resultado logo abaixo: General configuration ================================================ Compiler: g++ CXXFLAGS: -Wall -fno-rtti -pipe -O3 -g -march=i686 -ffast-math -fomit-frame-pointer Install path: /usr/local HighGUI configuration ================================================ Windowing system -------------- Use Carbon / Mac OS X: no Use gtk+ 2.x: yes Use gthread: yes Image I/O --------------------- Use libjpeg: yes Use zlib: yes Use libpng: yes Use libtiff: yes Use libjasper: yes Use libIlmImf: no Video I/O --------------------- Use QuickTime / Mac OS X: no Use xine: no Use ffmpeg: no Use dc1394 & raw1394: no Use v4l: yes Use v4l2: yes Wrappers for other languages ========================================= SWIG Python yes Additional build settings ============================================ Build demo apps yes Now run make ... Agora execute os mágicos comandos make e make install.

# make
# make install


Se preferir instalar os pacotes .rpm, abaixo as instruções de download e instalação:

# wget http://nomis80.org/rpms/fedora/4/opencv-0.9.7-3.i386.rpm
# wget http://nomis80.org/rpms/fedora/4/opencv-devel-0.9.7-3.i386.rpm
# rpm -ivh opencv-0.9.7-3.i386.rpm
# rpm -ivh opencv-devel-0.9.7-3.i386.rpm

Se você chegou até aqui parabéns, pois o seu sistema está preparado para compilar o projeto Camera-Kombat.

Download e compilação do Camera Kombat

Não vou ficar enrolando com textos cansativos, o download dever ser efetuado no repositório SVN do sourceforge. Abaixo as instruções para a extração do código-fonte.

# svn co https://svn.sourceforge.net/svnroot/camera-kombat camera-kombat 
A    camera-kombat/build_all.sh
A    camera-kombat/camera_kombat_sem_flip.c
A    camera-kombat/camera_kombat.c
A    camera-kombat/telas
A    camera-kombat/telas/ponte_1_255.jpg
A    camera-kombat/telas/metro_255.jpg
A    camera-kombat/telas/street_255.jpg
A    camera-kombat/telas/calabouco_255.jpg
A    camera-kombat/telas/bank_255.jpg
A    camera-kombat/telas/belltower_255.jpg
A    camera-kombat/telas/cemiterio_255.jpg
A    camera-kombat/cubo.c
A    camera-kombat/bola_sem_flip.c
A    camera-kombat/bola.c
Gerado cópia de trabalho para revisão 2.

# cd camera-kombat 

Execute o script build_all.sh para compilar todos os fontes presente no diretório.

# sh build_all.sh
compiling bola.c
compiling bola_sem_flip.c
compiling camera_kombat.c
compiling camera_kombat_sem_flip.c
compiling cubo.c 

Se algo sair errado, como no meu caso, troque o path dos arquivos de cabeçalho da biblioteca OpenCV no script build_all.sh e tente novamente.

Troque de:

g++ -I/usr/local/include/opencv

Para:

g++ -I/usr/include/opencv/

Agora vamos ao show, execute o programa camera-kombat como no exemplo abaixo:

$ ./camera-kombat

Pronto, divirta-se à vontade. Abaixo a relação das teclas de função:

[B] - Determina um novo fundo estático (sem os jogadores presentes);
[P] - Captura a imagem e salva em disco;
[T] - Habilita/Desabilita o modo debug;
[F] - Muda a tela de fundo (cenário);
[N] - Novo jogo.

Abaixo alguns screenshots:

"O próximo grande salto evolutivo da humanidade será a descoberta de que cooperar é melhor que competir"

Prof. Pietro Ubaldi

Sobre o autor: http://www.netitec.com.br/alessandro

Alessandro de Oliveira Faria

Alessandro de Oliveira Faria - Sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.