Buscar

Um Estudo Sobre o Algoritmo Viola Jones

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 11 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UNIVERSIDADE FEDERAL DE SÃO CARLOS 
 
 
 
 
 
Apresentado à disciplina 
PROJETO ACADÊMICO EM COMPUTAÇÃO – TURMA B 
Sob docência de 
Prof. Dr. Wanderley Lopes de Souza 
 
 
 
 
Um Estudo Sobre o Algoritmo Viola-Jones para Detecção de Faces em Imagens 
 
Relatório Final 
 
 
 
 
 
Isadora Eliziário Gallerani – 726542 
Aluna de Bacharelado em Ciência da Computação 
Universidade Federal de São Carlos 
 
 
Trabalho orientado por 
Prof. Dr. Alexandre Luis Magalhães Levada 
Departamento de Computação 
Universidade Federal de São Carlos 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 São Carlos 
2018 
 
1. Resumo 
Este presente trabalho – o qual visa abordar um estudo sobre o já conhecido e disseminado 
algoritmo de detecção de faces Viola-Jones (Paul Viola e Michael Jones, 2001) – foi desenvolvido como 
o projeto final para a disciplina Projeto Acadêmico em Computação, referente ao Departamento de 
Computação da Universidade Federal de São Carlos (UFSCar), ministrada pelo Prof. Dr. Wanderley 
Lopes de Souza. 
Desde o início do desenvolvimento desta pesquisa a mesma consta de orientação e supervisão 
realizada pelo Prof. Dr. Alexandre Levada, professor adjunto do Departamento de Computação da 
Universidade Federal de São Carlos (UFSCar), campus São Carlos, o qual possui atuação em áreas 
correlatas ao tópico abordado neste trabalho: processamento de imagens e sinais e reconhecimento de 
padrões. 
O projeto apresentado neste documento tem como foco investigar uma abordagem de 
reconhecimento de faces, relacionando-a à aplicação do Viola-Jones, acoplado de métodos já conhecidos 
sobre o assunto para análise de imagens. Também será feito uso da linguagem Python e OpenCV para 
demonstrar o funcionamento do algoritmo. 
 
 
2. Introdução 
O trabalho em questão apresentado à esta disciplina é vinculado aos estudos do algoritmo Viola-
Jones (Paul Viola e Michael Jones, 2001), originalmente escrito utilizando as linguagens C/C++, sendo 
este o primeiro framework amplamente utilizado dentro de assuntos referentes à detecção de objetos em 
imagens, especialmente, faces humanas. 
Nesta proposta de pesquisa, será estudado a fundo cada uma das quatro etapas já previamente 
propostas pelos criadores originais do algoritmo. Cada uma das etapas constará de explicação teórica e 
uso de imagens para facilitar o entendimento dos tópicos. Ao final, será demonstrada e explicada a 
implementação do Viola-Jones de acordo com todos os seus requisitos e passos-a-passos. Porém, neste 
projeto, foi optado por utilizar Python e OpenCV, como fora solicitado e indicado pelo professor 
orientador. O objetivo é demonstrar que é possível construir um reconhecedor facial de maneira fácil e 
bastante rápida utilizando esta linguagem e biblioteca. 
Quanto aos resultados finais obtidos, serão trabalhados de duas maneiras: 
● Primeiramente, apresentando os resultados fornecidos de maneira correta pelo algoritmo – ou 
seja, aquelas imagens nas quais o algoritmo sinalizou corretamente a existência de faces; 
● Em segundo, os ditos resultados errôneos, nos quais são classificadas como faces partes da 
imagem que claramente não são. Também será tratada a motivação que levou o algoritmo ao erro 
e como é possível “consertar” os classificadores utilizados para tal ação. 
 
 
3. Trabalhos Correlatos 
 Para este estudo, alguns trabalhos foram previamentes fornecidos pelo professor orientador, Prof. 
Dr. Alexandre Levada, e outros foram encontrados ao realizar a Revisão Sistemática utilizando o software 
StArt. 
 Para a realização deste relatório intermediário, alguns foram amplamente utilizados, como o 
