terça-feira, 19 de novembro de 2013

Resumo do artigo "The ICDAR 2013 Music Scores Competition: Staff Removal"

O artigo "The ICDAR 2013 Music Scores Competition: Staff Removal" apresenta os resultados da competição de remoção de compasso ocorrida no ICDAR 2013. Os autores descrevem o conjunto de imagens usado e os processamentos realizados para degradar as imagens para que elas se tornem similares a documentos históricos.  Também são apresentados os resultados da competição.

(Este resumo foca na descrição do conjunto de dados e nas métricas de avaliação de desempenho. Algumas informações foram retiradas do artigo "The ICDAR/GREC 2013 Music Scores Competition on Staff Removal")

O conjunto de dados utilizado na competição foi o CVC-MUSCIMA, que contém 1000 imagens de 20 partituras escritas por 50 músicos diferentes. Cada músico transcreveu as mesmas 20 páginas. Este conjunto de dados foi submetido à duas operações de degradação das imagens e as imagens são oferecidas tanto em binário como em níveis de cinza.

A primeira degradação adiciona ruído local de modo a imitar os traços de documentos antigos. São adicionados defeitos como pequenos borrões de tinta e falhas "brancas" nos traços da imagem.


A segunda deformação simula a digitalização de documentos deteriorados adicionando pequenas dobras e seções amassadas na imagem.





O conjunto de treinamento foi dividido em três partes:
  1. TrainingSubset1: 1000 imagens geradas usando o modelo de distorção 3D com 2 meshes diferentes;
  2. TrainingSubset2: 1000 imagens geradas com 3 níveis de ruído local;
  3. TrainingSubset3: 2000 imagens geradas com combinações de distorção 3D e ruído local. Os parâmetros são os mesmos usados nos itens 1 e 2.
O conjunto de testes também foi dividido em 3 partes:
  1. TestSubset1: 500 imagens geradas usando o modelo de distorção 3D com 2 meshes diferentes dos do treinamento;
  2. TestSubset2: 500 imagens geradas com os mesmos 3 níveis de ruído local;
  3. TestSubset3: 1000 imagens geradas com combinações de distorção 3D e ruído local. Os parâmetros são os mesmos usados nos itens 1 e 2 dos conjuntos de teste.

Os autores utilizaram 5 medidas de erro: Acurácia, Precisão, Recall, F-measure e Especificidade.

(Acurácia = taxa de erro, Precisão = TP/(TP + FP), Recall = TP/(TP + FN), Especificidade = TN/(TN + FP), F-measure= 2* (Precisão * Recall)/(Precisão + Recall) )

Os resultados de cada método podem ser vistos na tabela da última página do artigo [2].

Referências completas:
  1. Visaniy, M.; Kieu, V.C.; Fornes, A.; Journet, N., "ICDAR 2013 Music Scores Competition: Staff Removal," Document Analysis and Recognition (ICDAR), 2013 12th International Conference on , vol., no., pp.1407,1411, 25-28 Aug. 2013. [Download]
  2. V. Kieu, A. Fornes, M. Visani, and N. Journet, “The ICDAR/GREC 2013 Music Scores Competition on Staff Removal,” in 10th IAPR International Workshop on Graphics RECognition (GREC 2013), Bethlehem, PA, USA. [Download]

sábado, 12 de outubro de 2013

Trabalho remoto com Linux - Screen

Os sistemas baseados em Linux oferecem diversas facilidades para a criação de sessões remotas. Uma das grandes vantagens do trabalho remoto é a possibilidade de utilizar (e dividir com vários usuários) computadores com alto poder de processamento. Isto é especialmente importante na academia, pois frequentemente precisamos executar experimentos ou simulações demoradas e que demandam grande poder computacional. Neste post irei apresentar o básico sobre o screen, uma ferramenta do Linux que permite que um usuário deixe um programa rodando em uma máquina mesmo sem estar logado nela.

Primeiramente, logue por ssh em uma máquina remota de sua escolha e execute no terminal:

$> screen

O comando screen cria um novo terminal que pode ser desvinculado da sua sessão ssh. Ou seja, a sessão do screen continua aberta mesmo que você se desconecte ou que a conexão caia. Para demonstrar esta capacidade, digite o seguinte comando no terminal.

$> sleep 120; echo "Terminou"

Este comando imprimirá na tela "Terminou" após 2 minutos. Agora pressione as seguintes teclas.

(Ctrl + A) e em seguida D

