Relatório Laboratório 7

Processamento de Vídeo - Detecção com Haar Cascade

1. Introdução

Este relatório documenta os procedimentos e resultados do Laboratório 7 da disciplina de Processamento de Vídeo, cujo objetivo principal foi implementar técnicas de detecção de objetos e rostos utilizando classificadores Haar Cascade disponíveis na biblioteca OpenCV.

O experimento abordou detecção de rostos e olhos primeiro em imagens estáticas previamente armazenadas e depois em tempo real via webcam. O documento serve como referência técnica para futuras implementações de manipulação de mídias e captura com filtragem baseada em cascatas.

2. Fundamentos Básicos

A detecção de objetos por meio de cascatas Haar baseia-se no uso de características visuais simples chamadas Haar-like features, que representam contrastes entre regiões claras e escuras da imagem. Essas características são extraídas rapidamente graças ao uso da imagem integral, uma técnica que permite calcular somas de pixels em regiões retangulares com poucas operações, tornando o método adequado para aplicações em tempo real.

Durante o processo de treinamento, utiliza-se o algoritmo AdaBoost para selecionar as características mais relevantes entre milhares de possibilidades e combinar diversos classificadores fracos em classificadores fortes. Esses classificadores são então organizados em uma estrutura em cascata, onde cada estágio avalia se uma região da imagem pode conter o objeto de interesse.

Bibliotecas como o OpenCV implementam essa técnica de forma otimizada, oferecendo modelos pré-treinados e ferramentas para aplicar a detecção de forma simples, normalmente por meio do carregamento de um classificador em formato XML e da utilização da função detectMultiScale()

face_cascade = cv2.CascadeClassifier('haarcascade_frontalface_alt.xml')
eyes_cascade = cv2.CascadeClassifier('haarcascade_eye_tree_eyeglasses.xml')

gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5)
for (x,y,w,h) in faces:
    roi = gray[y:y+h, x:x+w]
    eyes = eyes_cascade.detectMultiScale(roi, 1.1, 5)
    # desenho dos retângulos
                    

3. Materiais e Métodos

3.1 Ambiente de Desenvolvimento

1. Ubuntu (Linux OS)

O que é: Uma distribuição Linux de código aberto.

Finalidade: Fornece o sistema operacional e o ambiente de desenvolvimento onde todas as ferramentas serão instaladas e executadas.

2. Terminal (Linux Shell)

O que é: Interface de linha de comando (CLI).

Finalidade: Utilizado para executar comandos do sistema, gerenciar ambientes, instalar softwares e rodar programas.

3. Conda / Miniconda3

O que é: Miniconda é um gerenciador de pacotes e ambientes leve para Python.

Finalidade:

  • Gerenciar versões do Python e suas dependências.
  • Criar ambientes isolados (como o PV25) para evitar conflitos entre projetos.
4. OpenCV

O que é: Biblioteca de Visão Computacional de Código Aberto.

Finalidade: Principal biblioteca usada para tarefas de visão computacional e processamento de imagens/vídeos (detecção de objetos, transformações, extração de características etc.).

Variantes:

  • OpenCV (compilado do código-fonte): Instalação completa com suporte a C++ e Python.
  • OpenCV-Contrib: Módulos extras desenvolvidos pela comunidade (ex.: reconhecimento facial, SIFT, SURF).
  • opencv-python (pip): Pacote pré-compilado do OpenCV para Python.
  • opencv-contrib-python (pip): Adiciona os módulos extras à instalação em Python.
5. Ferramentas de Compilação e Dependências

Essenciais para compilar e executar o OpenCV a partir do código-fonte:

  • build-essential: Compilador e ferramentas básicas de compilação.
  • cmake: Configura e gera os arquivos de build do OpenCV.
  • git: Usado para clonar os repositórios do OpenCV.
  • pkg-config: Auxilia no gerenciamento de caminhos de bibliotecas e dependências.
  • libgtk-3-dev: Suporte de interface gráfica para exibição de imagens.
  • libavcodec-dev, libavformat-dev, libswscale-dev: Codecs de vídeo/áudio.
  • libjpeg-dev, libpng-dev, libtiff-dev: Suporte a formatos de imagem.
  • libxvidcore-dev, libx264-dev: Bibliotecas de codificação de vídeo.
  • gfortran, libatlas-base-dev: Aceleração matemática.
  • python3-dev, python3-numpy: Cabeçalhos Python + NumPy.
  • libtbb-dev: Suporte a multithreading.
  • libopenexr-dev: Suporte para imagens HDR.
  • libv4l-dev, libdc1394-dev: Suporte a captura de vídeo.
  • libgstreamer-dev: Suporte a streaming de vídeo.
6. pkg-config

O que é: Ferramenta auxiliar para configurar flags de compilação e linkagem de bibliotecas.

Finalidade: Verifica se o OpenCV está instalado e acessível (pkg-config --modversion opencv4).

7. Python e C++

O que sao: Linguagens de programação usadas para rodar os scripts com OpenCV.

Finalidade: Fornece o ambiente de programação para desenvolver tarefas de visão computacional.

9. VLC Media Player

O que é: Reprodutor multimídia gratuito e de código aberto.

Finalidade: Permite visualizar vídeos e imagens fora do OpenCV, útil para testes e validação de resultados do processamento de vídeo.

3.2 Procedimento Experimental

Referências consultadas: documentação oficial (tutorial cascade) e repositório de modelos (haarcascades).

Primeira Parte: Carregamento de imagens dos membros da equipe e aplicação dos classificadores para detecção de rostos e olhos.

Segunda Parte: Adaptação do código para captura via webcam, detecção em tempo real e salvamento de frame ao pressionar tecla.

Parâmetros calibrados: scaleFactor, minNeighbors, e verificação de retornos para robustez.

4. Resultados e Análises

4.1 Resultados Obtidos

Para a primeira parte, temos abaixo os resultados obtidos ao rodar o código desenvolvido para a leitura e aplicação do filtro Haar cascade em uma imagem fixa:

Imagem Original
Imagem com filtro Haar

Abaixo, temos outro exemplo:

Imagem Original
Imagem com filtro Haar
Imagem Original
Imagem com filtro Haar

Já para a segunda parte, executamos o programa a fim de capturar uma imagem em tempo real através da webcam e aplicar o filtro instantaneamente. Abaixo, temos o resultado para esta parte:

Imagem com filtro Haar

4.2 Análise

  • Ajuste de scaleFactor impacta sensibilidade vs. velocidade.
  • minNeighbors mais alto reduz falsos positivos (especialmente olhos).
  • Conversão para escala de cinza é obrigatória para acelerar o matching das features.
  • Modelos pré-treinados evitam custo de treinamento próprio.

5. Conclusões e Comentários Finais

O laboratório demonstrou a viabilidade de Haar Cascade para detecção rápida de rostos e olhos em imagens e vídeo. A abordagem permanece útil em cenários de baixo recurso.

Lições: verificação de ret, calibração de parâmetros, tratamento de iluminação e liberação de recursos. A base construída permite extensão para detecção de outros objetos ou substituição futura por métodos baseados em CNN.

Aplicações futuras: autenticação básica, contagem de pessoas, apoio a pré-processamento em pipelines modernos.