artigo original dos criadores do Viola-Jones, “Robust Real-Time Face Detection” [1]. Este foi bastante 
útil para realizar todo o embasamento teórico e técnico da pesquisa, justamente por se tratar do artigo 
original, o qual documenta todas as seções necessárias para a formulação das primeiras linhas de código 
do Viola-Jones. 
Porém, artigos como o “Rapid Object Detection Using a Boosted Cascade of Simple Features” 
[3], advindo do trabalho dos mesmos autores citados anteriormente, também foi utilizado para o pleno 
entendimento de outras etapas do algoritmo. Este artigo citado foi utilizado para aprofundamento no caso 
do uso da arquitetura em cascata de classificadores. Vale ressaltar que cascatas de classificadores são 
uma parte muito importante do concebimento do Viola-Jones e seu funcionamento correto, como será 
relatado na Fundamentação Teórica e Técnica, mais precisamente, no quarto passo. 
 O artigo “Implementing the Viola-Jones Face Detection Algorithm” [2] trata-se de um estudo do 
Viola-Jones, um pouco mais simplificado do que o artigo originalmente exposto. Este foi utilizado para 
entendimento nas partes em que o original [1] não refinou tanto, por aparentemente, contar com o 
conhecimento técnico do leitor. Neste também podemos analisar um modo de implementação do 
algoritmo, tornando interessante e bastante útil para a etapa final de conclusão de resultados do projeto, 
por necessitar de uma implementação em código e seu entendimento. 
 Já quanto ao “A Survey on Face Detection in the Wild: Past, Present and Future” [4], foi feito 
uso para entendimento genérico do assunto-base do algoritmo, quanto à Computação Visual e o 
entendimento e análise de imagens de maneira computacional, o que auxiliou ao explicar alguns tópicos 
referentes à este tema, os quais serão amplamente analisados na Seção 4, mais precisamente, passos um 
e dois. 
 
4. Fundamentação Teórica e Técnica 
O algoritmo Viola-Jones é um framework que atua sobre imagens, fazendo uso de diversas etapas 
e procedimentos de análise, os quais serão citados e desenvolvidos neste estudo. Por ser o primeiro desta 
área, é amplamente replicado em diversas outras técnicas que visam o mesmo objetivo ou similar. Sua 
aplicação dá-se na detecção dentro de diversas classes de objetos, porém, com maior motivação de uso 
dentro da busca por faces humanas. 
Afim de alcançar este objetivo, alguns passos são impostos. 
 
3.1 Primeiro Passo: Seleção de Recursos de Haar 
Esta etapa é baseada na busca por propriedades similares às características faciais, as quais podem 
ser combinadas ao utilizar os Recursos de Haar. Como toda face humana compartilha algumas 
características, será feita uma procura pelos chamados matches, que são as combinações encontradas 
entre as características da imagem e as características bases faciais, realizando uma análise por coloração 
de pixels em determinadas áreas. 
Algumas propriedades analisadas, são: 
● Localização e tamanho de olhos, boca, nariz; 
● Tipo de coloração de pixels de determinadas áreas (por exemplo, a região dos olhos são 
mais escuras do que a região das bochechas superiores, assim como a região da ponte 
nasal é mais brilhante do que a dos olhos). 
Em uma primeira etapa, transforma-se uma imagem normal em integral, e isso é feito alterando 
o valor de cada pixel de acordo com a soma dos demais adjacentes. 
 
Figura 1 – À esquerda, a imagem de entrada e à direita, o que seria a imagem integral dela. 
 
Assim, conforme as características correspondidas – chamadas de features – possíveis neste 
algoritmo, estas são procuradas dentro da imagem integral da enviada para análise. Nesta parte, será 
realizado o trabalho sobre as tais features em formatos do tipo retangular. 
 
Figura 2 – Tipos de retângulos que podem ser trabalhados dentro das imagens. 
 
Com estes tipos de retângulos e variantes em mãos, eles são expostos em imagens à procura das 
features. 
 
 
Figura 3 – Exemplo de posicionamento dos retângulos em um rosto.Com estes retângulos em mãos, é possível abordá-los de maneira matemática, utilizando estas 
informações extraídas para etapas futuras do processamento da imagem. 
 