Seu terminal do screen foi minimizado e você está de volta à sua sessão ssh usual. Só para deixar o exemplo mais real, se desconecte da máquina e conecte novamente.

Ao reconectar na máquina remota, precisamos indicar que desejamos retomar nossa sessão do screen. Para fazer isto use o seguinte comando:

$> screen -r

Agora estamos de volta ao terminal que abrimos anteriormente e o texto "Terminou" deverá estar escrito na tela. Note que toda vez que executamos o comando screen sem parâmetros será aberta uma nova sessão. Pessoalmente, costumo usar somente uma sessão por máquina. Podemos listar as sessões do screen usando o comando

$> screen -ls

e restaurar uma sessão específica usando

$> screen -r NOME_DO_SCREEN

Assim como uma janela do konsole ou gnome-terminal pode conter várias abas, uma sessão do screen também pode abrigar diversos terminais diferentes. Somente um terminal fica visível, mas todos estão sendo executados em paralelo. Para criar um novo terminal em seu screen aperte

(Ctrl + A) e em seguida C

Para ver quais terminais estão abertos em sua sessão use

(Ctrl + A) e em seguida W

O terminal com uma * ao lado do nome é o que está visível atualmente. Para navegar entre os terminais use

(Ctrl + A) e em seguida N

para ir para o próximo (Next) terminal e

(Ctrl + A) e em seguida P

para ir para o terminal anterior (Previous).

Estes são os principais comandos do screen para a execução de programas demorados em máquinas remotas. Deixe um comentário para qualquer dúvida ou esclarecimento. Sugestões também são benvindas.

Veja também:
Como imprimir em máquinas remotas.

segunda-feira, 30 de setembro de 2013

Review (atrasado) do Windows 8

As reações ao lançamento do Windows 8 foram, em geral, negativas. A InfoWorld chegou a dizer que o "Windows 8 é garantia de decepção para quase todos". Como existem tantas opiniões sobre o assunto, resolvi escrever o que estou achando do Windows 8 que veio pré-instalado no meu notebook.

Primeiramente, sou um usuário bem experiente. Meu antigo notebook veio com Windows 7 pré-instalado, mas usei praticamente só Ubuntu nos últimos dois anos. Também uso Ubuntu no laboratório em que trabalho e posso dizer que tenho bastante experiência tanto com Linux como com Windows.

Impressão Inicial

Passei meus primeiros 10 minutos descobrindo, basicamente, como não usar a nova interface do Windows 8 e manter o desktop visível o máximo de tempo possível. Também demorei algum tempo até achar o Painel de Controle. O item "Configurações" da interface nova não é equivalente e mostra bem menos opções. 

Após este primeiro contato, usar o Windows 8 no modo Desktop é igualzinho a usar o Windows 7, só que mais rápido. Aliás, a agilidade nas tarefas em geral está bem maior no novo Windows e isto é especialmente perceptível ao ligar e desligar o notebook. A opção de suspender, então, ficou visivelmente mais rápida e quase parece que o computador nunca desliga.

O Windows 8 no modo desktop não é muito diferente do Windows 7.

Muito se falou da ausência do menu Iniciar. Até agora, posso dizer que não sinto falta nenhuma dele. Em vez de procurar o nome de um programa no menu, agora eu aperto a tecla "Windows" e começo a digitar o nome do programa que quero abrir. O Windows 8 mostra uma lista de programas que contém a minha busca e na maioria das vezes nem preciso digitar o nome até o fim. É só digitar o começo e apertar Enter. Muito melhor, na minha opinião.

Não irei fazer comentários sobre o IE novo pois nunca o utilizei. Meu navegador favorito é o Firefox e ele foi o primeiro programa que instalei. Também não posso falar muito sobre a interface nova (chamada de Modern pela Microsoft), já que, tirando o atalho que comentei acima, não encontrei muita utilidade para ela.

 Programação

Como faço doutorado em Computação, uma das minhas principais atividades é programar (a outra é ler artigos). Sempre que posso programo em Python, porém frequentemente programo em C para minhas pesquisas. 

Python tem um suporte curioso a Windows. Apesar do instalador funcionar super bem, programas para gerenciamento de pacotes, como o pip, são bem chatos de instalar. Além disto, o pip tem sérios problemas em compilar extensões nativas, como o Numpy, principalmente por depender de uma instalação funcionando do Visual C++. Felizmente existe este site, feito pelo Christoph Gohlke, que contém uma quantidade impressionante de pacotes pré-compilados para Windows.

