Sei sulla pagina 1di 11

Anais do Conic-Semesp. Volume 1, 2013 - Faculdade Anhanguera de Campinas - Unidade 3.

ISSN 2357-8904

TTULO: APLICAO PARA RECONHECIMENTO DE GESTOS, USANDO A CAMADA INFERIOR


OPENCV
CATEGORIA: EM ANDAMENTO
REA: ENGENHARIAS E TECNOLOGIAS
SUBREA: COMPUTAO E INFORMTICA

INSTITUIO: FACULDADE ANHANGUERA DE BELO HORIZONTE

AUTOR(ES): WARLEM LUCIO LIMA, AUGUSTO SRGIO TEIXEIRA REIS


ORIENTADOR(ES): SANDRO RENATO DIAS

Aplicao para reconhecimento de gestos, usando a camada inferior OpenCV


Resumo
Este artigo consiste no estudo detalhado da biblioteca OpenCV para o desenvolvimento
de um software que compreenda os movimentos e gestos de um usurio a fim de
realizar uma traduo dos sinais de LIBRAS para Portugus e vice-e-versa,
facilitando a comunicao e interao entre os surdos e as pessoas no portadoras da
deficincia, promovendo a integrao e estreitando o relacionamento desses dois
grupos de convvio. De uma forma simples e barata e sem que haja a necessidade da
intermediao de um intrprete.
Palavras-chave: LIBRAS, OPENCV, WEBCAM, Reconhecimentos de gestos.

Introduo
Com o avano da tecnologia viso computacional que hoje se encontra presente em
celulares, televises e tablets melhorando a forma de interao homem-mquina,
podem notar que pouco se constri para melhorar a relao do homem consigo
mesmo. No convvio social, os Surdos sofrem com a dificuldade de se comunicar com
aqueles que no so, pois pequeno o nmero de indivduos sem a deficincia que se
dispe a estudar a Linguagem Brasileira de Sinais (LIBRAS). Este projeto parte da
necessidade de elaborar uma aplicao computacional de baixo custo que venha
integrar os indivduos surdos e no surdos sem maiores problemas, facilitando o
convvio particular entre seus parentes e amigos, e o convvio pblico, tais como aulas,
eventos, palestras e em estabelecimentos comerciais.
Segundo Siola (2010), ele demostra que possvel usando a biblioteca OpenCV
desenvolver uma aplicao que compreenda os sinais previamente armazenados, e
conforme Maregoni (2011), todos os movimentos necessrios para interpretao de
LIBRAS podem ser capturados, desde que usadas as funes corretas dependendo de
cada situao em que as imagens produzidas pelo dispositivo de vdeo so
encontradas.

Expresses faciais tambm fazem parte da linguagem de sinais, conforme


mostrado em LIBRAS em contexto: Curso bsico: Livro do estudante (FELIPE, 2012,
p.34). A aplicao dever perceber o rosto e mos, bem como a distncia entre eles no
momento de execuo do movimento em Libras.
Existem alguns exemplos de cdigos que reconhecem o rosto humano usando a
biblioteca OpenCV. Alguns dos cdigos mais enxutos, so de autoria de Thakkar
(2012), que alm de reconhecer partes do corpo humano, tambm consegue indicar
atravs de um retngulo na imagem, a parte do corpo humano reconhecida.
A biblioteca OpenCV (Open Source Computer Vision) foi desenvolvida na
linguagem C/C++. uma biblioteca de cdigo aberto e foi desenvolvida inicialmente
pela Intel Corporation. O OpenCV contem ferramentas de interpretao de imagens,
como a anlise de movimentos e reconhecimento de padres. Tal biblioteca pode ser
usada em diversas linguagens de programao como Java, Python, Visual Basic,
Android, C/C++.
O projeto ser desenvolvido em C/C++ e o seu principal foco a captura de
imagens, mais especificadamente, imagens do rosto, mos e dedos. Sero captados
os movimentos com as mos em Libras para a criao de uma base de dados que ser
usada no processo de traduo de Libras/Portugus.
Uma vez entendido o funcionamento do OpenCV, as possibilidades so infinitas,
um bom exemplo o desenvolvimento de aplicaes usando OpenCV para dispositivos
mveis.
O hardware que ser utilizado para o desenvolvimento ser uma cmera HD
(High Definition ou Alta Definio), em especfico, ser utilizada a cmera de modelo
C270 de 1280 x 720 pixels do fabricante Logitech.
Objetivos
O principal objetivo deste estudo e pesquisa, obter um conhecimento profundo da
biblioteca OpenCV e o desenvolvimento de uma aplicao que utilize tal biblioteca para
capturar movimentos e comparar os mesmos com os movimentos pertencentes
linguagem LIBRAS.

