Archive for October, 2006

BugBrother

BugBrother é o protótipo (ou melhor, versão de desenvolvimento) do programa que eu estou desenvolvendo na Embrapa, o SACAM, que significa Sistema de Análise Comportamental de Animais em Movimento. Sua função, agora que a sigla é conhecida, é um tanto óbvia: Consiste em capturar imagens de uma entrada de vídeo e aplicar algoritmos de detecção de movimento, a fim de guardar uma trilha do movimento realizado pelo animal. A partir dessa trilha e após definir áreas numa imagem de referência é possível reportar estatísticas úteis para estudos, realizados geralmente por entomólogos. O experimento básico feito por eles é realizado com o auxílio de um olfatômetro em forma de Y, onde o inseto é liberado no pé do Y e nas outras duas extremidades são liberados feromônios ou outras substâncias. As estatísticas geradas são úteis no estudo de novas armadilhas químicas para insetos, muito menos danosas do que agrotóxicos.O funcionamento básico do programa passa por essas etapas:
- Capturar a imagem de uma entrada de vídeo (atualmente qualquer dispositivo compatível com Video4Linux)
- Aplicar um algoritmo de detecção de movimento e guardar as coordenadas (X,Y) geradas pelo movimento detectado.
- A partir dessas coordenadas calcular parâmetros como tortuosidade, desvio angular e velocidade do inseto analisado.
- Gerar relatórios.
Atualmente os dois primeiros itens estão funcionais, o terceiro está próximo de ser terminado e o último começará a ser desenvolvido na próxima semana.

Um ponto que possa ter causado interesse: digo que é o protótipo pois no momento ele está sendo desenvolvido usando Python + PyGTK + GStreamer. Devido a problemas de desempenho (principalmente em relação ao algoritmo de detecção) ele será implementado novamente, em C + GTK+ + GStreamer, após a conclusão e avaliação do protótipo. O que é uma pena, pois do ponto de vista de clareza de código e reaproveitamento será um retrocesso. Mas a vida não é sempre o que a gente quer =D

GStreamer

No ano passado eu descobri um dos melhores livros que eu li na minha vida, O Guia do Mochileiro das Galáxias, de Douglas Adams. Pouco depois de terminar de ler (duas vezes) eu fiz uma busca por Douglas Adams no Google. E um dos links retornados foi uma sessão de perguntas e respostas do Ask Slashdot, onde ele fala sobre MAX, uma linguagem de programação musical de alto nível orientada a objetos, quando perguntaram sobre a obsessão do personagem Richard McDuff, do livro Dirk Gently’s Holistic Detective Agency, de mapear processos naturais em música. Eu comecei a procurar por MAX e acabei achando que seu criador, Miller Puckette, criou também o PureData, que faz o mesmo e é open source.
Depois de algum tempo eu entendi como ele funcionava, e eu fiz algumas coisinhas simples, mas eu não usei ele por muito tempo. E então eu fiquei sabendo da existência do GStreamer. Apesar de algumas diferenças, eu fiquei maravilhado com quão simples era fazer algumas coisas que eram bem difíceis no PureData.
De fato, eu não sei como as coisas funcionam dentro do PureData, mas eu realmente gostei de como o GStreamer foi feito: existem Elements, que tem uma função específica, como ler dados de um arquivo, decodificar dados ou mandar dados para uma placa de som; existem Bins, um container para uma coleção de elementos, e Pipelines, um tipo especial de Bin que permite a execução dos elementos contidos; e existem Pads, que são usadas para negociar ligações e fluxo de dados entre elementos. E é só isso. Com essas partes simples, todas juntas, coisas muito complexas podem ser feitas, como o Flumotion, um servidor de streaming, e o PITIVI, um editor não-linear de vídeo.E, claro, o grande BugBrother, o protótipo do programa que eu estou fazendo lá na Embrapa. Mais sobre esse em outro post.