Detecção e rastreamento de faces em vídeos

VN:RO [1.9.11_1134]
segunda-feira, 14 d fevereiro d 2011
Por Filipe M. S. de Campos, Coop10. Siga no Twitter

Olá pessoal! Neste artigo, e nos próximos dessa série, vou compartilhar com vocês sobre o projeto da minha iniciação científica. Nesse artigo, vou me restringir a explicar porque fui fazer essa IC, o que era o projeto e os resultados obtidos. Nos próximos artigos, vou detalhar alguns aspectos técnicos relacionados à visão computacional utilizados durante o projeto.

Lena detectada

Figura 1 - Exemplo de detecção facial - Lena

.

Como tudo começou?

Na verdade, a história não é assim tão simples e está dentro de um contexto maior e encadeada com acontecimentos anteriores. Mas como eu não estou aqui para contar a história de minha vida, vou contar o que interessa dentro desse contexto.

Meu interesse por visão computacional começou de forma inesperada e inclusive sem saber que o que eu estava me interessando chamava-se visão computacional. Eu, o Barbolo e o Ivan estávamos tendo algumas ideias relacionadas a encontrar coisas em imagens, juntar várias câmeras e criar “uma câmera” que enxergasse para todos os lados e coisas parecidas. Discutíamos bastante sobre o assunto e também como transformar essas ideias em aplicações reais para que pudéssemos encontrar nosso próximo projeto empreendedor. Mas normalmente eu era o mais empolgado com os possíveis projetos que poderiam surgir dentro dessa nova área que estávamos descobrindo.

Pois é, mas eu e meus amigos não somos os únicos seres pensantes desse planeta, claro que já existiam diversas coisas a respeito, inclusive uma tal área da computação que estudava toda essa parte de processamento e análise de imagens, a visão computacional. Podemos definir rapidamente visão computacional como uma ciência que se encarrega de ensinar o computador a enxergar como um humano.

Além disso, a tal bola que enxergava pra todos os lados já existia (figura 2), e pouco tempo depois descobrimos uma empresa, aqui mesmo no Brasil, que estava mexendo exatamente com aquilo que começamos a pensar.

Figura 2 - Câmera que enxerga para todos os lados - Já existe!

Nessa época, estava por vir mais um módulo de estágio do cooperativo. Meu interesse por visão aumentava, mas como não temos nenhuma matéria relacionada a isso na graduação, ficava um pouco complicado deslanchar em cima do assunto sem ter conhecimento nenhum sobre ele, era preciso estudar. Foi aí que decidi fazer do estágio uma iniciação científica, que inclusive, fazer uma IC, era algo desejado por mim já do primeiro ano da POLI. E posso dizer que não me arrependo nem um pouco. Hoje, um ano e meio depois, creio realmente ter encontrado o campo que gosto dentro da computação, inicio meu mestrado nessa área esse ano e também começo minha empresa que atuará nesse segmento, que no nosso país, ainda não é muito desenvolvido.

Tendo decidido o que eu ia fazer do estágio, fui correr atrás de quem mexia com visão na USP. Comecei pela POLI. Perguntei para vários professores e colegas até que cheguei em alguns professores que me atenderam. Entre eles posso citar o Hae Yong Kim e a Anna Helena Reali Costa. Ainda em busca de mais oportunidades para ter uma melhor opção de escolha, além de querer conhecer quem mais mexia com isso, conversei com professores do IME-USP. Dentre eles, Roberto Marcondes Cesar Junior, Roberto Hirata Junior e mais intensamente com o Marcel Jackowski e com o Carlos Hitoshi Morimoto.

Eu estava procurando algo relacionado a faces. Não lembro mais exatamente o motivo, mas tinha “cismado” que queria aprender mais sobre reconhecimento facial, ou algo relacionado a faces. Já que eu não conhecia os professores, minha escolha foi baseda no projeto que eu mais me identifiquei e que estava relacionado ao meu interesse. O projeto foi o do professor Hitoshi e portanto fiz a iniciação com ele no IME.

