Wednesday, October 1, 2008

Entregue!

Desde o último post, ainda foram feitos novos testes com utilizadores para incluir na dissertação,

que...

foi ontem entregue! :)

Os próximos passos são:
1. Fazer optimizações e ajustes para produzir uma versão final da dll.
2. Preparar a apresentação para a defesa
3. Defender a tese!

Portanto, estamos mesmo a chegar ao fim...

Monday, September 15, 2008

Mais amostras =)

Hoje fiz nova incursão ao IST para recolher amostras para testes.

Consegui arranjar 22 voluntários.

Estamos então na fase em que resta correr o treino e os testes e esperar que os resultados sejam bons...


Notícias em breve!

Wednesday, September 10, 2008

Recolha de Amostras

Acabei de recolher amostras de expressões faciais de utilizadores. No total, consegui 47 pessoas para treinar o demonstrador! 

Depois de recolha de mais resultados para testes, será feita a análise e processamento dos dados.

Saturday, September 6, 2008

Escrita da Dissertação

Desde o último post, tenho estado a dedicar-me à escrita da dissertação... 

Para a semana devo começar (e acabar, espero!) os testes com utilizadores, para proceder à análise dos resultados do trabalho.

Friday, July 18, 2008

Mais uns degraus...

Tenho estado um pouco ausente nos últimos tempos do Blog, mas não do Facial Emoticons:

Desde o último post, em que fechei o código C++ numa dll e fiz o primeiro script em Python, algumas coisas mudaram:

- Uma primeira avaliação dos resultados mostrou que era necessário adicionar novas features por forma a distinguir algumas expressões: de facto, a diferença entre happy e sad, que é uma das mais importantes, nem sempre era evidente ao classificador através do conjunto anterior de features.

- Uma vez que durante o treino do classificador alguns valores de features ficavam a zero entre intervalos adjancentes com muitos hits, o classificador foi alterado para utilizar funções gaussianas.

Com estas alterações foram feitos novos testes, principalmente tendo em conta a expressão happy versus a expressão sad.


Foram feitos ainda alguns melhoramentos ao código no que diz respeito aos classificadores e ajustes dos pesos atribuídos às diferentes features. Com a detecção e correcção de alguns aspectos, conseguiu-se uma hit-rate de aproximadamente 95% na avaliação da expressão sad versus a expressão happy. Em termos de resultados globais entre as duas expressões (tendo em conta estas duas classes), obteve-se uma taxa de sucesso de cerca de 80%.

Em relação às restantes expressões, e de acordo com o modelo probabilístico Bayesiano que decidimos usar, à medida que o número de classes aumenta, a hit-rate baixa, como é característica do próprio modelo probabilístico. Contudo, os resultados globais são promissores, uma vez que a expressão predominante avaliada pelo classificador é a correcta em todos os casos. No que diz respeito à qualidade do classificador, resta fazer a avaliação!

Finalmente (desta vez vou debitar todas as novidades para tentar compensar a minha fraca assiduidade ao blog nos últimos tempos!), estão a ser desenvolvidos dois protótipos, mais uma vez em Python, que pretendem mostrar o funcionamento do projecto. Dentro de pouco tempo farei um post com os screenshots destes.

Neste momento, encontro-me a escrever a dissertação, tentando focar essencialmente nesta primeira versão o trabalho relacionado e o que tem vindo a ser desenvolvido.

Monday, May 19, 2008

Facial Emoticons Versão Library

Por forma a poder utilizar-se a detecção de expressões faciais por aplicações externas, e já pensando na utilização pela interface a desenvolver, tranformei o projecto já existente numa biblioteca dinâmica.

Adicionalmente, foi acrescentada à dll uma funcionalidade para poderem obter-se as features existentes numa imagem.

Como definimos que o desenvolvimento da interface e de outras aplicações para testes e demonstração seria em Python, foi necessário adaptar esta biblioteca para a sua utilização pelo Python. Para tal, recorri às bibliotecas Boost, que permitem criar um wrapper que funciona como proxy entre o Python e a dll desenvolvida em C++.

Finalmente, foi criado um script em Python que, dada uma directoria, processa todas as imagens, devolvendo o conjunto de valores correspondentes às features identificadas, para posterior processamento e geração de gráficos que auxiliem a visualização das variações dos elementos faciais.

Sunday, May 4, 2008

Modelo elástico robusto

Depois de o modelo estar a fazer uma boa adaptação nos casos em que encontra correctamente as features, foi necessário garantir uma conclusão aceitável para o reconhecimento, mesmo quando alguns elementos não são detectados.

Desta forma, é feita uma adaptação progressiva do modelo às features que vão sendo detectadas e, caso alguma não seja identificada, é utilizada a estimativa do modelo adaptado.

Na figura seguinte, o caso extremo em que não é encontrado nenhum elemento, é estimado um conjunto de pontos, de acordo com o modelo elástico e a partir das características métricas do rosto.


Nestas duas imagens, é apresentada a estimativa adaptada após a identificação dos olhos, seguida do resultado final já com as features correctamente identificadas.





Como um exemplo de detecção de variação de expressões, pode ver-se na imagem abaixo a adaptação do modelo à localização das sobrancelhas.


Monday, April 21, 2008

Modelo e Expressões

A adaptação do modelo de pontos às features do rosto já funciona correctamente!!

Já temos bastante precisão nos vários casos. Um exemplo de funcionamento em dois rostos com expressões distintas e em ambientes de luminosidade bastante diferentes é ilustrado nas imagens abaixo :)




