segunda-feira, 27 de junho de 2011

Exploração de Recursos _ WebCam

Depois de tudo resolvido comecei a explorar com mais calma o código relativo ao “Bubble_Game” do tutorial do Andy Best. 

Substituindo alguns parâmetros numa das linhas consegui que as bolhas aparecessem fixas e aleatoriamente no palco. Faltava arrastar as bolhas ao invés de estas serem destruídas aquando do movimento.

Pesquisando sobre como poderia transformar o “remove” da imagem no arrastamento da mesma consoante a direcção do movimento, descobri o exemplo também de Andy Best ,“Particle Engine + Optical Flow”. Foi necessário instalar a livraria “sms” e “JMyron”. A “OpenGL” já estava previamente instalada. Ao correr o Processing surgiu mais um erro depois daqueles relativos à falta de livrarias, nomeadamente, “UnsatisfiedLinkError: C:\processing-1.2.1\libraries\JMyron\library\JMyron.dll: Can't find dependent libraries” que foi resolvido com a cópia dos ficheiros “DSVL.dll” e ” myron_ezcam.dll” relativos à livraria “JMyron” para o System32. O ultimo erro estava presente na linha de código “int[] vals = Unimotion.getSMSArray();” e acontecia devido a falta da livraria “Unimotion” disponível apenas para MACO´X, sendo mencionado no fórum de discussão que apagando apenas as linhas de código relativas a essa livraria, relacionada com a simulação de gravidade, o exemplo correria normalmente em ambiente Windows. E assim fiz.

Ao pesquisar qualquer tipo de informação que ajuda-se na compreensão do código relativo a este exemplo, para modificar consoante as necessidades do projecto, encontrei o exemplo “Image to Particle System”. Ao explora-lo, apesar de a acção ser desencadeada pelo movimento do rato, pensei que ao conjugá-lo com o exemplo anterior, estaria a usufruir de ambas as potencialidades criando o efeito pretendido.

Começou então a fase de compreensão do código dos dois exemplos. No exemplo de Andy Best consegui substituir as letras (char) por uma elipse. Mesmo depois de excluir a gravidade aplicada ao objecto e de controlar a velocidade e a interacção conforme o pretendido, a elipse começava sempre no mesmo espaço do palco e a sua posição estava em constante deslocação. Os atributos que definiam essa posição eram o loc.x e loc.y sendo que a substituição deste anulava por completo a relação entre o movimento e o objecto. Neste processo de exploração surgiu um erro inesperado relacionado com os ficheiros *.dll da livraria jmyron, que não se conseguia resolver. 

Desta forma foi necessária a formatação do computador. Mantendo o sistema Windows 7 de 64 bits eram constantes os problemas relacionados com as drivers do computador. Assim mudei o sistema para Windows Xp Profissional de 32bits à experiência

terça-feira, 31 de maio de 2011

"Image to Particle System"

“Image to Particle System” foi desenvolvido em 2011 e divulgado em Março desse mesmo ano por Powder.

O projecto consiste em analisar uma imagem convertendo cada pixel numa partícula da mesma cor. Essas partículas afastam-se do ângulo de acção do rato sendo que as partículas mais próximas diminuem e às outras é aplicado um blur que aumenta de intensidade quanto maior for a distância do rato. Quando o rato sai do posicionamento inicial das partículas, estas voltam a sua posição inicial.

Para experimentar o demo siga o link.

segunda-feira, 30 de maio de 2011

Exploração de Recursos _ EyeCam e WebCam

Com pouco tempo para chegar a um produto final, e com os problemas encontrados na utilização da Kinect, decidi explorar outras alternativas como a EyeCam da Ps3 ou uma WebCam comum. 

Primeiro passo, instalar a EyeCam no meu computador. Recorrendo á driver Cl-Eye-Driver-4.0.2.1017 disponível no Code Laboratories, a câmara foi instalada com sucesso. 