Espero com essa primeira parte ter ajudado alguns indecisos com relação a iniciação científica, estágio e o uso dele para realizar uma IC (sim, é possível e não arranca pedaço :) ), facilitado a busca por professores que mexem com visão, além de ter despertado interesse em alguém para conhecer mais sobre de visão computacional, correr atrás de suas vontades, preferências e do que gosta de fazer. Espero ter motivado alguns a sair da mesmice e não achar que é refém do que já existe, parece ser o padrão ou o que deve acontecer.

.

O projeto - Criação automática de índices de faces para aplicação em hipervídeo

Na iniciação científica, sob a orientação do professor Hitoshi, investigamos formas automáticas para a criação de índices para hipervídeos baseados em faces. Similar ao conceito de hipertexto, um hipervídeo é um vídeo não linear que permite ao usuário acessar outros hipervídeos por meio de links distribuídos ao longo do hipervídeo. O primeiro artigo do Bit a Bit foi justamente sobre hipervídeo. Então, se você não lembra ou não sabe o que é, leia o artigo O que é Hipervídeo?.

Durante o projeto foram estudados algoritmos de visão computacional que foram utilizados no desenvolvimento de um sistema, utilizando a biblioteca OpenCV juntamente com Python, com a capacidade de detecção e rastreamento de faces para que então possibilitasse a criação automática de índices para hipervídeos.

Cada face detectada seria adicionada a uma estrutura contendo informações sobre as tomadas em que ela apareceu no vídeo. Uma tomada pode ser definida como o conjunto mínimo e sequencial de quadros que transmite significado. Este é um conceito importante para hipervídeo, pois pode-se desejar que um link esteja presente durante uma tomada, mas não na próxima. Consequentemente, um hipervídeo requer algoritmos capazes de detectar as transições de tomadas que foi foco de outras atividades de pesquisa do IME.

Entre outras várias aplicações possíveis, esse projeto visou utilizar essa estrutura como um índice visual que permita ao usuário clicar em uma face para visualizar informações do personagem e acessar outras tomadas onde o personagem aparece no vídeo, o que poderia ser aplicado na TV Digital, DVDs ou mesmo na internet. Além disso, existia a relação do nosso trabalho com um projeto dentro do TIDIA-Ae que consistia na criação de ferramentas de hipervídeo para uso em plataformas de educação a distância.

Ao longo dessa série de artigos, me concentrarei na detecção, no rastreamento e no início da classificação das faces, pois essas foram as partes centrais dos meus trabalhos no projeto. Para a detecção foi utilizado o algoritmo de Viola e Jones, baseado em filtros de Haar em cascata, para o rastreamento foi utilizado Camshift e para a classificação das faces utilizou-se conceitos como correlação, transformação afim e Kmeans.

.

Alguns resultados

Neste tópico, apresentarei algumas imagens demonstrando resultados das etapas do projeto. Mais detalhes sobre os resultados de cada etapa serão encontrados nos próximos artigos dessa série.

Na etapa de detecção, era possível detectar primordialmente faces frontais sem que elas estivessem rotacionadas ou fossem muito pequenas. Seguem exemplos:

Detecção de face

Figura 3 - Exemplo de detecção de face

Figura 4 - Exemplo de detecção de múltiplas faces.

Com a adição do rastreamento, assim que uma face era detectada, o rastreador entrava em ação e seguia a movimentação da face pelo vídeo sem a necessidade da detecção. Isso garantia maior robustez já que era possível manter a trajetória das faces laterais ou rotacioandas além de ser computacionalmente menos custoso. Seguem exemplos:

Figura 5 - Face de lado não é perdida quando utiliza-se o rastreamento.

Figura 6 - Face rotacionada continua a ser identificada pelo sistema.

Figura 7 - Mesmo com a pessoa praticamente de costas, ainda é possível encontrar sua face.

Para a classificação das faces, foi necessário extrair as características faciais como os olhos, o nariz e a boca.

Figura 8 - Pode-se observar o centro encontrado para o nariz, olhos e boca.

Também foi realizada uma transformação afim para cada face e a aplicação de uma máscara para então calcularmos a correlação entre as faces.

Figura 9 - A figura apresenta, na coluna da esquerda, a face após a transformação afim e equalização do histograma. Ao centro a máscara aplicada à imagem e na coluna da direita o resultado da aplicação da máscara.

.

.

Artigos da série:

Próximo: Como detectar faces em vídeos?

.