Imagens: Productive Age Labs' (University of Texas) Face DB

Wednesday, April 9, 2008

Modelo Adaptativo

Após a interrupção forçada devido a problemas logísticos com o meu portátil, voltei à carga!...

Em relação ao último post houve bastantes evoluções:

-- Detecção da boca;
-- Aumento de precisão na detecção de todas as features;
-- Criação de um rosto average;
-- Construção de um modelo de pontos correspondente às features do rosto médio;
-- Pedido de acesso a bases de dados de rostos (com diferentes expressões faciais);
-- Adaptação do modelo aos elementos faciais principais (pode ver-se na figura abaixo!).

Com este modelo, que dentro dos próximos dias terá um carácter mais dinamicamente adaptativo, creio ser possível determinar a expressão facial com sucesso.



Wednesday, February 6, 2008

Normalização. Detecção de Sobrancelhas.

Ao longo dos últimos dias tenho trabalhado em:

1. Testes para normalização das dimensões das imagens utilizadas;
2. Detecção de sobrancelhas e respectivos testes.

A detecção de sobrancelhas encontra-se funcional neste momento, como pode observar-se na figura abaixo:


A ideia é encontrar-se estatisticamente um desvio-padrão relativo à distância mínima entre os olhos e as sobrancelhas. A partir deste valor (e após a operação de rotação da cara de modo a "endireitá-la") defini uma região de interesse acima dos olhos onde procurar as sobrancelhas. Seguidamente, apliquei um algoritmo Canny para detecção de contornos. Após o ajuste e manipulação dos pontos obtidos, os resultados estão à vista:

Na primeira imagem, é mostrado o contorno superior e inferior da sobrancelha, enquanto que na segunda é traçado um polígono que define os contornos das sobrancelhas.

Já estamos mais perto de ter as "caricaturas" das imagens de input. O próximo passo é a detecção precisa da boca.

imagens - University of Regensburg, Alemanha, Average Faces

Tuesday, January 29, 2008

Apresentação. Relatório Intercalar.

Nos últimos dias tenho estado a trabalhar em:

- Preparação da apresentação do trabalho para a sessão de amanhã
- Relatório intercalar da tese - basicamente, adaptar o relatório de survey de modo a contemplar os objectivos do trabalho, o que já foi feito e o planeamento do que falta.

Entretanto, e principalmente por causa dos exames, não tenho produzido muitos mais resultados "que se possam ver", no que diz respeito ao aperfeiçoamento da extracção de features...

Thursday, January 17, 2008

Melhoria da Detecção e Esboço dos Elementos Faciais

Na tentativa de desenhar os contornos dos elementos faciais detectados, detectei que as features nem sempre eram correctamente identificadas. Para melhorar a performance dos classificadores, foram feitas algumas alterações:

- De acordo com o rosto identificado, é eliminado todo o resto da imagem antes de serem identificados os restantes elementos faciais, especificando a região de interesse (ROI) sobre a qual trabalhar. Deste modo, elimina-se informação supérflua;

- Utilizando as coordenadas relativas ao centro de ambos os olhos, é calculado o ângulo de inclinação do rosto. Após a obtenção deste ângulo, é feita uma rotação de forma a alinhar os dois olhos (o que consequentemente alinha o resto da face, facilitando a detecção dos restantes elementos);

- A imagem é convertida em apenas um canal de cor.

- O contraste é aumentado através de uma normalização do histograma.

A imagem original, bem como o resultado obtido através destes quatro passos pode ser visualizado abaixo:
Após a detecção destes elementos, são desenhados sobre a imagem original os contornos relativos aos elementos detectados. No caso dos olhos, os resultados são bastante satisfatórios, conseguindo-se ajustar bastante bem o polígono a estes. No entanto, no caso da boca, a detecção ainda nem sempre é correcta. Como tal, será ainda necessário melhorar a performance do respectivo classificador Haar em cascata. A título de exemplo, podemos ver o resultado final na imagem:
Falta ainda efectuar o processo de detecção das sobrancelhas. A localização precisa dos olhos que se consegue neste momento será um bom ponto de partida.

Sunday, January 6, 2008

Esboço dos Elementos Faciais Detectados

Desde o último post, consegui melhorar a exactidão de extracção de elementos faciais através de alguma manipulação das funções implementadas e utilização de melhores classificadores de Haar em cascata.

Apesar de não ter ainda conseguido desenhar um esboço das features faciais de um rosto, já obtenho uma estrutura com os pontos correspondentes a estes. No entanto, devido ao facto de a documentação da biblioteca (nomeadamente em relação a este tipo de estruturas muito específicas) ser um pouco escassa, as minhas tentativas de acesso à estrutura não permitem ainda obter a totalidade dos pontos necessários a este esboço.


Após a obtenção destes pontos, pretendo fazer um "refinamento" dos mesmos, obtendo os pontos que considerei como pontos-chave para o estudo. Deste modo, em relação às sobrancelhas serão mais importantes os pontos com coordenadas x e y mais extremas, traçando-se uma espécie de losango (a expansão do losango nos yy corresponde ao levantamento das sobrancelhas e a aproximação dos extremos em xx tem a ver com expressões em que se franze o sobrolho [apreensão, repulsa]).
O mesmo acontece em relação à boca. Estes pontos são o suficiente para detectar a abertura da boca, bem como o arqueamento da linha entre os lábios.
Para detectar a abertura e fecho dos olhos, os elementos essenciais terão a ver com os pontos no eixo dos yy.