Se você não for usar o Visual Studio é bem provável que você tenha dificuldades em programar em C em Windows, especialmente se estiver acostumado com Linux. Existem distribuições do gcc e similares para Windows (MingW), porém a experiência é muito pior que no Linux (especialmente por causa do péssimo terminal do Windows). Por estar acostumado com meu Ubuntu, preferi então instalar uma máquina virtual e escolhi o VMware Player. Instalei a distribuição Lubuntu, que nada mais é que o Ubuntu com a interface gráfica LXDE, que é bem mais leve que a padrão do Ubuntu.

A grande vantagem de se utilizar o VMware player é que ele possui o modo Unity, que faz com que as janelas da máquina virtual apareça lado a lado com as janelas do sistema operacional nativo. Isto torna a utilização muito mais prática. Para lançar programas na VM basta apertar Ctrl+Shift+U que aparece um menu com todos os programas instalados na sua VM.

Demonstração do VMware Unity. Janelas da minha VM Linux e do Windows compartilhando o mesmo desktop!


Até agora, o desempenho tem sido bom. A velocidade da VM é boa e é muito prático poder usar o que cada sistema tem de melhor ao mesmo tempo.

Conclusão

Ao contrário da maioria da impressa de tecnologia, eu não estou tendo nenhum grande problema com o Windows 8. O sistema é rápido e, após uma breve adaptação, consigo fazer tudo o que preciso sem dificuldades. A experiência que tenho com outros sistemas certamente me ajudou na adaptação, porém achei que, se ignorarmos a nova interface, o Windows 8 é um ótimo sistema operacional.

terça-feira, 24 de setembro de 2013

Resumo do Artigo "Staff Detection with Stable Paths"

 O artigo "Staff Detection with Stable Paths" de Cardoso et al. apresenta um método para a identificação do compasso em imagens de partituras utilizando caminhos em grafos. Segundo os autores, as abordagens anteriores utilizam somente informações locais das imagens sem considerar seu contexto. Em especial, os autores não conhecem trabalhos que explorem o fato das linhas serem os componentes mais largos da imagem.

O método apresentado trata a imagem como um grafo cujos vértices são os pixels da imagem e as arestas conectam pixels vizinhos. O peso das arestas leva em conta tanto a cor como outras propriedades contextuais de imagens de partituras. Supondo que caminhos contendo pixels pretos são menos custosos que caminhos com pixels brancos, as linhas do compasso são caminhos com menor custo que conectam as duas margens da página e que possuem somente um vértice de cada coluna. Iterando este algoritmo é possível encontrar todas as linhas de uma imagem.

Os autores definem um caminho Ps, t como um caminho estável (Stable Path) se Ps, t é, ao mesmo tempo, o caminho mais curto entre o pixel s e sua margem oposta e o caminho mais curto entre o pixel t e sua margem oposta. O algoritmo apresentado para calcular os caminhos estáveis possui complexidade similar ao de computar os caminhos ótimos entre as margens. Não existe garantia que o algoritmo encontrará um caminho estável para cada linha do compasso. Por isto, o método é iterado diversas vezes na imagem, apagando as linhas encontradas anteriormente. Uma etapa final de pós-processamento descarta linhas redundantes e agrupa as linhas em compassos. Linhas que não fazem parte de um compasso são descartadas.

A avaliação do método é feita utilizando as imagens da base do MusicStaves. O algoritmo apresenta bons resultados na comparação com o algoritmo de detecção de linhas apresentado em Dalitz et al2008. Os autores também testam o efeito da utilização deste algoritmo no lugar do implementado no MusicStaves para a remoção de compasso e obtém resultados competitivos com o Skeleton (apresentado em Dalitz et al2008 e que não detecta as linhas explicitamente).


Referência completa: dos Santos Cardoso, J.; Capela, A.; Rebelo, A.; Guedes, C.; Pinto da Costa, J., "Staff Detection with Stable Paths," Pattern Analysis and Machine Intelligence, IEEE Transactions on , vol.31, no.6, pp.1134,1139, June 2009 [Download]

terça-feira, 17 de setembro de 2013

Resumo do artigo "A Robust Detector for Music Staves"

O artigo "A robust detector for music staves" de Leplumey et al. descreve um método para a extração das linhas do compasso em partituras. O diferencial deste trabalho é que seu algoritmo foi desenvolvido para ser robusto a pequenas variações de curvatura e a interrupções nas linhas. Infelizmente, os autores não  fazem uma avaliação rigorosa do desempenho do algoritmo, apenas exibem seu resultado em uma imagem e comentam que o algoritmo errou apenas uma linha em um conjunto contendo 10 imagens.

