All In Your Hands – tudo em um só lugar

Tudo começou a partir de uma ideia bem simples: “Disponibilizar vários tipos de mídia/serviços em um local único e permitir que fossem acessados com o menor número de cliques possível”. O software oferece alguns sistemas de busca para tipos conhecidos de mídia (vídeos,músicas, livros, lugares próximos e previsão do tempo), assim como players embutidos para a reprodução destes conteúdos. “All In Your Hands” ou “Tudo em suas Mãos” (versão em português) – como foi chamado – ainda possui um serviço que mostra se estabelecimentos próximos encontram-se abertos e como chegar ao local com base no google maps e street view. O software foi desenvolvido em duas versões: web (um site), que está disponível em http://tudoemsuasmaos.com.br e um app android FREE disponível via Google Play e acessível pela medalha abaixo.

Get it on Google Play

O site e app foram totalmente redesenhados em Janeiro/2015 para proporcionar uma melhor experiência ao usuário final. Abaixo algumas imagens do app reformulado.

screenshot1 screenshot2screenshot4

Tecnicamente falando, o sistema utiliza uma arquitetura Java EE e recentemente seu core foi migrado para instancias EC2 da AWS (Amazon Web Services). Dá para ter uma ideia da organização do sistema no diagrama de deploy que disponibilizei aqui.

Se alguém tiver interesse, os fontes do projeto encontram-se em meu perfil no github.

Espero que gostem 🙂

Sonata – Um sistema de rearmonização de partituras

Sonata foi o projeto desenvolvido durante meu trabalho de conclusão de curso para obtenção do grau de Bacharel em Ciência da Computação. Trata-se de um software capaz de rearmonizar partituras de piano e gerar diferentes versões utilizando algumas técnicas de rearmonização. Ele foi desenvolvido como uma extensão de uma biblioteca java para músicos chamada Jmusic, de forma que nosso trabalho foi criar uma estrutura de dados própria para a Melodia e Harmonia, assim como construir a lógica para a reescrita de acordo com regras de rearmonização. Neste link é possível visualizar um artigo que submetemos ao Siicusp (Simpósio de Iniciação Científica da USP) enquanto o projeto ainda estava em desenvolvimento em 2010.

É importante salientar que rearmonização musical é um assunto muito complexo dentro da Música envolvendo conhecimentos avançados de teoria musical, sendo assim o desenvolvimento de um software que pudesse automatizar este processo em sua totalidade seria praticamente impossível  devido ao número de variáveis envolvidas e o tempo que tínhamos para tal.
Por este motivo, durante o desenvolvimento do software foi necessário adotar algumas premissas e impor algumas limitações de forma que o processo de rearmonização funcionasse corretamente. Uma dessas premissas é que o software apenas efetua alterações sobre a harmonia, deixando a melodia e o ritmo original da música intactos,  além disso ele aceita apenas partituras escritas em um arquivo midi com apenas 2 canais e cuja harmonia possua apenas acordes (e não dedilhado) fechados. Em um primeiro momento foram implementadas 4 técnicas de rearmonização (Interpolação em Cadências,  Substituição de acordes – por tom comum ou trítono,  inserção de notas de tensão sobre acordes e inserção de acordes fora do campo harmônico) porém nada impede que em futuras versões o software suporte demais técnicas de rearmonização ou manipule notas da melodia.
Hoje o software aceita um arquivo midi de entrada,  lê suas notas musicais  e gera uma partitura no formato de piano, então através da aplicação das técnicas de rearmonização podem ser geradas uma ou mais versões diferentes da partitura original. Cada uma das partituras geradas pode ser exportada nos formatos Midi ou PDF.
Atualmente o software possui duas versões (desktop e mobile – android),  sendo que a versão android encontra-se no google play e pode ser adquirida em duas versões –  completa e de demonstração.

Versão CompletaGet it on Google Play

Versão de DemonstraçãoGet it on Google Play

Abaixo algumas imagens do aplicativo:

export_pdf                         select_rules

score

Projeto Visão Computacional – Reconhecimento de Íris

No segundo semestre de 2010  um amigo e eu desenvolvemos uma pequena aplicação que permitia reconhecer a íris de olhos humanos através do algoritmo de crescimento de região e corte. Na época foi utilizada a biblioteca de visão computacional OpenCV – http://opencv.willowgarage.com/wiki/, este trabalho foi desenvolvido para a disciplina de Visão Computacional.