VN:F [1.9.11_1134]
Rating: 5.0/5 (4 votes cast)
Detecção e rastreamento de faces em vídeos, 5.0 out of 5 based on 4 ratings
Related Posts with Thumbnails

Filipe Morgado Simões de Campos
Filipe Morgado Simões de Campos

Mestrando em Ciência da Computação no tema de Visão Computacional e formado em Engenharia de Computação (2010). Atualmente, além de ser um dos administradores do Bit a Bit, alia seu mestrado ao empreendedorismo. Ainda, foi cofundador do Amo DinDin (2007) e desenvolveu parceria e produtos de busca com o BuscaPé, sendo um dos idealizadores do Pé Direito (2009).

Tags: , , , , , , , , ,

8 Comentários para “Detecção e rastreamento de faces em vídeos”

  1. Demais, Filipão!

    Ótimo artigo! Ótima escolha de imagens de teste (The Office)!

    Tenho certeza que sua empresa de visão vai decolar!

    VN:F [1.9.11_1134]
    Rating: +2 (from 2 votes)
    #412
  2. Renan Mendes

    Oi, Filipão.

    Então, vou começar daqui a um mês mais ou menos um estágio na área de visão computacional, mas não no reconhecimento de faces. Fiz uma matéria aqui na França sobre Morfologia Matemática (vc deve ter estudado algo sobre isso tb, com os elementos estruturantes, erosão, dilatação, etc, etc) e tb me interessei no assunto. Quando voltar pra Brasil, quero ver onde vc vai estar com a sua empresa. Vai ver vc não arruma um sócio? Hehehe.

    Abraços e parabéns pelo artigo, pelo mestrado e pela coragem de começar mais um novo empreendimento.

    Renan

    VA:F [1.9.11_1134]
    Rating: +1 (from 1 vote)
    #413
  3. Caro Felipe, parabéns pelo sucesso!
    Sou da área da Física mas estou me interessando pela Visão Computacional. Achei simples e completo o modo como você traça o pefil do artigo. Estou começando mas já estou um pouco assustado com a sequencia dos trabalhos. o OpenCV é minha motivação principal. Gostaria de receber alguma coisa simples, mas completa, que eu pudesse reproduzir aqui no meu “Linux Mint 17. Parabens e sucesso nos seus empreendimentos. gostei muito de sua história. Avante!

    VA:F [1.9.11_1134]
    Rating: 0 (from 0 votes)
    #1306
    • Filipe M. S. de Campos

      Olá, Celestino!
      Obrigado! Isso aí, vamos em frente!

      Sobre a outra parte de sua mensagem, fique frio. Vá com calma que você chega lá. Sobre códigos prontos, eu te sugiro os próprios exemplos que vem no OpenCV. No zip que você baixa para instalar a biblioteca existem diversos exemplos, é só você compilar e rodar para ver o que acontece e acompanhar o código para aprender como usar o OpenCV.
      O código da IC usa uma versão bem antiga do OpenCV e do wrapper de python que eles usavam na época que não era legal, então nem rola usar mais ele hoje em dia. A melhor opção para ver algo funcionando e pegar o jeito é seguir os exemplos do OpenCV. No site da documentação do OpenCV tem explicações sobre esses exemplos também: http://docs.opencv.org/doc/tutorials/tutorials.html

      Abraços

      VN:F [1.9.11_1134]
      Rating: +1 (from 1 vote)
      #1307
      • Celestino Lima

        Caro Fellipe, boa tarde e obrigado pela informação sobre a IC. Eu estive batendo cabeça com alguma coisas. a dica do tutorials.html realmente mudou meu cenário! Obrigado mesmo!!

        VA:F [1.9.11_1134]
        Rating: 0 (from 0 votes)
        #1318
  4. Rodolfo

    Bom dia, Filipe estou iniciando os estudo em visão computacional e estou muito interessado na área, mas estou tendo algumas duvidas de como fazer o uns exercicios e gostaria de tirar umas duvidas com você, se possível tem como você pode me passar o seu email? atenciosamente rodolfo miranda

    VA:F [1.9.11_1134]
    Rating: 0 (from 0 votes)
    #1316

Deixe um Comentário

Spam Protection by WP-SpamFree

Get Adobe Flash playerPlugin by wpburn.com wordpress themes