Descobrir como usar as funes disponveis nesta biblioteca para soluo de


todas as necessidades da compreenso de sinais de LIBRAS, e analisar at qual ponto
ser interessante e vivel a utilizao de cada uma delas.
Metodologia
O desenvolvimento consistir em obteno de exemplo de cdigos e testes das
funes contidas na biblioteca OPENCV, pois pouco se acha na literatura brasileira
devido particularidade do projeto que consiste em interpretar sinais de LIBRAS, com
o intuito de melhor avaliar a aplicao e condies para leitura e captura dos
movimentos.
Essa avaliao se dar com a captura de diferentes vdeos, de uma Webcam de
alta resoluo, que tenham os mesmos sinais e utilizem mos e rosto feitos por
pessoas e ambientes diferentes. Para ter o maior numero de diversidades com o
objetivo de alcanar as mesmas interpretaes de sinais correspondentes, comparando
o tempo gasto em cada momento.
O OPENCV dentre outras bibliotecas se destaca pelo uso de vdeos em
formatos comuns, gravados a partir de qualquer dispositivo de gravao de vdeo, tais
como Webcam, Celular, Cmera de vdeo e Placa de Captura de Vdeo. Escrito para
vrias linguagens de programao, possibilitando a utilizao em vrias plataformas.
Com base nas pesquisas realizadas at ento, ser desenvolvido em c++ pela
vasta utilizao, por ser uma linguagem simples, bem discutida e com uma diversidade
maior de literatura disponvel. Isso nos ajudar na dedicao compreenso do
reconhecimento feito pela biblioteca e como diferenciar o movimento junto ao corpo do
usurio.
Desenvolvimento
Como o OpenCV se trata de uma biblioteca externa, que no nativa de nenhuma IDE
de programao, necessrio adquirir o arquivo base no site e extra-los de
preferncia na raiz do sistema. Por no ser escrita para um tipo especfico de IDE
preciso criar os arquivos que sero usados de acordo com o tipo de sistema, x86 e x64,

e a IDE, que neste caso ser o Visual Studio 2012. No site oficial do OpenCV h um
tutorial completo, mas o que ser mostrado um resumo do que realmente preciso
para que as bibliotecas funcionem corretamente.
Definido o tipo de sistema e IDE necessrio utilizar o programa CMake para
criar a biblioteca compatvel.
No campo referente ao Where is the source code: no CMake basta indicar o
local onde foi extrado o OpenCV, e no prximo Where to build the binaries:, onde os
arquivos da nova biblioteca compatvel sero criados.
Agora preciso usar os arquivos indicados para gerar o projeto que criar a
biblioteca compatvel. Na parte inferior do programa existe o boto Configure, que ao
ser clicado ir executar o processo de configurao dos arquivos conforme a IDE
desejada. Caso haja algum erro nesta etapa, clique no boto Configure novamente.
Feito isso, basta gerar o pressionando o boto Generate.
Dentro do diretrio onde foram gerados os arquivos, existe um projeto do Visual
Studio, ele quem criar os arquivos da biblioteca com a ajuda da IDE. Basta abri-lo, e
dentro do Visual Studio compilar o arquivo BUILD_ALL, posteriormente o arquivo
denominado INSTALL. Observe que na parte superior da interface da IDE existe um
campo com o nome DEBUG, os arquivos criados para a biblioteca at agora s foram
criados para este tipo e preciso tambm criar para o tipo RELEASE, selecione na
lista suspensa e repita o processo de compilar o arquivo BUILD_ALL e ao terminar,
compilar o INSTALL. Aps essa etapa, a biblioteca do OpenCV ser compatvel com o
seu sistema, estar pronta e localizada dentro do diretrio Install, onde se encontra os
arquivos criado pelo CMake, e para executar um programa que a utilize bastar ter na
mquina os arquivos DLL da biblioteca, que podem ser facilmente includos
manualmente na mesma pasta do executvel gerado pelo projeto que ser criado, ou
inseridos no diretrio sistem32 do Windows x86 ou syswow64 do Windows x64.
Para facilitar a criao e execuo dos programas que utilizaro os arquivos .dll,
necessrio incluir nas variveis de ambiente do Windows o caminho do diretrio onde
se encontram.
Ao criar um novo projeto para o OpenCV dever ser alterado na Janela
Property Manager, que se encontra no menu View, a referncia das bibliotecas

existentes para a nova biblioteca gerada. D um duplo clique em Debug|Win32 e na


