SlideShare ist ein Scribd-Unternehmen logo
1 von 11
Downloaden Sie, um offline zu lesen
Detecção de Movimento - Criação de instrumento
musical
Aristidis Ornai1
,Emanuel Santos2
,Luís Pereira4
,Patrício Fernandes3
1
Universidade de Évora
m6463@alunos.uevora.pt
2
Universidade de Évora
m7565@alunos.uevora.pt
3
Universidade de Évora
m8302@alunos.uevora.pt
4
Universidade de Évora
m8279@alunos.uevora.pt
Resumo Já tocou algum instrumento musical? E alguma vez pensou em
tocar um instrumento musical sem ele estar fisicamente presente? Parece
impossível mas na verdade não é. Com este artigo pretendemos mos-
trar as inúmeras funcionalidades que é possível desenvolver com apenas
uma webcam. neste artigo iremos mostrar como transformar uma web-
cam num instrumento musical, através da captura de movimentos de um
utilizador.
Keywords. Motion Detection, Webcam, Intrumentos Musicais, Inter-
faces, Imagem
1 Introdução
Uma "webcam"é uma câmara de vídeo que produz imagem em tempo real
para um computador, por via USB, ethernet ou Wi-Fi.
O desenvolvimento da primeira "webcam"realizou-se na Universidade de
Cambridge, no departamento de Informática em 1991. A primeira imagem cap-
turada pela webcam foi então a famosa "Trojan Room coffee pot"(Figura 1).
Este café foi a inspiração para o desenvolvimento da webcam. Após dez anos
esta câmara foi finalmente desligada no dia 22 de Agosto de 2001, onde a última
imagem capturada é o momento em que a própria é desligada (Figura 2).
A primeira webcam comercializada foi a "QuickCam", em 1994. Foi produ-
zida pela empresa Connectix, que depois a vendeu-a à Logitech, em 1998. Esta
câmara apenas produzia imagens com resolução 320x240 pixéis, a 60 fps (frames
per second) em escala de cinza.
2 Aristidis Ornai1
,Emanuel Santos2
,Luís Pereira4
,Patrício Fernandes3
Figura 1. Primeira imagem capturada pela primeira webcam
2 WebCam Motion
"WebCam Motion"é um termo usado para descrever o processo de captura
de movimento com a webcam, traduzindo esse processo para um modelo digital.
Este processo é usado no dia-a-dia em operações militares, entretenimento, em
vários desportos e até em aplicações médicas. É também usado em visão compu-
tacional e robótica. No entanto, a área que mais utiliza a captura de movimentos
é sem dúvida o cinema.
3 Motion Capture
"Motion Capture"(ou captura de movimentos) é o processo de converter elec-
tronicamente os movimentos de uma pessoa para uma base de dados digital. Esta
base de dados é depois usada para produzir gráficos de animações em filmes, jo-
gos ou mesmo outras aplicações. Como esta captura deriva de movimentos de
uma pessoa real, as animações em filmes (Figura 3) e jogos são cada vez mais
realistas e feitas cada vez mais de um modo automático.
A "Facial Motion Capture"(ou captura de movimentos faciais) funciona de
modo idêntico à captura dos movimentos do resto do corpo, mas apresenta um
desafio maior á necessidade de utilizar equipamento com maior resolução. Isto
deve-se ao facto de existir um enorme número de expressões faciais possíveis de
esquematizar. É também necessário que o equipamento consiga capturar peque-
nos movimentos feitos por exemplo, pelos lábios ou pelos olhos. Uma simples
movimentação dos lábios pode diferenciar o estado emocional de uma pessoa, se
está contente, triste, séria, etc.
Detecção de Movimento - Criação de instrumento musical 3
Figura 2. Última imagem a ser capturada: a Webcam a ser desligada, em 2001
4 Motion Detection
4.1 Motionsrc
Existem várias abordagens sobre captura de movimentos numa webcam atra-
vés de stream de vídeo contínuo. Todas elas são baseadas na comparação entre
o frame actual do vídeo e o frame anterior ou entre uma imagem previamente
estabelecida no início do streaming, que é chamada de imagem de referência.
O programa "Motion_src"foi desenvolvido na plataforma AForge.NET, em
que a linguagem C# foi a utilizada para ser programado. A aplicação suporta
vários tipos de formato de vídeo, tais como AVI (para vídeos no Windows),
MJPEG (ou Motion JPEG) e qualquer formato da webcam local (do próprio
computador ou ligada por USB).
4.2 Algoritmo
Uma das abordagens mais utilizadas para a detecção de movimento é com-
parar o frame actual com um frame de referência. O modo de funcionamento
desta abordagem é feito através da comparação pixel a pixel.
Consideremos uma imagem como um eixo de coordenadas XY. Cada pixel vai
ser comparado com o pixel da frame de referência que esteja na mesma posição.
Por exemplo: se quisermos comparar o pixel da posição (5,20), este vai ser com-
parado com o pixel da posição (5,20) da frame de referência. Esta abordagem é
muito útil em termos de compressão de vídeo pois apenas é necessário estimar os
pixéis diferentes e escrever apenas as diferenças, não sendo necessário escrever o
frame totalmente de novo.
4 Aristidis Ornai1
,Emanuel Santos2
,Luís Pereira4
,Patrício Fernandes3
Figura 3. Exemplo de um "Motion Capture". Criação de uma personagem no filme
Lord of The Rings
4.3 Funcionamento
O "motion_src"assume logo no início do programa uma imagem RGB 24bpp
que é denominada como a imagem actual (image) e uma cópia em escala cinza
(currentFrame) e tem também uma frame de vídeo que é considerada como a
frame de referência também em escala cinza(backgroundFrame). Depois consi-
dera dois filtros (Difference , Threshold) que servem como filtros para considerar
as regiões de pixéis que contém diferenças.
// create filters
Difference differenceFilter = new Difference( );
IFilter thresholdFilter = new Threshold( 15 );
// set backgroud frame as an overlay for difference filter
Detecção de Movimento - Criação de instrumento musical 5
differenceFilter.OverlayImage = backgroundFrame;
// apply the filters
Bitmap tmp1 = differenceFilter.Apply( currentFrame );
Bitmap tmp2 = thresholdFilter.Apply( tmp1 );
A maior parte das câmaras produzem "ruído"nas imagens, o que faz com que
o programa assuma que existiu movimento numa região onde na realidade não
existiu. Para minimizar o ruído, o programa utiliza outro filtro (Erosion filter).
Assim é possível conseguir apenas as zonas onde existe realmente movimento.
// create filter
IFilter erosionFilter = new Erosion( );
// apply the filter
Bitmap tmp3 = erosionFilter.Apply( tmp2 );
Para que o utilizador perceba onde existe movimento, o programa "pinta"a
região de vermelho onde existe movimento. Assim o output produzido por este
programa é a imagem actual, com a zona onde existiu movimento contornada a
vermelho.
A aplicação permite quatro tipos de captura de movimentos:
– "MouseDetector1" (Figura 4): Este tipo de captura é considerado o stan-
dard da captura de movimentos. Respeitando os filtros implementados, ele
captura todos os movimentos existentes e pinta de vermelho a área onde
ocorreu movimento.
– "MouseDetector2" (Figura 5):Uma das principais desvantagens do sis-
tema de captura anterior, é de que ao fazer a comparação da frame actual
com a frame anterior, se alguém se mover lentamente, a área de movimento
capturada é muito reduzida ou até nula. Assim, apesar de existir movimento,
este não é capturado. Este sistema permite combater essa falha, fazendo a
comparação entre o frame actual e um frame inicialmente guardado, a que
chamamos o frame de referência. O filtro, ao ser iniciado, captura uma ima-
gem inicial que supõe ser a imagem default. Assim o sistema consegue reter
toda a área de movimento, independentemente da velocidade do movimento.
– "MouseDetector3" (Figura 6): Apesar de conseguir superar o problema
dos movimentos lentos, o processo anterior requer uma enorme quantidade
de recursos. Isto implica um atraso no processo de cálculo da captura da
região de movimento e, por consequente, um atraso no retorno da imagem
produzida pela aplicação. Assim um utilizador apenas vê a imagem repro-
duzida naquele momento alguns segundos depois.
O sistema 3 utiliza o mesmo método de captura do anterior, no entanto é
diferente na forma como trata a imagem. Neste caso, o sistema transforma
6 Aristidis Ornai1
,Emanuel Santos2
,Luís Pereira4
,Patrício Fernandes3
Figura 4. Exemplo de MouseDetector1
a zona de captura de movimento em formas geométricas. Isto permite a uti-
lização de menos recursos, o que torna o processo mais rápido e eficiente.
– "MouseDetector4" (Figura 7): Este tipo de captura é em tudo idêntico
à anterior no que toca à captura de movimento, no entanto a forma como
este é retornado é diferente. Ao capturar a zona de movimento, o sistema
retorna uma forma rectangular em torno da zona capturada. É uma técnica
que permite ao utilizador reconhecer fácilmente qualquer tipo de objecto que
se está a mover. Um exemplo prático para o uso desta técnica de captura é
a leitura do tráfego numa estrada, onde o sistema captura rapidamente uma
viatura que se movimente na mesma. Este método permite ainda a execução
em conjunto de outras aplicações para fazer tratamento de resultados.
5 Piano Player
O "Piano Player"é um pequeno programa implementado no nosso projecto.
Trata-se da parte esperimental do nosso projecto, sendo este constituído por um
mini-piano, onde cada tecla corresponde a uma nota musical.
Através de um processo que será explicado mais á frente, cada uma das teclas
poderá ser selecionada sempre que o utilizador entra com um ponteiro dentro
desta, fazendo com que esta emita um som. Isto permite que o utilizador possa
"tocar"piano através do movimento capturado pela webcam.
Detecção de Movimento - Criação de instrumento musical 7
Figura 5. Exemplo de MouseDetector2
5.1 Escolha da linguagem
Para efectuar este trabalho fizemos uma pesquisa por várias ferramentas e
linguagens que nos permitiriam o auxilio na detecção de movimentos. Encontra-
mos então duas opções que nos pareceram viáveis: da Java Media Framework
(JMF) que possui um conjunto de bibliotecas em Java que nos permitem cap-
turar imagem da webcam e sobre a qual encontramos um projecto com alguns
algoritmos implementados, ou a utilização da linguagem C# utilizando um dos
algoritmos implementados no projecto motion_detection e tratando a informa-
ção obtida por estes de modo a construir o piano.
Devido a problemas na configuração do JMF, optamos pela utilização da
linguagem C#.
5.2 Implementação
Para a implementação da nossa aplicação, escolhemos a utilização do al-
goritmo motion4 presente no projecto anteriormente referido. A escolha deste
algoritmo deve-se sobretudo á maior facilidade de manipulação do output rece-
bido pelo mesmo.
Para entender a nossa implementação é necessário entender a estrutura do
algoritmo motion4 a um nível mais profundo. Neste algoritmo temos que é nos
devolvido após a análise de cada frame um conjunto de rectângulos que indicam
8 Aristidis Ornai1
,Emanuel Santos2
,Luís Pereira4
,Patrício Fernandes3
Figura 6. Exemplo de MouseDetector3
os pontos que se movimentaram, isto é, os pontos que foram alterados em relação
à frame de referência. Uma alteração que fizemos por forma a diminuir o ruído,
foi não só limitar o número de pontos como também o tamanho dos mesmos.
Posteriormente criámos um rectângulo que irá representar um ponteiro. Este
ponteiro será utilizado do mesmo modo que um ponteiro de rato. Após o uti-
lizador conseguir o seu controlo movendo a sua mão dentro dele durante uns
segundos, este irá seguir a sua não.
Para a criação das teclas utilizamos também rectângulos com um contorno
vermelho ao longo do ecrã e que quando o ponteiro entra numa delas será emi-
tido um som.
Após o desenho das teclas, decidimos então estruturar o funcionamento do
nosso algoritmo da seguinte forma:
1. Desenhar o ponteiro (rectângulo branco do lado direito do ecrã);
2. Desenhar as teclas (rectângulos com contorno vermelho ao longo do ecrã);
3. Se o ponteiro ainda não está a seguir a nossa mão:
– Se um dos rectângulos intersecta o ponteiro, vamos incrementar uma va-
riável com o número de vezes que isso acontece;
– Se o número de vezes que um rectângulo intersectou o ponteiro for maior
que dez, então, vamos definir o ponteiro como sendo esse rectângulo e o
ponteiro passa a seguir o rectângulo que se encontra mais parecido a esse;
4. Caso contrário:
Detecção de Movimento - Criação de instrumento musical 9
Figura 7. Exemplo de MouseDetector4
– Obtem a posição do array de rectângulos no qual está o rectângulo mais
próximo do ponteiro na frame anteriormente analisada e define o novo pon-
teiro como sendo esse rectângulo;
– Se o ponteiro estiver a intersectar uma parte significativa de uma tecla e
esta não tiver sido intersectada na frame de referência vamos emitir um som;
– Se o ponteiro na frame anterior intersectou uma tecla e agora não a está
a intersectar então vamos indicar que a tecla já não está a ser intersectada;
– Se o ponteiro estiver a intersectar uma parte significativa de uma tecla
e esta tiver sido intersectada na frame de referência, não fazemos nada, de
modo a apenas ser emitido um som quando o ponteiro que estava fora da
tecla entrar na tecla;
De modo a que seja possível emitir o som correspondente a cada tecla, foi ne-
cessário obter um conjunto de ficheiros de som correspondente a nota musical.
5.3 Testes efectuados e resultados
Efectuamos vários testes quer no desenvolvimento do nosso projecto, quer
após o mesmo para verificarmos o desempenho da nossa aplicação. Assim, veri-
ficamos alguns aspectos importantes.
Antes de mais é de referir que apesar das tentativas de diminuição do ruído
na imagem, num ambiente não controlado este acaba por ser grande o que por
10 Aristidis Ornai1
,Emanuel Santos2
,Luís Pereira4
,Patrício Fernandes3
vezes poderá comprometer o bom desempenho do programa. No entanto, tendo
algus cuidados, como ter uma parede por trás onde nada se move ou uma folha
branca e interagindo com o programa utilizando apenas um dedo ou uma caneta
ou ponteiro, o programa tem um desempenho aceitável.
6 Estado da Arte
Existem actualmente várias áreas que utilizam aplicações com recurso ao uso
da detecção de movimento por webcam. Na pesquisa que efectuamos encontra-
mos vários desses exemplos, sendo uns para efeitos mais experimentais e científi-
cos, outros para aplicações lúdicas e outros ainda com uma aplicação funcional.
Assim, na nossa opinião um dos melhores programas para detecção de movi-
mento foi aquele que Martin Tosas apresenta na sua tese de doutoramento deno-
minada "Visual Articulated Hand Tracking for Interactive Surfaces"que visa a
implementação de uma interface utilizando "hand-tracking"denominada de VTS
(Visual Touch Screen), a qual é baseada num algoritmo proposto por Blake e
Isard em 1998.
A terceira versão do VTS encontra-se actualmente em desenvolvimento.
É ainda de referir que existe um conjunto de ferramentas que podem auxiliar
o desenvolvimento deste tipo de aplicações, entre as quais o JMF que se trata
de um conjunto de bibliotecas em Java que permite a interacção com conteúdo
multimédia (som e imagem). Em C# existe também um vasto conjunto de bibli-
otecas que nos permitem a interacção com a webcam e o tratamento de imagem
e som.
No entanto, ainda há muito trabalho a ser feito, por forma não só a facilitar
o desenvolvimento deste tipo de aplicações e da instalação das frameworks ne-
cessárias para o desenvolvimento das mesmas, como também de criar aplicações
que sejam úteis aos utilizadores.
7 Conclusão
Após o desenvolvimento do nosso trabalho, após a análise do mesmo e das
tecnologias a ele associado, podemos obter algumas conclusões que consideramos
importantes:
– A interacção pessoa-máquina através do uso da detecção de movimentos é
bastante atractiva e pode trazer para o utilizador uma maior facilidade na
utilização das aplicações e até uma maior motivação para o uso das mesmas.
Assim, têm surgido várias aplicações deste género quer a nível de jogos,
robótica, entre outros;
– Outra área no qual a detecção de movimentos pela webcam pode ser útil é
na inclusão digital de pessoas com dificuldades de movimentos como é o caso
de tetraplégicos. Para tal, foi desenvolvida uma aplicação, o HeadMouse, que
Detecção de Movimento - Criação de instrumento musical 11
permite que estes interajam com o computador através dos movimentos dos
olhos;
– A aplicação da detecção de movimentos na construção de instrumentos mu-
sicais virtuais é algo não muito visto mas que no entanto parece ser algo
interessante e que poderá ser utilizado para efeitos não só lúdicos como
também de aprendizagem desses mesmos instrumentos através duma forma
divertida e estimulante de aprender;
– Consideramos ainda que um dos aspectos mais complexos na detecção de
movimentos é o tratamento do ruído. Este foi como já referimos anterior-
mente um dos pontos mais complicados de tratar no nosso projecto e o qual
não conseguimos tratar na sua totalidade. Assim, consideramos que um dos
aspectos principais a melhorar é a diminuição do ruído possivelmente através
da aplicação de algum algoritmo mais eficiente para esse fim;
– Apesar de ainda existirem aspectos que podem ser melhorados pensamos
que em geral os objectivos foram cumpridos na medida em que conseguimos
implementar uma interface que permite a interacção através da webcam com
teclas virtual.
Referências
1. Lejos vision system. http://homepage.ntlworld.com/lawrie.griffiths/vision.
html, (Acedido a 13 de Julho de 2011)
2. Breve, F.: Inteligência de enxames. http://en.wikipedia.org/wiki/Motion_
capture (2007), (Acedido a 13 de Julho de 2011)
3. Kirillov, A.: Motion detection algorithms. http://www.codeproject.com/KB/
audio-video/Motion_Detection.aspx (Mar 2007), (Acedido a 13 de Julho de 2011)
4. Lavrsen, K.: Motion web. http://www.lavrsen.dk/foswiki/bin/view/Motion/
WebHome (Feb 2011), (Acedido a 13 de Julho de 2011)
5. Rzeszutek, K.: Motion detection - java + jmf. http://www.darnok.org/
programming/motion-detection/, (Acedido a 13 de Julho de 2011)
6. Tomasevic, P.: Versatile webcam c# library. http://www.codeproject.com/KB/
miscctrl/webcam_c_sharp.aspx (Nov 2010), (Acedido a 13 de Julho de 2011)
7. Tosas, M.: Visual articulated hand tracking for interactive surfaces. http://www.
mtosas.net/thesis.pdf (2006), (Acedido a 13 de Julho de 2011)
8. Wikipedia: Webcam. http://en.wikipedia.org/wiki/Webcam (Jul 2011), (Acedido
a 13 de Julho de 2011)

