Objetivos

Explorar a utilização do LabVIEW para captura de imagens utilizando uma câmera USB, apresentando-se tutoriais passo-a-passo para fazê-lo.

Introdução

Nos últimos dez a doze meses repeti muitas vezes, em diversas ocasiões, a demonstração de como utilizar o LabVIEW para obter e processar imagens de câmeras USB, em particular webcams. Em vista disso, resolvi então despender algum tempo para produzir este tutorial.  Nossos alunos na Escola Politécnica da USP têm utilizado esse recurso em pequenos projetos desenvolvidos no curso de engenharia elétrica. Embora a terminologia aqui utilizada seja direcionada para eles, creio que muito deste material será útil para interessados de diversas formações. Evidentemente, este material pressupõe a utilização da plataforma LabVIEW. Ela está disponível para utilização em todo o campus da Universidade de São Paulo, na cidade de São Paulo. Todavia, interessados que queiram obtê-la de alguma forma,  devem contactar o serviço de relações acadêmicas da National Instruments (NI). No caso de usuários industriais ou de outros setores profissionais, devem procurar os diversos canais de contacto da NI no Brasil.

Características do LabVIEW

O LabVIEW é tanto uma linguagem de programação, quanto uma plataforma de desenvolvimento de aplicações baseadas em processamento digital de dados. Para mais informações a esse respeito, sugiro  um post que publiquei recentemente (Introdução ao LabVIEW) , no qual apresentam-se de forma resumida as características mais relevantes do LabVIEW.

Aquisição e processamento de imagens via LabVIEW – IMAQ

Entre os dispositivos de hardware que podem ser acessados via LabVIEW, encontram-se as câmeras de vídeo. O acesso é feito através de funções disponíveis em uma biblioteca de aquisição de imagens denominada NI – IMAQ (National Instruments Image Aquisition). A aquisição de imagens via câmeras USB,  usando-se o LabVIEW, pode ser feita empregando-se a biblioteca NI IMAQ for USB cameras.

A IMAQ suporta diversos tipos de formatos de comunicação com câmeras: analógicas e digitais (USB, Firewire, Gigabit-Ethernet, Camera Link, etc). O modelo genérico de acesso às câmeras encontra-se esquematizado na figura 1. As interfaces de acesso podem ser placas conectadas ao barramento do computador, ou podem fazer parte diretamente da placa-mãe (motherboard).

Figura 1 – Modelo genérico de um software de aquisição de imagens

Deve-se primeiramente identificar a interface eletrônica por onde as imagens chegarão ao computador. Se a câmera for analógica, esta interface será a chamada placa de aquisição, que é uma placa ligada ao barramento do computador onde se encontram os circuitos de captura e digitalização do sinal de vídeo.  Se for digital, usualmente haverá uma placa com decodificador do protocolo  (ex. Firewire, GigE, USB, Camera Link) utilizado pela câmera para enviar o vídeo , e os buffers de vídeo que recebem os dados assim que vão chegando.

Feita essa identificação, o programa deve ter uma instrução para ativar o hardware, preparando-o para fazer a aquisição das imagens. Esse procedimento recebe o nome de abertura de uma sessão (de trabalho) com o hardware. Esse procedimento “reserva” o hardware para a aplicação desenvolvida.

Neste momento, pode-se configurar os parâmetros de aquisição a serem usados (por exemplo, o tamanho da imagem, o tipo da imagem e a taxa de aquisição). Alguns exemplos disso:

  • Tamanho : 640 x 480 ; Tipo: Colorida ; Taxa de aquisição: 60 quadros por segundo
  • Tamanho: 1280 x 1024; Tipo: Monocromática (Greyscale) ; Taxa: 15 quadros por segundo

Em seguida deve-se preparar uma região na memória pertencente ao espaço de endereçamento a ser ocupado programa, realizando-se a alocação de memória específica para as imagens capturadas.

Uma vez feito isso, realiza-se a captura das imagens através da interface eletrônica, armazenando-as na memória alocada. Há dois tipos de captura:

  • Snap – captura de imagens individuais, como fotografias (snapshots).
  • Grab – captura contínua de vídeo, produzindo uma sequência de imagens (quadros = frames )

Terminado o procedimento, em qualquer momento antes do final do programa, a sessão com o hardware deve ser encerrada (fechamento de uma sessão), liberando-o para uso em outras aplicações.

.

Tutoriais

Apresentamos a seguir tutoriais passo-a-passo sobre como realizar essas etapas utilizando-se o LabVIEW para capturar imagens de uma câmera USB (por exemplo, uma web cam) usando-se a biblioteca de funções de aquisição de imagens NI IMAQ.

LabVIEW USB SNAP-I

Mostra como utilizar as funções da biblioteca IMAQ USB para capturar uma imagem individual via web cam (ou qualquer outra câmera USB) , como se faz em uma máquina fotográfica – “tirando-se uma foto” (SNAP SHOT).

.

.

LabVIEW USB SNAP-II

Complementa o exemplo anterior, mostrando como acrescentar um botão para selecionar a abertura de uma janela (dialog box) para configurar os parâmetros da câmera USB. Também mostramos como salvar a imagem capturada a partir da câmera para um arquivo permanente.

.

.

LabVIEW USB GRAB-I

Mostra como realizar a captura de vídeo, primeiramente utilizando a função SNAP anteriormente apresentada, o que traz sérias limitações quanto à continuidade do vídeo. A seguir apresenta-se sua substituição pela função GRAB, que proporciona qualidade mais adequada para captura de vídeo.

.

.


Video capturado com a opção LabVIEW USB SNAP em um laço while

O video a seguir ilustra o método  SNAP no laço while, apresentado no tutorial acima. Observe atentamente as descontinuidades no movimento (é possível observar as diferentes posições “instantâneas” da caneta vermelha em movimento). Há uma certa impressão de que neste vídeo a caneta é movimentada sempre mais rapidamente que no vídeo do exemplo mais adiante. Entretanto, em ambos a caneta é movimentada aproximadamente da mesma maneira, porém a perda de quadros provoca essa sensação de maior rapidez neste caso.

.

Figura 2 – vídeo: captura com SNAP repetido – configuração da câmera: 160 x 120 pixels a 30 fps

.

A crítica que podemos fazer ao método com que o vídeo foi gravado é que, como somente os quadros adquiridos são gravados, e supondo-se uma taxa constante de 30 quadros por segundo nas gravações, produz-se uma ilusão sobre a velocidade do movimento. Portanto, dados dois quadros em sequência, que efetivamente estão gravados no arquivo, o intervalo de tempo suposto entre eles é de 1/30 segundos (quando deveria ser maior, dependendo de quantos quadros foram perdidos entre os dois que foram gravados).

Video capturado com a opção LabVIEW USB GRAB em um laço while

O video a seguir ilustra o método  GRAB no laço while, apresentado no tutorial acima. Note que neste caso o vídeo oferece uma sensação de continuidade melhor no movimento, que no caso anterior (embora possamos notar a perda de dois quadros em diferentes momentos nesse vídeo, ocorrem menos perdas do que notado no vídeo anterior).

.

Figura 3 – vídeo: captura com GRAB – configuração da câmera: 160 x 120 pixels a 30 fps

.

LabVIEW USB GRAB-II

Acrescenta ao exemplo anterior (usando GRAB) a opção de gravar o vídeo em um arquivo no formato AVI.

.

.

Observação – modifique esse programa para executar a mesma gravação, porém com a opção SNAP no while. Não esqueça de retirar o bloco IMAQ USB Grab Setup que está fora do while.