Infra - Linux

Zebra Barcode Reader: Lendo código de barras com a sua Webcam no Linux

Neste breve documento veremos como efetuar a leitura de código de barras utilizando uma webcam compatível com a API V4L1 ou V4L2. Além de mostrar a força do software livre, este recurso proporciona inúmeras aplicabilidades.

por Alessandro de Oliveira Faria



Introdução

Linux: Zebra Barcode Reader

Zebra Barcode Reader é uma solução de código aberto que roda em Linux capaz de decodificar um código de barras presente no vídeo ao vivo (WebCam ou placa de captura), como também processar arquivos de imagem. Este projeto suporta os tipos mais populares de código de barras, abaixo os padrões testado na NETi TECNOLOGIA:
  • EAN-13/UPC-A;
  • EAN-8;
  • CODE 128;
  • CODE 39;
  • 2 de 5 intercalado.

O pacote conta com 2 aplicativos com fins demonstrativos:
  • decodificador de imagens, que faz captura de um dispositivo de vídeo (como Webcam);
  • decodificador de códigos presentes em imagens gravadas no disco.

Pontos fortes do projeto:
  • Compatibilidade com QT e Gtk;
  • Alta velocidade;
  • Baixo uso de memória (aproximadamente 1K módulo de descodificação EAN);
  • Não limitado ao uso de imagens estáticas;
  • Não utiliza operação de ponto flutuante;
  • Adequado para processadores embarcados com baixo poder de processamento;
  • Componente modulares, assim podendo utilizá-los juntos ou separadamente.

Zebra Barcode Reader: Como funciona?

Uma imagem contendo o código de barras é enviada para processamento. O pacote zebra utiliza técnicas eficazes para a localização e decodificação do código de barras. O resultado final é semelhante aos leitores que encontramos em supermercado. A seguir uma breve explicação sobre o funcionamento da biblioteca.

Linux: Zebra Barcode Reader: funcionamento

A imagem é extraída no dispositivo de vídeo captura, capaz de produzir fluxo de vídeo contínuo. A versão atual trabalha com APIs video4linux (versão 1 e 2). Entretanto, existem planos futuros para adicionar o DirectShow (Windows).

A imagem capturada no dispositivo é exibida na janela de visualização (GUI sobre o X11 - Xvideo e Ximage). Podemos dizer que a principal função desta camada é o monitoramento da imagem.

Nesta etapa possuímos uma imagem obtida de uma webcam ou de uma unidade de armazenamento, onde é efetuada a varredura e processamento da imagem bidimensional.

A seguir é calculada a largura das barras para uma posterior decodificação. A decodificação acontece com a busca das seqüências de barras e identificação dos respectivos padrões (UPC-A, UPC-E, EAN-8, Code 128 e Code 39).

Vejam a seguir uma ilustração do projeto com a minha implementação de localização de face:

Linux: Zebra e localização de face

Jogo rápido: Download, compilação, instalação e execução

Sem muito BLA, BLA, BLA... o download pode ser efetuado no site do Zebra Barcode Reader . Utilize o comando "tar -zxvf" para extrair o pacote. Depois os comandos "configure", "make" e "make install" conforme o exemplo a seguir.

$ wget http://ufpr.dl.sourceforge.net/sourceforge/zebra/zebra-0.5.tar.bz2
$ tar -jxvf zebra-0.5.tar.bz2
$ cd zebra-0.5/
$ ./configure
$ make
$ sudo make install


Agora utilize a imagem abaixo para testar a decodificação a partir de uma imagem armazenada no disco. O programa Kbarcode foi utilizado para criar todas as imagens com os códigos de barras para testes.

Linux: Zebra Barcode e imagem

A decodificação da imagem deve ser executada com o comando zebraimg, conforme o exemplo abaixo:

$ zebraimg zebra04.jpg
EAN-8:01234565
scanned 1 barcode symbols from 1 images in 0.06 second

Para ler código de barras de imagens ao vivo, basta plugar a sua webcam e executar o comando zebracam.

Abaixo um vídeo demonstrando a funcionalidade a eficiência do projeto. Como sempre optei em elaborar um texto objetivo e prático. Maiores detalhes o leitor pode obter na página do próprio projeto.



Acredito que este projeto pode abrir portas para outros projetos, como por exemplo um relógio de ponto onde a face e o código é capturado (assim inibindo a fraude de troca de cartões entre funcionários). Ressalto que não estou falando de biometria e sim de um sistema que obrigatoriamente armazena o rosto do usuário que efetuou a leitura do cartão.

Como sempre menciono: Colaborar atrai amigos, competir atrai inimigos...



Sobre o autor: http://www.netitec.com.br/alessandro
Alessandro de Oliveira Faria

Alessandro de Oliveira Faria - Sócio-proprietário da empresa NETi TECNOLOGIA fundada em Junho de 1996 (http://www.netitec.com.br), empresa especializada em desenvolvimento de software e soluções biométricas, Consultor Biométrico na tecnologia de reconhecimento facial, atuando na área de tecnologia desde 1986 assim propiciando ao mercado soluções em software nas mais diversas linguagens e plataforma, levando o Linux a sério desde 1998 com desenvolvimento de soluções open-source, membro colaborador da comunidade Viva O Linux, mantenedor da biblioteca open-source de vídeo captura entre outros projetos.