O algoritmo depende, como em diversos outros trabalhos da área, de dois parâmetros: a "altura" da linha e a distância entre as linhas. A estimação destes parâmetros é feita da seguinte maneira. Primeiro, a imagem é analisada coluna a coluna e são computadas as frequências do comprimento de cada seguimento preto de cada coluna. O parâmetro staff_height é definido como o comprimento de componentes mais frequente. O parâmetro staff_space é definido como a distância entre segmentos pretos mais frequente. A lista de segmentos pretos por coluna é usada também nas próximas etapas do algoritmo.

O método apresentado possui dois níveis de análise para a detecção das linhas. No primeiro, ele busca agrupar localmente pequenos segmentos, chamados de stains, que possuam alta semelhança para caracterizar o início de uma linha. No segundo nível, os stains são expandidos para formar uma linha do compasso de modo a maximizar seu comprimento. Por fim, as linhas que possuem pouca curvatura (menor que 10 graus) são agrupadas usando um critério que leva em conta a posição e o grau de paralelismo entre as retas. Grupos com pelo menos 5 linhas paralelas são identificados como compassos.

Referência completa: Leplumey, I.; Camillerapp, J.; Lorette, G., "A robust detector for music staves," Document Analysis and Recognition, 1993., Proceedings of the Second International Conference on , vol., no., pp.902,905, 20-22 Oct 1993 [IEEExplore (necessita de autenticação :( ]

sábado, 14 de setembro de 2013

Atualização do USP mobile

Continuando o desenvolvimento do USP mobile, adicionei uma tela com os horários das portarias da USP no aplicativo. Aqui está a versão atualizada.

Download Android

Download JavaME/Nokia

O USP mobile é um aplicativo que estou desenvolvendo que reunirá informações úteis para a comunidade Usp. O código está disponível no Github e estou aceitando contribuições de todo tipo. Sugestões são benvindas.

Se você baixou o programa, deixa um comentário aqui no blog.

quarta-feira, 11 de setembro de 2013

Resumo do artigo "An Effective Staff Detection and Removal Technique"

O artigo "An Effective Staff Detection and Removal Technique" de Bolan Su et al trata do problema de detecção e remoção das linhas de compasso em imagens de partitura. Os autores apresentam um novo método que modela o formato das linhas do compasso e utiliza o modelo estimado para a remoção do compasso.

O algoritmo é divido em 4 passos. No primeiro passo é aplicado um filtro 1D nas colunas da imagem que elimina grande parte dos símbolos musicais. No segundo passo, o modelo é estimado a partir da detecção preliminar obtida no primeiro passo. O modelo utilizado é uma sequência (Oi) de deslocamentos verticais, ou seja, a coordenada y do pixel k da linha é obtida somando Ok na coordenada y do pixel k-1. Para tornar o método mais robusto, o elemento Oi do modelo é determinado utilizando informações de todas as linhas presentes na imagem. Além disto, o algoritmo considera não somente o pixel imediatamente vizinho para o cálculo da orientação da linha, mas também os mais próximos das k colunas seguintes. O terceiro passo envolve a superposição da curva Oi encontrada no passo anterior para detectar a posição de cada linha na imagem. Por fim, a quarta etapa remove da imagem os componentes que cruzam as linhas encontradas e são mais compridos verticalmente do que o tamanho da linha detectado.

O método proposto foi testado no dataset CVC-MUSCIMA e comparado com um algoritmo de Line Tracking e com o ISI01-HA (vencedor da competição do ICDAR 2011). O algoritmo apresenta desempenho superior ao algoritmo de Line Tracking, porém inferior ao ISI01-HA. As principais vantagens do novo método seriam sua robustez à deformações que afetem o formato da linha, como curvatura e rotação. O algoritmo possui duas limitações. A primeira é a sua incapacidade de lidar com linhas grossas. A segunda limitação é a falta de precisão do modelo, que muitas vezes não encaixa perfeitamente nas linhas do compasso. Os autores atribuem esta discrepância a erros de interpolação e acreditam que incorporar informação local no modelo possa melhorar a detecção das linhas.

Referência completa: Su, B., Lu, S., Pal, U., & Tan, C. L. (2012, March). Aneffective staff detection and removal technique for musical documents. InDocument Analysis Systems (DAS), 2012 10th IAPR International Workshop on (pp.160-164). IEEE. [Download]