Weitere ähnliche Inhalte

Ähnlich wie Detecção de Movimento - Criação de instrumento musical

Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinalAlmerindo Rehem
 
Imaq Usb Snap P1
Imaq Usb Snap P1Imaq Usb Snap P1
Imaq Usb Snap P1Joao Kogler
 
Detecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLPDetecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLPAdilmar Dantas
 
Suportes e Ferramentas de Imagem módulo 4 CGAV
Suportes e Ferramentas de Imagem módulo 4 CGAVSuportes e Ferramentas de Imagem módulo 4 CGAV
Suportes e Ferramentas de Imagem módulo 4 CGAVAnacatgarrido
 
18.ago ouro i 11.15_463_copel-d
18.ago ouro i 11.15_463_copel-d18.ago ouro i 11.15_463_copel-d
18.ago ouro i 11.15_463_copel-ditgfiles
 
Dicionário da fotografia
Dicionário da fotografiaDicionário da fotografia
Dicionário da fotografiaYgor Castro
 
Macroscop geral (About Macroscop VMS in Portuguese)
Macroscop geral (About Macroscop VMS in Portuguese)Macroscop geral (About Macroscop VMS in Portuguese)
Macroscop geral (About Macroscop VMS in Portuguese)Macroscop
 
06 breve histórico do action script - Flash 8
06 breve histórico do action script - Flash 806 breve histórico do action script - Flash 8
06 breve histórico do action script - Flash 8Reuel Lopes
 