3.2 Segundo Passo: Análise da Área Somada 
Nesta etapa realiza-se a análise das áreas retangulares de cada característica facial encontrada 
dentro da imagem integral. Como as áreas retangulares de cada característica acabam por serem 
adjacentes a pelo menos mais um destes retângulos, quaisquer dois retângulos podem ser calculados em 
seis referências de matriz, e segue-se que três retângulos calculados em oito e quatro retângulos 
calculados em nove, e assim por diante. 
 
 
Figura 4 – Representação de uma área somada de quadrado. 
 
3.3 Terceiro Passo: Aplicação de Algoritmo de Aprendizado 
Devido à alta complexidade e ao grande número de features retangulares encontradas e que 
devem ser avaliadas - sendo este um número superior até mesmo ao número de pixels na área em trabalho 
-, torna-se um tanto quanto inviável avaliar cada uma por si só - não apenas pelo tempo empenhado nesta 
única tarefa, mas também pelo custo/preço. 
Ao invés de trabalhar com o número completo de features, pode-se optar por utilizar um número 
muito pequeno destas ao combiná-las para montar um classificador. A dificuldade está em encontrar as 
features corretas. Por conta deste fato, torna-se de grande utilidade o uso de algum algoritmo de 
aprendizado. Mais especificamente, será tratado o uso do AdaBoost modificado, o qual é capaz de realizar 
a seleção das melhores features possíveis encontradas em fases anteriores, podendo, então, construir um 
classificador forte através de uma combinação ponderada dos classificadores tidos como fracos. Porém, 
sua modificação permitirá a seleção apenas das melhores features possíveis. 
Diante desta condição, é feito uso de um método simples de força bruta: a determinação de cada 
novo classificador fraco envolve a avaliação de desempenho de cada feature em todos os treinamentos 
realizados, tendo como base o seu erro ponderado, procurando encontrar o de melhor desempenho. 
Assim, diminui-se o peso de um exemplo corretamente avaliado e os que forem incorretamente 
classificados, mantém-se. 
 
3.4 Quarto Passo: Arquitetura em Cascata 
O princípio básico deste algoritmo em estudo força-o a varrer o detector diversas vezes na 
imagem em estudo. Mesmo que a imagem contenha uma ou mais faces - ou até mesmo nenhuma -, 
inúmeras sub janelas seriam negativas, justamente por não conterem nenhum match facial, ou seja, não 
contendo uma face humana em determinada área avaliada. 
Por conta desse fato, o Viola-Jones é levado a descartar não-faces ao invés de ficar 
incessantemente procurando por faces por conta da rapidez empregada nesta tarefa: é mais rápido 
descartar uma área que não possui rosto do que propriamente encontrar um. Assim, o uso de um único 
classificador forte torna-se inviável e custoso, e devido à isso, surge a necessidade de um classificador 
em cascata, sendo este composto por diversos estágios, cada qual fazendo uso de um classificador forte. 
Cada estágio irá dizer se determinada área não possui face ou se ficou em dúvida. Não sendo face, é 
automaticamente descartada. Em caso de dúvida, esta sub janela é levada para avaliação no próximo 
estágio. Assim, quanto mais estágios uma área passa, maior a chance dela, de fato, conter um rosto. 
Pelo andamento dos estágios, é normal e esperado que no início da avaliação o algoritmo aceite 
diversos falso-positivos, mas este fato não é tratado como um problema, pois espera-se que os estágios 
seguintes o classifiquem corretamente, até chegar ao último estágio e esse fornecer realmente as faces 
encontradas. 
 
5. Descrição do Projeto e Principais Resultados Obtidos 
 Após realizado o estudo sobre as principais características propostas, torna-se evidente a sua 
complexidade. Porém, neste projeto, será demonstrado como essa implementação pode-se tornar simples 
e rápida ao fazer uso da linguagem Python e a biblioteca OpenCV. 
 