lista de opes que ser exibido do lado esquerdo, selecionar o item Linker, nele
existem vrias opes, selecione o item AllOptions e do lado direito ter a opo
AdditionalDependencies onde dever constar o nome dos ativos da biblioteca
OpenCV, no campo que h do lado direito desta opo insira a lista a seguir:
opencv_calib3d245d.lib;
opencv_contrib245d.lib;
opencv_core245d.lib;
opencv_features2d245d.lib;
opencv_flann245d.lib;
opencv_gpu245d.lib;
opencv_highgui245d.lib;
opencv_imgproc245d.lib;
opencv_legacy245d.lib;
opencv_ml245d.lib;
opencv_nonfree245d.lib;
opencv_objdetect245d.lib;
opencv_photo245d.lib;
opencv_stitching245d.lib;
opencv_superres245d.lib;
opencv_ts245d.lib;
opencv_video245d.lib;
opencv_videostab245d.lib;

Lembrado que estes arquivos so da verso 2.45 do OpenCV, caso seja usado
uma verso mais recente pegue a lista dos novos arquivos na pasta Install\Lib de
acordo com os arquivos contidos na pasta e a lista sugerida, lembrando que os
arquivos com a letra d no final do nome so referentes ao Debug e os que no tm
so do Release.
Logo abaixo da opo anterior selecionada, h Additional Library Directories
onde dever ser colocado o caminho completo da pasta Install\Lib que se encontra na
raiz dentro da pasta aonde foram gerados os arquivos pelo CMake.

Na opo C/C++ da janela Debug PropertyPages em AllOptions h do lado


direito a Additional Include Directories que deve incluir o caminho da pasta do
OpenCV\build\x86\vc10\lib.
Estes passos devem se repetir para a Release|Win32 da janela Property
Manager. A lista dos arquivos para a biblioteca do Release que deve ser inserida em
AdditionalDependencies a mesma citada cima retirando a letra d de cada nome.
Para se certificar que todas as configuraes foram realizadas com sucesso,
basta realizar um teste incluindo o cdigo criado por Thakkar (2012) na IDE:
Executando o cdigo da figura 1 possvel ativar a webcam HD e mostrar as
imagens capturadas em uma janela.
Para a leitura de sinais de LIBRAS ser necessrio o reconhecimento da posio
do rosto e das mos do interprete, e a partir deste reconhecimento a leitura do sinal de
acordo com os movimentos realizados.
Com o exemplo de cdigo da figura 1 sugerido possvel entender melhor como
a biblioteca trabalha com as imagens capturadas. Usando como auxlio
documentao do OpenCV, possvel compreender que a varivel do tipo CvCapture,
recebe da funo cvCaptureFromCam(), um frame do vdeo capturado pela Webcam.
possvel tambm capturar de um arquivo de vdeo do tipo AVI, para isso necessrio o
uso da funo cvCaptureFromAVI(). Para que seja possvel trabalhar com o frame da
imagem capturada na varivel do tipo CvCapture necessrio convert-la para o tipo
IplImage.

#include "stdafx.h"
#include "opencv2/highgui/highgui.hpp"
int main( int argc, const char** argv ){
CvCapture* capture;
IplImage* frame = 0;
while(true){
capture = cvCaptureFromCAM(1);
frame = cvQueryFrame( capture );
cvNamedWindow("Sample Program", CV_WINDOW_AUTOSIZE);
cvShowImage("Sample Program", frame);
int c = cvWaitKey(10);
if( (char)c == 27 ) { exit(0); }
}
cvReleaseImage(&frame);
return0;
}
Figura 1 Cdigo que ativa WebCam e abre uma janela para mostrar o contedo da varivel
frame.

Atravs da funo cvQueryFrame() recupera-se as informaes a partir do frame


em bits e preenche todas as variveis necessrias da estrutura IplImage. Atravs de
um lao de repetio com a funo cvShowImage() possvel exibir cada valor desta
estrutura de dados dando a percepo de um vdeo contnuo, sendo preciso passar
como parmetro para esta funo o nome da janela onde ser exibido o vdeo e o
nome da varivel IplImage.
Quando a estrutura IplImage recebe os dados possvel comparar seus valores
para a deteco de objetos e/ou partes do corpo humano passando-a como parmetro
funo pFaceRectSeq(), como demostrado no exemplo da Figura 2 criado por
Thakkar(2012), que em um dos seus argumentos recebe outra varivel do tipo
CvHaarClassifierCascade contendo informaes de um arquivo XML, a Figura 3 um
exemplo demostrando como declarada a varivel sua ligao com este arquivo.
neste tipo de arquivo que os dados caractersticos de um objeto so armazenados para
consultas futuras. O prprio OpenCV possui dados referentes s caractersticas gerais
de rostos, olhos, orelhas...