Realidade aumentada 8043
Realidade aumentada 8043Realidade aumentada 8043
Realidade aumentada 8043rrrquelinha
 
Apostila sobre cameras de tv
Apostila sobre cameras de tvApostila sobre cameras de tv
Apostila sobre cameras de tvThiago Aguiar
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios BásicosThiago Aguiar
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios BásicosThiago Aguiar
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios BásicosThiago Aguiar
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios BásicosThiago Aguiar
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios BásicosThiago Aguiar
 
Equipamentos analógicos e digitais
Equipamentos analógicos e digitaisEquipamentos analógicos e digitais
Equipamentos analógicos e digitaisRicardo Martins
 

Ähnlich wie Detecção de Movimento - Criação de instrumento musical (20)

Apresentacao minicursofinal
Apresentacao minicursofinalApresentacao minicursofinal
Apresentacao minicursofinal
 
Imaq Usb Snap P1
Imaq Usb Snap P1Imaq Usb Snap P1
Imaq Usb Snap P1
 
11477 41952-1-pb
11477 41952-1-pb11477 41952-1-pb
11477 41952-1-pb
 
Detecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLPDetecção de Faces - Redes Neurais *MLP
Detecção de Faces - Redes Neurais *MLP
 
Suportes e Ferramentas de Imagem módulo 4 CGAV
Suportes e Ferramentas de Imagem módulo 4 CGAVSuportes e Ferramentas de Imagem módulo 4 CGAV
Suportes e Ferramentas de Imagem módulo 4 CGAV
 