Para o reconhecimento de íris todas as imagens foram submetidas a alguns procedimentos experimentais. Primeiramente dividimos a imagem em três canais de cor (R/G/B) e em um próximo passo fizemos o corte da imagem** e observamos que o canal R (red) ao ser binarizado apresentava os melhores resultados de separação da irís + pupila do resto da imagem.

**Corte/binarização da imagem, neste contexto, é considerado uma técnica de processamento de imagens que analisa os pixels da imagem e cria uma outra imagem onde os pixels com menor intensidade recebem valor zero e os demais recebem valor  máximo de intensidade (valor 1).

Então utilizamos o resultado do corte sobre o canal R,  a partir dele fizemos procedimentos para remover a região da pupila da íris, e na sequencia utilizamos o algoritmo de crescimento de região (algoritmo que a partir de um pixel “semente” vai formando uma área com os pixels vizinhos até encontrar bordas/ regiões de valor muito diferente de intensidade), assim conseguimos chegar a um reconhecimentos aceitável da região da íris. É claro que esse reconhecimento não é perfeito, o algoritmo ainda poderia ser aprimorado.

Fizemos ainda um tratamento para cores de íris mais claras e mais escuras (ambas necessitam de um procedimento diferenciado para tal reconhecimento). Algumas imagens com os resultados obtidos estão abaixo, são mostradas as imagens de 3 olhos diferentes onde respectivamente temos as imagens  Original, canal Red, Corte (ou imagem binarizada),  somente a íris + pupila, somente a íris  – passo onde existe um tratamento diferente para cores claras e escuras de íris, e o crescimento de região (onde a íris foi reconhecida):

olho exemplo 1:

 

olho exemplo 2:

olho exemplo 3 (um caso em que o algoritmo não conseguiu reconhecer a íris de maneira significativa):

Animação Digital

Na disciplina de Animação Digital, o projeto final consistia na produção de uma animação de no mínimo 1 minuto, tendo a mesma que ser desenvolvida totalmente no software Blender. Eu e dois amigos pensamos em uma história bastante simples:

Um homem palito frustrado por não se dar bem no esporte que praticava (Futebol), se depara com a grande oportunidade de fazer sucesso em outro esporte e então participa de um emocionante torneio em busca de sua satisfação pessoal.

Abaixo disponibilizo o vídeo do projeto desenvolvido por nós:

O vídeo acima foi o resultado da compilação final de nossa animação. Consiste de uma animação de 1:30 min, totalmente desenvolvida no software Blender.

Desenvolvimento de jogos utilizando XNA Game Studio 3.1

XNA é um framework (conjunto de classes prontas para uso específico, diferente de uma API que é um conjunto de classes para uso geral) para desenvolvimento de games escrito em C# e desenvolvido pela Microsoft.

Meu contato com XNA ocorreu durante a graduação, onde eu e três amigos participamos de um concurso de Plano de Negócios e fomos aprovados para trabalhar na pré-incubadora de empresas do Mackenzie com um projeto de desenvolvimento de games. Optamos pelo framework XNA devido ao enorme suporte dado pela Microsoft, a grande quantidade de materiais disponíveis online,  livros e a enorme documentação oficial, o diferenciando de outras linguagens/frameworks próprios para  desenvolvimento de games que ofereciam pouco suporte e muitas vezes com grande quantidade de programação via scripts, dificultando o desenvolvimento dos games.