Void detectAndDisplay(IplImage* frame )


{
CvSeq * pFaceRectSeq;
pStorageface = cvCreateMemStorage(0);
cvClearMemStorage(pStorageface);
pFaceRectSeq = cvHaarDetectObjects
(frame, face_cascade, pStorageface,1.1,3,0,cvSize(40, 40));
const char * DISPLAY_WINDOW = "HaarWindow";
int i;
cvNamedWindow(DISPLAY_WINDOW, CV_WINDOW_AUTOSIZE);
for(i=0;i<(pFaceRectSeq? pFaceRectSeq->total:0); i++ ){
CvRect* r = (CvRect*)cvGetSeqElem(pFaceRectSeq, i);
CvPoint pt1 = { r->x, r->y };
CvPoint pt2 = { r->x + r->width, r->y + r->height };
cvRectangle(frame, pt1, pt2, CV_RGB(255,255,6), 3, 4, 0);
}
cvShowImage(DISPLAY_WINDOW, frame);
}
Figura 2 Funo detectAndDisplay() que mostra na janela do vdeo o objeto reconhecido.
CvHaarClassifierCascade face_cascade =
(CvHaarClassifierCascade
*)cvLoad("C:\\opencv\\data\\haarcascades\\haarc
ascade_frontalface_alt_tree.xml", 0 , 0, 0);
Figura 3 Exemplo de declarao da varivel do tipo CvHaarClassifierCascade.

Baseado nestes exemplos ser criado um cdigo que possa capturar rosto,
mos, dedos e seus respectivos movimentos.
Resultados
Estudos sobre o funcionamento do OpenCV foram e esto sendo realizados. A
compreenso do uso de diversas funes nativas da biblioteca, bem como seus
parmetros, chamadas e funcionalidade de um modo geral.
Conforme as figuras 4 e 5, a partir do conhecimento adquirido, conseguiu se
usar o OpenCV para detectar partes do corpo humano, etapa de suma importncia
para o alcance do objetivo principal do projeto.

Figura 4 - Deteco do rosto.

Figura 5 - Deteco da mo.

Consideraes Finais
Apesar do grau de dificuldade encontrado para o funcionamento da biblioteca OpenCV
nos diferentes tipos de sistema(x86 e x64), os resultados foram satisfatrios devido ao
sucesso na execuo dos cdigos usados como exemplos.

O sucesso no reconhecimento do rosto e mo, mesmo com rudo de culos e


fones, d respaldo para a continuidade da pesquisa, projetando grandes resultados que
podem ser obtidos com o estudo detalhado da biblioteca.

Fontes Consultadas
AJA Associao do Jovem Aprendiz. O que
<http://www.libras.org.br/libras.php.>Acesso em 26. nov. 2012.

LIBRAS.

Disponvel

em:

FELIPE, Tanya A. LIBRAS em contexto: Curso bsico: Livro do estudante. 8. ed. Rio de
Janeiro: WalPrint, 2007.
OpenCV. Disponvel em: <http://opencv.org/>. Acesso em: 25. Nov. 2012. OpenCV 2.0 C
Refence. Disponvel em: <http://opencv.willowgarage.com/documentation/index.html> . Acesso
em:15 mar. 2013.
CMake. Disponvel em: <http://www.cmake.org/cmake/resources/software.html>. Acesso
em: 15 mar. 2013.
SIOLA, Felipe Breve. Desenvolvimento de um software para reconhecimento de sinais em
LIBRAS atravs de vdeo, 2010. Tese (Graduao em Cincia da Computao) Curso
Bacharelado em Cincia da Computao, Universidade Federal do ABC, 2010. Disponvel em:
<http://bcc.ufabc.edu.br/docs/PG3-Final-FelipeSiola-Q3-2010.pdf>. Acesso em: 01 abr. 2013.
MAREGONI, Maurcio e STRINGHINI, Denise. Tutorial: Introduo Viso Computacional
usando
OpenCV,
2011.
Disponvel
em:
<http://seer.ufrgs.br/index.php/rita/article/viewFile/rita_v16_n1_p125/7289>. Acesso em: 02 abr.
2013.

THAKKAR, Karan. Using OpenCV 2.4.2 with Visual studio 2012 on Windows, 2012.
Disponvel em: <http://karanjthakkar.wordpress.com/2012/11/21/usin-opencv-2-4-2-with-visualstudio-2012-on-windows-7-64-bit/>. Acesso em: 30 jun. 2013.
10

Potrebbero piacerti anche