18.ago ouro i 11.15_463_copel-d
18.ago ouro i 11.15_463_copel-d18.ago ouro i 11.15_463_copel-d
18.ago ouro i 11.15_463_copel-d
 
Artigo_Final
Artigo_FinalArtigo_Final
Artigo_Final
 
Dicionário da fotografia
Dicionário da fotografiaDicionário da fotografia
Dicionário da fotografia
 
Macroscop geral (About Macroscop VMS in Portuguese)
Macroscop geral (About Macroscop VMS in Portuguese)Macroscop geral (About Macroscop VMS in Portuguese)
Macroscop geral (About Macroscop VMS in Portuguese)
 
06 breve histórico do action script - Flash 8
06 breve histórico do action script - Flash 806 breve histórico do action script - Flash 8
06 breve histórico do action script - Flash 8
 
Realidade aumentada 8043
Realidade aumentada 8043Realidade aumentada 8043
Realidade aumentada 8043
 
Apostila sobre cameras de tv
Apostila sobre cameras de tvApostila sobre cameras de tv
Apostila sobre cameras de tv
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios Básicos
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios Básicos
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios Básicos
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios Básicos
 
Câmeras: Princípios Básicos
Câmeras: Princípios BásicosCâmeras: Princípios Básicos
Câmeras: Princípios Básicos
 