5.1 Biblioteca OpenCV 
A OpenCV trata-se da mais popular e mais utilizada biblioteca dentro dos tópicos relacionados à 
visão computacional. Previamente, esta é original nas linguagens C e C++, e apenas atualmente foi 
remodelada para atender também à linguagem Python, a qual vem crescendo diariamente quanto ao seu 
número de adeptos. 
O uso desta biblioteca em específico foi feito por um motivo crucial: ela utiliza algoritmos de 
aprendizado de máquina justamente para procurar faces dentro de imagens. Este fato eliminaria a 
necessidade de implementar o AdaBoost, utilizado no algoritmo original do Viola-Jones. 
Como já fora tratado anteriormente, volta-se a reafirmar: não é uma tarefa simples detectar faces 
em imagens, ou seja, não existem testes fáceis e rápidos. Para que seja possível realizar essa detecção, é 
fundamental a existência de diversos padrões e recursos que busquem correspondência nas imagens. O 
algoritmo irá “quebrar” a tarefa principal – encontrar faces, de fato – em “mini tarefas”: nestas etapas, 
temos o uso dos classificadores. 
Infelizmente, para se calcular um rosto humano, há uma taxa de seis mil ou mais classificadores 
existentes para fornecer um resultado positivo quanto à busca. O algoritmo dá-se início no canto superior 
esquerdo e assim prossegue por pequenos blocos de dados. Ao final deste caminho, milhões de cálculos 
teriam que ser realizados e o computador, provavelmente, travaria. 
Assim, o OpenCV utiliza o método de cascata para quebrar os milhões de cálculos que podem 
existir dentro de uma única imagem: para cada bloco de dado, faz-se um teste rápido de comprovação. A 
face somente será finalmente detectada caso todos os blocos de dados sejam aprovados ao final. 
Este método cascata, dentro da OpenCV, é o conjunto de vários arquivos do tipo XML que contém 
os dados da própria biblioteca para realizar a detecção de objetos. Dentre estes arquivos, constam alguns 
relacionados à detecção de olhos, mãos, pernas, partes não humanas, etc. Assim, ao selecionar os recursos 
certos, torna-se fácil detectar um rosto. 
 
5.2 O Algoritmo 
O algoritmo final, escrito em Python, funciona da seguinte maneira: 
● O usuário pode inserir a imagem que desejar para fazer o teste; 
● Primeiramente, faz-se uso da cascata padrão para detecção de restos (um arquivo XML), 
fornecida já pela OpenCV; 
● Carrega-se a cascata para a memória para depois inicializá-la com a imagem desejada; 
● Por fim, uma função é utilizada para detectar a face real: 
○ Previamente, ela é apenas uma “função geral” utilizada para detectar objetos; 
○ Em segundo, uma subfunção é utilizada para avaliar a aproximação do rosto à 
câmera. É utilizado um fato para compensar este fato; 
○ Por fim, é realizada a contagem dos objetos detectados e dos encontrado ao seu 
redor, antes de afirmar se são ou não faces; 
○ Ao ter certeza, depois de aplicar os arquivos XML referentes à detecção de rosto, 
retorna-se uma lista de retângulos nas áreas em que o algoritmo acredita ter 
detectado corretamente uma face humana. 
 Vale ressaltar que, infelizmente, não são em todos os casos que o algoritmo apresenta um 
resultado coerente. Para este problema, é necessário fazer uma revisão de alguns parâmetros, como por 
exemplo, os fatores de escala da imagem. Ao realizar alterações nessa variável, pode-se encontrar uma 
acurácia maior, dependendo da necessidade da imagem (i.e, imagens com faces pequenas, ou faces muito 
próximas da câmera, ou até mesmo traços da imagem que possam confundir os classificadores). 
 
5.1 Resultados Obtidos com Imagens 
 Algumas imagens foram escolhidas aleatoriamente da Internet para serem realizados os testes. 
Estas figuras foram aplicadas aocódigo e geraram resultados passíveis de análise. Diversas 
imagens foram submetidas aos testes, mas para este projeto, serão relatadas apenas algumas que 
demonstram características relevantes a serem comentadas. 
 
 
Figura 5 – Imagem da Seleção do Brasil, constando de onze faces humanas. 
 
Quanto à Figura 5, o algoritmo foi capaz de alcançar seu objetivo com êxito: sem ser necessário 
qualquer tipo de alteração de parâmetros, ele foi capaz de detectar as onze faces humanas presentes. 
 
 
Figura 6 – Imagem contendo cinco faces humanas, porém, somente uma reconhecida. 
 
Já na Figura 6, o algoritmo não foi capaz de realizar o reconhecimento de modo correto. Este fato 
pode ter ocorrido pelo fato da imagem ser muito pequena e de pouca qualidade, o que dificultou a análise 
precisa de seus classificadores. 
 
 
Figura 7 – Imagem contendo uma face humana, a qual não foi identificada. 
 