A idéia que tivemos foi criar um game que uniria o jogo Mesoamericano de bola ( mais informações na wikipedia  http://pt.wikipedia.org/wiki/Jogo_de_bola_mesoamericano ) com a administração de recursos naturais de forma que o jogador obtivesse “créditos” que poderiam ser utilizados para melhorar suas armaduras ou até mesmo a qualidade dos campos em que os jogos ocorriam.  Este vídeo do youtube mostra como era praticado o jogo pela população Maia:

Embora não conseguimos terminar a implementação do nosso game foi possível desenvolver vários protótipos do mesmo, dentre eles alguns relacionados com a mecânica da bola (tanto em cenário 2D como em 3D), colisão entre jogadores e bola, desgaste da bola e das armaduras em função do tempo, animação de bola entrando no aro presente nas laterais do campo, dentre outros.

Abaixo disponibilizo alguns vídeos de demonstração de alguns dos protótipos desenvolvidos durante nosso período dentro da pré-incubadora.

Protótipo de mecânica da bola em 2D ( demonstrando também a colisão entre personagens e bola):

Protótipo de animação de bola entrando no aro nas laterais do campo ( cenário 2D):

Síntese de Imagens Digitais

Durante o 1° semestre de 2010 na disciplina de Síntese de Imagens Digitais,criei duas imagens sintetizadas por computador utilizando o software Blender ( http://www.blender.org/ ) para a modelagem dos objetos e  a biblioteca PBRT ( http://www.pbrt.org/ ) para a renderização das imagens.

Abaixo estão as imagens obtidas:

A imagem acima criei tentando reproduzir a imagem de uma taça de cristal em cima de uma mesa. Utilizei a modelagem de uma taça no Blender e depois fiz a renderização com a biblioteca PBRT .

A imagem abaixo foi o resultado do desenvolvimento do projeto da disciplina, tentei representar um inseto sobre uma folhagem:

Abaixo estão as imagens que criei dando printscreen sobre as telas do Blender e exibidas pela biblioteca PBRT durante o desenvolvimento do projeto:

Projetos Programação de Jogos

Durante o 2° semestre de 2009 eu e amigos desenvolvemos dois jogos na disciplina de Programação de Jogos, um deles foi desenvolvido na game engine “Game maker” e o outro na game engine “FPS Creator”.

O primeiro deles trata-se de um jogo de aventura em 2D, onde o jogador deveria controlar um gato e ir passando de níveis derrotando oponentes e chefes de fase.  O jogo contém 5 fases repletas de itens, inimigos e chefes, tento o jogador que usar seu raciocínio lógico e instinto na tentativa de concluir cada uma delas.  O vídeo abaixo demonstra brevemente as cinco fases do jogo:

Para quem gosta de documentação, ai vai o documento de design (documento que explica toda a história do jogo , a história e características de cada personagem individualmente, os objetos do jogo, dentre outros) do jogo “Spark Fragment”:

Documento de Design – Spark Fragment

Aplicação em VRML

Este foi um projeto desenvolvido durante a disciplina de Realidade Virtual. O objetivo era desenvolver, utilizando VRML, um ambiente tridimensional onde fosse possível ter a idéia de imersão. Neste ambiente deveria ser possível que o usuário pudesse, através dos recursos de um visualizador de arquivos .wrl como o Cortona3D ( http://www.cortona3d.com/Products/Cortona-3D-Viewer.aspx ),  “entrar e sair” do mesmo, como se ele estivesse imerso.  Claro que a simulação não é tão satisfatória, uma vez que não é utilizado nenhum tipo de dispositivo a não ser o próprio browser.

Uma demostração pode ser visualizada no vídeo abaixo:

No caso eu criei um ambiente que representava uma sala, onde tinham uma mesa, cadeiras ( objetos totalmente modelados por mim, sem importar nenhum modelo pronto) e também um sofá e um piano (ambos foram importados, porém eu texturizei / alterei as cores dos mesmos. Também pode-se observar outros detalhes, como o copo de água em cima da mesa, o tapete presente na sala e até mesmo a iluminação ambiente, todos também modelados por mim sem nenhum modelo pronto.

Jogo da Velha em Smalltalk

Durante o 5° semestre do curso de Ciência da Computação  houve um projeto em que o objetivo era desenvolver um jogo da velha na linguagem smalltalk utilizando a interface gráfica do ambiente squeak( http://www.squeak.org/ ) chamada Morphic.  Durante o semestre infelizmente não foi possível desenvolver o projeto da forma que eu gostaria, tendo ficado o jogo sem interface gráfica, apenas com a implementação da lógica. Porém, logo após o termino do semestre eu tive tempo para refazer o trabalho. O vídeo abaixo mostra o ambiente com o jogo em funcionamento:

Eu desenvolvi um modo de jogo contra a máquina , um modo Player1 vs Player2, um botão para resetar o game, um botão para resetar o placar e  contadores de pontuação.