Projetando Mobile 2 - PhoneGap
Projetando Mobile 2 - PhoneGapProjetando Mobile 2 - PhoneGap
Projetando Mobile 2 - PhoneGap
 
Equipamentos analógicos e digitais
Equipamentos analógicos e digitaisEquipamentos analógicos e digitais
Equipamentos analógicos e digitais
 
Kinect
KinectKinect
Kinect
 

Detecção de Movimento - Criação de instrumento musical

  • 1. Detecção de Movimento - Criação de instrumento musical Aristidis Ornai1 ,Emanuel Santos2 ,Luís Pereira4 ,Patrício Fernandes3 1 Universidade de Évora m6463@alunos.uevora.pt 2 Universidade de Évora m7565@alunos.uevora.pt 3 Universidade de Évora m8302@alunos.uevora.pt 4 Universidade de Évora m8279@alunos.uevora.pt Resumo Já tocou algum instrumento musical? E alguma vez pensou em tocar um instrumento musical sem ele estar fisicamente presente? Parece impossível mas na verdade não é. Com este artigo pretendemos mos- trar as inúmeras funcionalidades que é possível desenvolver com apenas uma webcam. neste artigo iremos mostrar como transformar uma web- cam num instrumento musical, através da captura de movimentos de um utilizador. Keywords. Motion Detection, Webcam, Intrumentos Musicais, Inter- faces, Imagem 1 Introdução Uma "webcam"é uma câmara de vídeo que produz imagem em tempo real para um computador, por via USB, ethernet ou Wi-Fi. O desenvolvimento da primeira "webcam"realizou-se na Universidade de Cambridge, no departamento de Informática em 1991. A primeira imagem cap- turada pela webcam foi então a famosa "Trojan Room coffee pot"(Figura 1). Este café foi a inspiração para o desenvolvimento da webcam. Após dez anos esta câmara foi finalmente desligada no dia 22 de Agosto de 2001, onde a última imagem capturada é o momento em que a própria é desligada (Figura 2). A primeira webcam comercializada foi a "QuickCam", em 1994. Foi produ- zida pela empresa Connectix, que depois a vendeu-a à Logitech, em 1998. Esta câmara apenas produzia imagens com resolução 320x240 pixéis, a 60 fps (frames per second) em escala de cinza.
  • 2. 2 Aristidis Ornai1 ,Emanuel Santos2 ,Luís Pereira4 ,Patrício Fernandes3 Figura 1. Primeira imagem capturada pela primeira webcam 2 WebCam Motion "WebCam Motion"é um termo usado para descrever o processo de captura de movimento com a webcam, traduzindo esse processo para um modelo digital. Este processo é usado no dia-a-dia em operações militares, entretenimento, em vários desportos e até em aplicações médicas. É também usado em visão compu- tacional e robótica. No entanto, a área que mais utiliza a captura de movimentos é sem dúvida o cinema. 3 Motion Capture "Motion Capture"(ou captura de movimentos) é o processo de converter elec- tronicamente os movimentos de uma pessoa para uma base de dados digital. Esta base de dados é depois usada para produzir gráficos de animações em filmes, jo- gos ou mesmo outras aplicações. Como esta captura deriva de movimentos de uma pessoa real, as animações em filmes (Figura 3) e jogos são cada vez mais realistas e feitas cada vez mais de um modo automático. A "Facial Motion Capture"(ou captura de movimentos faciais) funciona de modo idêntico à captura dos movimentos do resto do corpo, mas apresenta um desafio maior á necessidade de utilizar equipamento com maior resolução. Isto deve-se ao facto de existir um enorme número de expressões faciais possíveis de esquematizar. É também necessário que o equipamento consiga capturar peque- nos movimentos feitos por exemplo, pelos lábios ou pelos olhos. Uma simples movimentação dos lábios pode diferenciar o estado emocional de uma pessoa, se está contente, triste, séria, etc.
  • 3. Detecção de Movimento - Criação de instrumento musical 3 Figura 2. Última imagem a ser capturada: a Webcam a ser desligada, em 2001 4 Motion Detection 4.1 Motionsrc Existem várias abordagens sobre captura de movimentos numa webcam atra- vés de stream de vídeo contínuo. Todas elas são baseadas na comparação entre o frame actual do vídeo e o frame anterior ou entre uma imagem previamente estabelecida no início do streaming, que é chamada de imagem de referência. O programa "Motion_src"foi desenvolvido na plataforma AForge.NET, em que a linguagem C# foi a utilizada para ser programado. A aplicação suporta vários tipos de formato de vídeo, tais como AVI (para vídeos no Windows), MJPEG (ou Motion JPEG) e qualquer formato da webcam local (do próprio computador ou ligada por USB). 4.2 Algoritmo Uma das abordagens mais utilizadas para a detecção de movimento é com- parar o frame actual com um frame de referência. O modo de funcionamento desta abordagem é feito através da comparação pixel a pixel. Consideremos uma imagem como um eixo de coordenadas XY. Cada pixel vai ser comparado com o pixel da frame de referência que esteja na mesma posição. Por exemplo: se quisermos comparar o pixel da posição (5,20), este vai ser com- parado com o pixel da posição (5,20) da frame de referência. Esta abordagem é muito útil em termos de compressão de vídeo pois apenas é necessário estimar os pixéis diferentes e escrever apenas as diferenças, não sendo necessário escrever o frame totalmente de novo.
  • 4. 4 Aristidis Ornai1 ,Emanuel Santos2 ,Luís Pereira4 ,Patrício Fernandes3 Figura 3. Exemplo de um "Motion Capture". Criação de uma personagem no filme Lord of The Rings 4.3 Funcionamento O "motion_src"assume logo no início do programa uma imagem RGB 24bpp que é denominada como a imagem actual (image) e uma cópia em escala cinza (currentFrame) e tem também uma frame de vídeo que é considerada como a frame de referência também em escala cinza(backgroundFrame). Depois consi- dera dois filtros (Difference , Threshold) que servem como filtros para considerar as regiões de pixéis que contém diferenças. // create filters Difference differenceFilter = new Difference( ); IFilter thresholdFilter = new Threshold( 15 ); // set backgroud frame as an overlay for difference filter
  • 5. Detecção de Movimento - Criação de instrumento musical 5 differenceFilter.OverlayImage = backgroundFrame; // apply the filters Bitmap tmp1 = differenceFilter.Apply( currentFrame ); Bitmap tmp2 = thresholdFilter.Apply( tmp1 ); A maior parte das câmaras produzem "ruído"nas imagens, o que faz com que o programa assuma que existiu movimento numa região onde na realidade não existiu. Para minimizar o ruído, o programa utiliza outro filtro (Erosion filter). Assim é possível conseguir apenas as zonas onde existe realmente movimento. // create filter IFilter erosionFilter = new Erosion( ); // apply the filter Bitmap tmp3 = erosionFilter.Apply( tmp2 ); Para que o utilizador perceba onde existe movimento, o programa "pinta"a região de vermelho onde existe movimento. Assim o output produzido por este programa é a imagem actual, com a zona onde existiu movimento contornada a vermelho. A aplicação permite quatro tipos de captura de movimentos: – "MouseDetector1" (Figura 4): Este tipo de captura é considerado o stan- dard da captura de movimentos. Respeitando os filtros implementados, ele captura todos os movimentos existentes e pinta de vermelho a área onde ocorreu movimento. – "MouseDetector2" (Figura 5):Uma das principais desvantagens do sis- tema de captura anterior, é de que ao fazer a comparação da frame actual com a frame anterior, se alguém se mover lentamente, a área de movimento capturada é muito reduzida ou até nula. Assim, apesar de existir movimento, este não é capturado. Este sistema permite combater essa falha, fazendo a comparação entre o frame actual e um frame inicialmente guardado, a que chamamos o frame de referência. O filtro, ao ser iniciado, captura uma ima- gem inicial que supõe ser a imagem default. Assim o sistema consegue reter toda a área de movimento, independentemente da velocidade do movimento. – "MouseDetector3" (Figura 6): Apesar de conseguir superar o problema dos movimentos lentos, o processo anterior requer uma enorme quantidade de recursos. Isto implica um atraso no processo de cálculo da captura da região de movimento e, por consequente, um atraso no retorno da imagem produzida pela aplicação. Assim um utilizador apenas vê a imagem repro- duzida naquele momento alguns segundos depois. O sistema 3 utiliza o mesmo método de captura do anterior, no entanto é diferente na forma como trata a imagem. Neste caso, o sistema transforma
  • 6. 6 Aristidis Ornai1 ,Emanuel Santos2 ,Luís Pereira4 ,Patrício Fernandes3 Figura 4. Exemplo de MouseDetector1 a zona de captura de movimento em formas geométricas. Isto permite a uti- lização de menos recursos, o que torna o processo mais rápido e eficiente. – "MouseDetector4" (Figura 7): Este tipo de captura é em tudo idêntico à anterior no que toca à captura de movimento, no entanto a forma como este é retornado é diferente. Ao capturar a zona de movimento, o sistema retorna uma forma rectangular em torno da zona capturada. É uma técnica que permite ao utilizador reconhecer fácilmente qualquer tipo de objecto que se está a mover. Um exemplo prático para o uso desta técnica de captura é a leitura do tráfego numa estrada, onde o sistema captura rapidamente uma viatura que se movimente na mesma. Este método permite ainda a execução em conjunto de outras aplicações para fazer tratamento de resultados. 5 Piano Player O "Piano Player"é um pequeno programa implementado no nosso projecto. Trata-se da parte esperimental do nosso projecto, sendo este constituído por um mini-piano, onde cada tecla corresponde a uma nota musical. Através de um processo que será explicado mais á frente, cada uma das teclas poderá ser selecionada sempre que o utilizador entra com um ponteiro dentro desta, fazendo com que esta emita um som. Isto permite que o utilizador possa "tocar"piano através do movimento capturado pela webcam.
  • 7. Detecção de Movimento - Criação de instrumento musical 7 Figura 5. Exemplo de MouseDetector2 5.1 Escolha da linguagem Para efectuar este trabalho fizemos uma pesquisa por várias ferramentas e linguagens que nos permitiriam o auxilio na detecção de movimentos. Encontra- mos então duas opções que nos pareceram viáveis: da Java Media Framework (JMF) que possui um conjunto de bibliotecas em Java que nos permitem cap- turar imagem da webcam e sobre a qual encontramos um projecto com alguns algoritmos implementados, ou a utilização da linguagem C# utilizando um dos algoritmos implementados no projecto motion_detection e tratando a informa- ção obtida por estes de modo a construir o piano. Devido a problemas na configuração do JMF, optamos pela utilização da linguagem C#. 5.2 Implementação Para a implementação da nossa aplicação, escolhemos a utilização do al- goritmo motion4 presente no projecto anteriormente referido. A escolha deste algoritmo deve-se sobretudo á maior facilidade de manipulação do output rece- bido pelo mesmo. Para entender a nossa implementação é necessário entender a estrutura do algoritmo motion4 a um nível mais profundo. Neste algoritmo temos que é nos devolvido após a análise de cada frame um conjunto de rectângulos que indicam
  • 8. 8 Aristidis Ornai1 ,Emanuel Santos2 ,Luís Pereira4 ,Patrício Fernandes3 Figura 6. Exemplo de MouseDetector3 os pontos que se movimentaram, isto é, os pontos que foram alterados em relação à frame de referência. Uma alteração que fizemos por forma a diminuir o ruído, foi não só limitar o número de pontos como também o tamanho dos mesmos. Posteriormente criámos um rectângulo que irá representar um ponteiro. Este ponteiro será utilizado do mesmo modo que um ponteiro de rato. Após o uti- lizador conseguir o seu controlo movendo a sua mão dentro dele durante uns segundos, este irá seguir a sua não. Para a criação das teclas utilizamos também rectângulos com um contorno vermelho ao longo do ecrã e que quando o ponteiro entra numa delas será emi- tido um som. Após o desenho das teclas, decidimos então estruturar o funcionamento do nosso algoritmo da seguinte forma: 1. Desenhar o ponteiro (rectângulo branco do lado direito do ecrã); 2. Desenhar as teclas (rectângulos com contorno vermelho ao longo do ecrã); 3. Se o ponteiro ainda não está a seguir a nossa mão: – Se um dos rectângulos intersecta o ponteiro, vamos incrementar uma va- riável com o número de vezes que isso acontece; – Se o número de vezes que um rectângulo intersectou o ponteiro for maior que dez, então, vamos definir o ponteiro como sendo esse rectângulo e o ponteiro passa a seguir o rectângulo que se encontra mais parecido a esse; 4. Caso contrário:
  • 9. Detecção de Movimento - Criação de instrumento musical 9 Figura 7. Exemplo de MouseDetector4 – Obtem a posição do array de rectângulos no qual está o rectângulo mais próximo do ponteiro na frame anteriormente analisada e define o novo pon- teiro como sendo esse rectângulo; – Se o ponteiro estiver a intersectar uma parte significativa de uma tecla e esta não tiver sido intersectada na frame de referência vamos emitir um som; – Se o ponteiro na frame anterior intersectou uma tecla e agora não a está a intersectar então vamos indicar que a tecla já não está a ser intersectada; – Se o ponteiro estiver a intersectar uma parte significativa de uma tecla e esta tiver sido intersectada na frame de referência, não fazemos nada, de modo a apenas ser emitido um som quando o ponteiro que estava fora da tecla entrar na tecla; De modo a que seja possível emitir o som correspondente a cada tecla, foi ne- cessário obter um conjunto de ficheiros de som correspondente a nota musical. 5.3 Testes efectuados e resultados Efectuamos vários testes quer no desenvolvimento do nosso projecto, quer após o mesmo para verificarmos o desempenho da nossa aplicação. Assim, veri- ficamos alguns aspectos importantes. Antes de mais é de referir que apesar das tentativas de diminuição do ruído na imagem, num ambiente não controlado este acaba por ser grande o que por
  • 10. 10 Aristidis Ornai1 ,Emanuel Santos2 ,Luís Pereira4 ,Patrício Fernandes3 vezes poderá comprometer o bom desempenho do programa. No entanto, tendo algus cuidados, como ter uma parede por trás onde nada se move ou uma folha branca e interagindo com o programa utilizando apenas um dedo ou uma caneta ou ponteiro, o programa tem um desempenho aceitável. 6 Estado da Arte Existem actualmente várias áreas que utilizam aplicações com recurso ao uso da detecção de movimento por webcam. Na pesquisa que efectuamos encontra- mos vários desses exemplos, sendo uns para efeitos mais experimentais e científi- cos, outros para aplicações lúdicas e outros ainda com uma aplicação funcional. Assim, na nossa opinião um dos melhores programas para detecção de movi- mento foi aquele que Martin Tosas apresenta na sua tese de doutoramento deno- minada "Visual Articulated Hand Tracking for Interactive Surfaces"que visa a implementação de uma interface utilizando "hand-tracking"denominada de VTS (Visual Touch Screen), a qual é baseada num algoritmo proposto por Blake e Isard em 1998. A terceira versão do VTS encontra-se actualmente em desenvolvimento. É ainda de referir que existe um conjunto de ferramentas que podem auxiliar o desenvolvimento deste tipo de aplicações, entre as quais o JMF que se trata de um conjunto de bibliotecas em Java que permite a interacção com conteúdo multimédia (som e imagem). Em C# existe também um vasto conjunto de bibli- otecas que nos permitem a interacção com a webcam e o tratamento de imagem e som. No entanto, ainda há muito trabalho a ser feito, por forma não só a facilitar o desenvolvimento deste tipo de aplicações e da instalação das frameworks ne- cessárias para o desenvolvimento das mesmas, como também de criar aplicações que sejam úteis aos utilizadores. 7 Conclusão Após o desenvolvimento do nosso trabalho, após a análise do mesmo e das tecnologias a ele associado, podemos obter algumas conclusões que consideramos importantes: – A interacção pessoa-máquina através do uso da detecção de movimentos é bastante atractiva e pode trazer para o utilizador uma maior facilidade na utilização das aplicações e até uma maior motivação para o uso das mesmas. Assim, têm surgido várias aplicações deste género quer a nível de jogos, robótica, entre outros; – Outra área no qual a detecção de movimentos pela webcam pode ser útil é na inclusão digital de pessoas com dificuldades de movimentos como é o caso de tetraplégicos. Para tal, foi desenvolvida uma aplicação, o HeadMouse, que
  • 11. Detecção de Movimento - Criação de instrumento musical 11 permite que estes interajam com o computador através dos movimentos dos olhos; – A aplicação da detecção de movimentos na construção de instrumentos mu- sicais virtuais é algo não muito visto mas que no entanto parece ser algo interessante e que poderá ser utilizado para efeitos não só lúdicos como também de aprendizagem desses mesmos instrumentos através duma forma divertida e estimulante de aprender; – Consideramos ainda que um dos aspectos mais complexos na detecção de movimentos é o tratamento do ruído. Este foi como já referimos anterior- mente um dos pontos mais complicados de tratar no nosso projecto e o qual não conseguimos tratar na sua totalidade. Assim, consideramos que um dos aspectos principais a melhorar é a diminuição do ruído possivelmente através da aplicação de algum algoritmo mais eficiente para esse fim; – Apesar de ainda existirem aspectos que podem ser melhorados pensamos que em geral os objectivos foram cumpridos na medida em que conseguimos implementar uma interface que permite a interacção através da webcam com teclas virtual. Referências 1. Lejos vision system. http://homepage.ntlworld.com/lawrie.griffiths/vision. html, (Acedido a 13 de Julho de 2011) 2. Breve, F.: Inteligência de enxames. http://en.wikipedia.org/wiki/Motion_ capture (2007), (Acedido a 13 de Julho de 2011) 3. Kirillov, A.: Motion detection algorithms. http://www.codeproject.com/KB/ audio-video/Motion_Detection.aspx (Mar 2007), (Acedido a 13 de Julho de 2011) 4. Lavrsen, K.: Motion web. http://www.lavrsen.dk/foswiki/bin/view/Motion/ WebHome (Feb 2011), (Acedido a 13 de Julho de 2011) 5. Rzeszutek, K.: Motion detection - java + jmf. http://www.darnok.org/ programming/motion-detection/, (Acedido a 13 de Julho de 2011) 6. Tomasevic, P.: Versatile webcam c# library. http://www.codeproject.com/KB/ miscctrl/webcam_c_sharp.aspx (Nov 2010), (Acedido a 13 de Julho de 2011) 7. Tosas, M.: Visual articulated hand tracking for interactive surfaces. http://www. mtosas.net/thesis.pdf (2006), (Acedido a 13 de Julho de 2011) 8. Wikipedia: Webcam. http://en.wikipedia.org/wiki/Webcam (Jul 2011), (Acedido a 13 de Julho de 2011)