Quanto à Figura 7, o algoritmo não foi capaz de realizar qualquer reconhecimento facial pelo fato 
de certas limitações quanto ao código construído, o qual não realiza o tratamento para reconhecer faces 
em que a mesma não se encontre numa posição “muito” vertical. Até alguns graus de inclinação, o 
algoritmo é tolerante, mas como na inclinação demonstrada na imagem, ele já passa a não reconhecer e 
não aciona qualquer indicativo de detecção. 
 
 
Figura 8 – Imagem com quatro faces, na qual o algoritmo reconhece seis. 
 
Na Figura 8, contendo apenas quatro faces claras e visíveis, o algoritmo retorna que foram 
encontradas seis. Claramente, aos olhos humanos de um usuário, existe algum problema quanto à esta 
constatação. 
Para consertar este caso, é necessário alterar o código quanto à acurácia de parâmetros, pois o 
mesmo pode estar “se confundindo” em meio às suas cascatas de padrões. 
 
 
Figura 9 – Imagem com quatro faces, na qual o algoritmo acusa encontrar cinco. 
 
Aumentando o parâmetro de escala em algumas unidades, o algoritmo demonstrou ter aumentado 
sua eficiência, mas ainda assim, não de maneira satisfatória: na imagem, a qual contém quatro faces, ele 
ainda detecta uma a mais. Ainda é necessário aumentar um pouco mais as unidades de escala para 
alcançar um resultado coerente. 
Assim, fica claro que o algoritmo não está perfeito para trabalhar por si só, ainda demandando de 
aperfeiçoamentos manuais mesmo após finalizar a análise da imagem. 
 
 
Figura 10 – Imagem constando de quatro faces. 
 
 Após aumentar a escala em mais algumas unidades, o algoritmo finalmente realiza a 
detecção correta de faces, retornando o resultado esperado pelo usuário. 
 
 
6. Conclusão e Trabalhos Futuros 
 Após meses de pesquisa quanto ao algoritmo Viola-Jones e suas diversas etapas e características, 
foi possível realizar a visualização da implementação do mesmo ao optar por uma maneira diferente de 
realizá-la, empregando Python e OpenCV em conjunto. Esta dupla permitiu que fosse encontrada uma 
implementação muito mais rápida e fácil em comparação à original, viável para o tempo disponibilizado 
para a realização desta pesquisa. 
 Como já fora previamente demonstrado nos resultados, o algoritmo não é perfeito e apresenta 
falhas. Porém, essas falhas podem ser corrigidas com alteração de variáveis de escala dentro do código, 
aumentando a sua acurácia. Mas esse fato só pode ser realizado de acordo com cada imagem, em 
específico – não são todas que apresentam resultados coerentes ao elevar ou diminuir o valor da taxa. 
 Porém, quanto à sua ideia base, o algoritmo demonstra-se suficiente na maioria dos casos, 
apresentando resultados interessantes e corretos. 
 Quanto aos trabalhos futuros, seria interessante implementar neste código uma funcionalidade 
referente a rotação de faces em imagens, um problema relatado em um dos resultados apresentados. 
Como o algoritmo só consegue reconhecer rostos em posição vertical ou levemente inclinados, tornaria-
o mais completo uma função que analisasse os graus de rotação em relação às cascatas de classificadores. 
 Ademais, este projeto tornou-se uma experiência intrigante e foi capaz de apresentar um estudo 
mais minucioso da técnica em análise. 
 
7. Referências 
 [1] Paul Viola, Michael J. Jones, Robust Real-Time Face Detection, International Journal of 
Computer Vision, 2004. 
 [2] Ole Helvig Jensen, Implementing the Viola-Jones Face Detection Algorithm, Kongens 
Lyngby, 2008. 
 [3] Paul Viola, Michael J. Jones, Rapid Object Detection Using a Boosted Cascade of Simple 
Features, Accepted Conference of Computer Vision and Pattern Recognition, 2001. 
 [4] Stefanos Zafeiriou, Cha Zhang, Zhengyou Zhang, A Survey on Face Detection in the Wild: 
Past, Present and Future, Computer Vision and Image Understanding, 2015.

Continue navegando