Relatório Laboratório 1

Processamento de Vídeo

1. Introdução

Este relatório documenta os procedimentos e resultados do Laboratório 1 da disciplina de Processamento de Vídeo, cujo objetivo principal foi iniciar os trabalhos com a biblioteca OpenCV e estabelecer a base para o desenvolvimento de tarefas de visão computacional.

O experimento focou na preparação e configuração do ambiente, no estudo dos comandos fundamentais de entrada e saída de imagens e vídeos a partir de arquivos e na implementação de scripts para captura de mídia utilizando a webcam.

Este documento visa servir como referência técnica para a equipe sobre a programação de manipulação de mídias e câmeras.

2. Fundamentos Básicos

O processamento de vídeo e imagem se baseia na manipulação de dados em formato de matriz, sendo a biblioteca OpenCV a ferramenta central, responsável por fornecer as rotinas de Entrada/Saída.

No OpenCV, uma imagem estática é carregada como uma matriz NumPy, onde cada elemento é um pixel de cor, sendo o padrão de canais o BGR (Azul, Verde, Vermelho).

Já o vídeo é tratado como uma sequência de imagens estáticas, chamadas de frames, que são processadas individualmente em um loop através do objeto `cv2.VideoCapture` e exibidas na tela a uma taxa de FPS (Frames por Segundo), métrica fundamental para a avaliação do desempenho de qualquer algoritmo de processamento em tempo real.

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 Processamentos Basicos de Imagem

A) Leitura de Imagem e visualizacao na tela

Inicialmente, utilizado o codigo fornecido pelo professor, visto abaixo:

                                        
                    import numpy as np
                    import cv2 as cv

                    img = cv.imread('messi5.jpg')

                    cv.imshow('image',img)

                    k = cv.waitKey(0)

                    if k == ord('s'):
                        cv.imwrite('messi5.png', img)

                    if k == 27:         # wait for ESC key to exit
                        cv.destroyAllWindows()

                                        
                                    

    Alteracoes realizadas:

  • Salvamento do arquivo em .png, ao pressionar a tecla 's'
JPG
PNG
B) Leitura e Gravacao de Video

Estudar o tutorial da biblioteca openCV e detalhar os 5 codigos fornecidos.

video_write_to_file:

Le video da pasta Resources e o reproduz, salvando-o frame a frame no arquivo output.avi, ate que seja interrompido pressionando a letra 'q'.

video_write_from_webcam:

Le frames capturados pela webcam e os reproduz, salvando-os frame a frame no arquivo output.avi, ate que seja interrompido pressionando a letra 'q'.

video_read_from_webcam:

Le frames capturados pela webcam e os reproduz, ate que seja interrompido pressionando a letra 'q'.

video_read_from_file:

Le video da pasta Resources e o reproduz, ate que seja interrompido pressionando a letra 'q'.

video_read_from_image_sequence:

Le uma serie de imagens da Resources e as reproduz sequencialmente de forma rapida, formando um video ate que seja interrompido pressionando a letra 'q'.

Para executar os programas utilizando por padrao o arquivo fornecido pelo moodle, basta ajustar o caminho ate o arquivo visto nos programas *_from_file.

3.3 Procedimentos Experimentais

Step 1 – Captura de vídeo local

Inicialmente, foi implementado um programa de leitura de vídeo a partir de um arquivo local utilizando a classe cv2.VideoCapture. Esse experimento teve como objetivo compreender o processo básico de:

  • Abertura e leitura de vídeos
  • Exibição de quadros
  • Manipulação de propriedades (FPS, total de quadros)
Passo 2 – Gravação de vídeos

Desenvolvimento de programa para gravação utilizando cv2.VideoWriter

Objetivo: Registrar e salvar transmissões para análise posterior.

Video curto - Marcelo
Video curto - Carregador Portatil

4. Resultados e Análises

4.1 Resultados Obtidos

Leitura de vídeos locais

Foi possível reproduzir vídeos e extrair informações como FPS e número de quadros.

Gravação

O vídeo capturado foi salvo no formato .avi, com qualidade satisfatória e sincronização estável entre captura e gravação.

Sequência de imagens

O processamento ocorreu sem perdas visuais perceptíveis, demonstrando que o OpenCV trata sequências de imagens de forma eficiente.

4.2 Análise dos Resultados

Versatilidade do VideoCapture

O cv2.VideoCapture é versátil, podendo receber dados de diferentes fontes (arquivo, câmera, RTMP, sequência de imagens).

Desempenho

O desempenho depende fortemente do frame rate e do tempo de espera configurado em cv2.waitKey().

VideoWriter

O cv2.VideoWriter requer que a taxa de quadros e o tamanho dos quadros sejam compatíveis com a fonte de entrada.

Formatos e Codecs

O uso de formatos padronizados (ex.: MJPG) e caminhos corretos de escrita evitou erros relacionados a codecs e permissões.

5. Conclusões e Comentários Finais

O experimento permitiu compreender de forma prática os fundamentos da captura, exibição e gravação de imagens e vídeos com OpenCV.

Principais Lições Aprendidas

Verificação de Retorno

A importância de verificar o retorno (ret) das funções de captura para evitar falhas silenciosas.

Gerenciamento de Recursos

A necessidade de liberar recursos (release()) ao final da execução para evitar travamentos.

Fluxos de Dados

A diferença entre fluxos locais e remotos, principalmente quanto à latência e estabilidade.

Parâmetros de Gravação

O papel do cv2.VideoWriter na gravação e a influência dos parâmetros de codec e FPS na qualidade final.