Posto isto, avancei para a exploração de um tutorial acerca do Processing e do OpenCv de Andy Best. Como já possuía o Processing (versão 1.5), corri o exemplo e os erros começaram a surgir:
“The Package ‘hypermedia’ does not existe. You might be missing a library” (erro relativo á linha de código “import hypermedia.video.*;”). Seria necessário instalar o OpenCv no meu computador. Instalei a versão 2.2.0 e descompactei a livraria OpenCv para as livrarias do Processing.

• Correndo o exemplo, surge um novo erro, “UnsatisfiedLinkError: hypermedia.video.OpenCV.capture(III)V” (erro relativo á linha de código “opencv.capture( 640, 480 )”). Segundo os comentários esta linha seria apenas para definir o tamanho da captura da câmara pré-definida. Consultando alguns fóruns de discussão sobre o tema, era mencionado que a versão 1.0 do OpenCV seria mais adequada para sistema Windows, por isso substitui a versão previamente instalada pela versão em questão.

O erro mantinha-se. Depois de aprofundar a pesquisa sobre o mesmo descobri que o ficheiro “OpenCv.dll” presente na livraria acrescentada nas livrarias do Processing, assim como todos os ficheiros da mesma extensão presentes na pasta bin do OpenCV instalado, deveriam ser copiados para a pasta system32.

Este processo foi repetido em três máquinas distintas, assim como a instalação do Cmake 2.8.4 (um pré-requisito). Em sistema Windows 7 de 64bits (ASUS) e com uma WebCam comum o exemplo funciona correctamente, ao contrário da performance em sistema Windows 7 de 64bits (ACER) onde o segundo erro não é resolvido. Já em sistema Windows Vista de 32bits, os erros anteriormente descritos são resolvidos. No entanto, recorrendo a uma WebCam comum apenas se vêem as bolhas a cair e o background, que deveria revelar a imagem captada pela WebCam, apresenta-se totalmente negro, não havendo qualquer tipo de interacção com as bolhas. Recorrendo à EyeCam não existe qualquer tipo de reacção por parte do Processing. Sendo o processo igual para ambos, não se compreende a disparidade de resultados.

Por fim descobri que apesar de a pasta “System 32” mostrar os ficheiros *.dll os mesmos não estavam a ser copiados para essa pasta daí não funcionar em Windows 7 de 64bits (ACER). Depois de descoberto e resolvido o problema, consegui explorar o exemplo apenas com a WebCam pois assim que a EyeCam era conectada com o computador, o exemplo deixava de funcionar mesmo desactivando a WebCam predefinida do computador. Para correr o exemplo novamente com a WebCam, depois de desconectar a EyeCam, era mesmo assim necessário reiniciar o sistema.

Tendo em conta todos estes acontecimentos decidi explorar os exemplos usufruindo apenas da WebCam do meu computador.

"Particle Engine + Optical Flow"

Este é um projecto também desenvolvido por Andy Best em 2008 .

No início ao correr a aplicação apenas é adicionada uma letra, sendo que se clicar com o rato outras serão adicionadas. Essa letra surge sempre mesma posição assemelhando-se e possui gravidade deslocando-se pelo palco, as outras surgem na posição do rato. Quando o movimento ocorre na área de influência dessa letra, movimento esse detectado através da WebCam, a letra é deslocada consoante a direcção e velocidade do movimento.

Tendo em conta que o pretendido era arrastar um qualquer objecto consoante a direcção do movimento talvez este exemplo resolva o problema.

"Bubbles-Game"

“Bubbles_Game” foi desenvolvido por Andy Best em 2009, um tutorial que relaciona o Processing, a livraria OpenCv, a WebCam e o reconhecimento de movimento.

Comparando a frame actual e a frame anterior, analisando a mudança entre pixéis brancos e pretos, o código permite que seja detectado qualquer movimento através da WebCam. Esse movimento, por sua vez, resulta no desaparecimento das bolhas em questão, sendo essas bolhas imagens.

Fazendo algumas alterações, este exemplo poderia ajudar-me na construção dos meus palcos se consegui-se alterar o posicionamento das bolhas consoante a direcção do movimento efectuado arrastando-as em vez de as remover.