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.

[ Hits: 92.290 ]

Por: Alessandro de Oliveira Faria (A.K.A. CABELO) em 06/10/2008 | Blog: http://assuntonerd.com.br


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
    Próxima página

Páginas do artigo
   1. Introdução
   2. Jogo rápido: Download, compilação, instalação e execução
Outros artigos deste autor

RealBasic 2005: Um Visual Basic multi-plataforma!

GNA: um Coprocessador para Aceleração Neural

Conectando com Bco Interbase/Firebird em Java

Interface Gráfica e Ambiente Integrado p/ Free Pascal

Babytrans, o Babylon for Linux

Leitura recomendada

Resolvendo definitivamente a configuração de placa de TV e webcam

Sistemas de proteção de acesso a dados do seu HD, será efetivo?

Instalação da placa PXE Intelbras

Passos essenciais para configurar um servidor de impressão dedicado no Linux

Instalando Token da OAB no Linux Mint 17.3 (Rose)

  
Comentários
[1] Comentário enviado por hebaja em 06/10/2008 - 15:59h

Simplesmente fantástico!

[2] Comentário enviado por fabio em 06/10/2008 - 16:06h

Será que finalmente não vou mais precisar digitar código de barras pra pagar conta pelo Internet Banking? :)
Vou testar. Excelente cabelo!!!

[3] Comentário enviado por renato.leite em 06/10/2008 - 16:36h

Fantástico mesmo, muito maneiro... Otimo artigo xD

[4] Comentário enviado por RCoimbra em 06/10/2008 - 17:16h

Queeeeeeeeeeeeeee isso!!!!!!!!! Artigo show de bola, como disse o Fábio não vou mais precisar digitar código de barras pra pagar contas pelo internet banking!!! kkkkkkk
Sem contar que os artigos do cabelo são sempre diretos!!

Abraços
Cya!

[5] Comentário enviado por tenchi em 06/10/2008 - 19:25h

Achei muito interessante, mas não consegui fazer funcionar com minha webcam. Ela usa v4l1. Eis aqui a saída do comando zebracam em modo verbose:

_zebra_video_open: opened camera device /dev/video0 (fd=5)
WARNING: zebra video in _zebra_v4l2_probe():
unsupported request: video4linux version 2 not supported (VIDIOC_QUERYCAP)
_zebra_v4l1_probe: Flexcam 100 Camera (CAPTURE) (160 x 120) - (352 x 288)
v4l1_init_window: current window: 352 x 288 @(0, 0)
v4l1_probe_formats: current format: BGR3(33524742) depth=24 palette=4
v4l1_set_format: set new format: BGR3(33524742) depth=24 palette=4 size=0x4a400
v4l1_probe_iomode: using 2 images in MMAP mode
WARNING: zebra video in zebra_video_get_fd():
unsupported request: v4l1 API does not support polling
_zebra_window_probe_xv: XVideo extension version 2.2
xv_probe_port: probing port 158 with 1 encodings:
xv_probe_port: max XV_IMAGE size 2046x2046
xv_probe_port: 4 image formats
xv_probe_port: probing port 159 with 1 encodings:
xv_probe_port: max XV_IMAGE size 2046x2046
xv_probe_port: 5 image formats
v4l1_set_format: set new format: YU12(32315559) depth=12 palette=15 size=0x25200
v4l1_mmap_buffers: mapping 2 buffers size=0x258010
WARNING: zebra video in zebra_video_get_fd():
unsupported request: v4l1 API does not support polling
WARNING: zebra processor in x_handle_event():
output window is closed: user closed display window
WARNING: zebra processor in zebra_processor_user_wait():
output window is closed: display window not available for input
_zebra_video_open: closed camera fd=5

E, mais uma vez, sensacional este Cabelo. Descobre cada uma... Este programa é show. Tô pensando em trabsformar meu computador num caixa de super-mercado. Beep! Beep!

[6] Comentário enviado por thyaguvinny em 06/10/2008 - 23:31h

Eu adoro esse careca!!!

[7] Comentário enviado por arkanjo em 07/10/2008 - 20:51h

achei fantastico ... mas isso é pra fazer programas né ??
não tem algo mais pra usuario final ??

pensei em algo assim.
vc abre o programa depois seleciona o campo a ser preenchido com a leitura do codigo de barras, aperta algum botão e mostra a fatura pra camera, ela le e coloca no campo selecionado anteriormente ..
Tipo os leitores de fatura de 100 pila que tem por aí, mas melhor, pq qs todos tem uma camera hoje em dia, ja gastar com um leitor especifico, só quem paga muita conta mesmo ...

Seria fantastico, invez de passar um tempo digitando e errando numeros nos sites de bancos, todo 5° dia util, simplesmente acessar o site, selecionar a opção de pagamento de boleto, marco onde vai o codigo da fatura, aperto algum botão e aproximo a fatura da camera :D

Se ja não tiver, alguem faça aí e coloque no sourceforge o projeto, que acho que faz sucesso :D

[8] Comentário enviado por EDU4RDO_ em 08/10/2008 - 08:32h

Não estou conseguindo instalar. Quando eu dou o ./configure apresenta o seguinte erro:

checking for MAGICK... configure: error: Package requirements (ImageMagick++ >= 6.2.6) were not met:

No package 'ImageMagick++' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables MAGICK_CFLAGS
and MAGICK_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Eu já instalei o imagemagick e também outros pacotes relacionados a ele, mas o problema continua.

Estou usando Ubuntu, alguem sabe dizer qual é a Lib q realmente esta faltando ou qual é o problema?

Um abraço.

[9] Comentário enviado por maphdelic em 08/10/2008 - 10:09h

Olá, estou com o mesmo problema do colega acima..

"checking for MAGICK... configure: error: Package requirements (ImageMagick++ >= 6.2.6) were not met"

Também uso Ubuntu (hardy). Já instalei todos os pacotes relacionados que encontrei... imagemagick, libgraphicsmagick++1, libmagick++10, graphicsmagick, graphicsmagick-imagemagick-compat, python-pythonmagick, pfstools... só para citar alguns. Fora o que o auto-apt instalou.

Estou ancioso para testar. Quem tiver uma idéia, posta ai!


[10] Comentário enviado por locolinux em 08/10/2008 - 11:34h

Olá,

Estou usando debian etch, consegui instala-lo mas quando tento executar o zebracam me retorna o erro:

zebracam: error while loading shared libraries: libzebra.so.3: cannot open shared object file: No such file or directory

Já procurei na net essa biblioteca mas nada. Você poderia me dar uma ajuda ?

[11] Comentário enviado por Pianista em 08/10/2008 - 17:54h

caramba, como é que pode, meu irmão tu é o cara... nem adiciono mais teus artigos como favoritos, eu só acesso teu perfil e leio bons materiais! :P.. estava até lendo um artigo seu em outro site que eu achei sem querer. E ao ler o artigo e ver quem era o escritor adivinha quem "CABELO"... Parabéns! você mitiva muitas pessoas.. Obrigado!

só por curiosidade o site era esse "http://tecnociencia.inf.br/tecnico/Pianista". estou mandando assim com convite e meu nick como patricinador, pra quem quiser se cadastrar e ler os materias, fiquem a vontade!

Valew!

[12] Comentário enviado por reng.unip em 09/10/2008 - 15:40h

Cabelo, ótimo artigo, meus parabéns.

[13] Comentário enviado por maphdelic em 09/10/2008 - 21:37h

Ok, resolvi dois problemas de dependência ao se configurar o pacote no ubuntu hardy (Kurumin NG, para ser mais expecífico). O auto-apt instalou algumas coisas, mas duas ele não resolveu. Uma é resolvida com o pacote "libmagick++9-dev" e a outra com o "python-gtk2-dev". Com esses dois, mais o auto-apt, consegui configurar. Vamos vwr se eu compilo...

[14] Comentário enviado por maphdelic em 09/10/2008 - 21:42h

Ok, compilei e instalei, mas agora estou com omesmo problema do locolinux, acima.

"quando tento executar o zebracam me retorna o erro:

zebracam: error while loading shared libraries: libzebra.so.3: cannot open shared object file: No such file or directory"

[15] Comentário enviado por maphdelic em 09/10/2008 - 21:51h

Sucesso! Basta fazer "./configure --prefix=/usr" no começo. Só isso, e já consegui rodar.

Dica: enontrei essas e outras informações no fórum do projeto no sourceforge.

[16] Comentário enviado por mondragonbr em 10/10/2008 - 15:53h

parabéns, ótimo artigo!
muito interessante.

[17] Comentário enviado por comfaa em 14/10/2008 - 08:53h

muito 10 esse artigo !!

[18] Comentário enviado por EDU4RDO_ em 31/10/2008 - 11:05h

Alguém sabe dizer algo sobre esse erro?

zebracam
zebracam: error while loading shared libraries: libzebra.so.3: cannot open shared object file: No such file or directory

[19] Comentário enviado por ramon.rdm em 03/01/2009 - 17:37h

Muito interessante!
Esse software pode ser o que estou precisando para um projeto de gerenciamento de produtos!
Mas ao instalar ocorre o seguinte:
checking for MAGICK... configure: error: Package requirements (ImageMagick++ >= 6.2.6) were not met:

No package 'ImageMagick++' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables MAGICK_CFLAGS
and MAGICK_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

Tenho o imagemagick instalado e nada.....
e agora????
alguem saberia me ajudar?
Obrigado e parabens pelo artigo!

[20] Comentário enviado por maa.marcos em 05/01/2009 - 09:45h

Muito bom seu artigo...

Não entendo muito sobre instalação, compilação, etc, etc, etc. Tentei instalar em 3 distros diferentes e não funcionou. Muitos erros na compilação.

Tenho algumas dúvidas sobre o funcionamento:

Funciona apenas com o código de barras na horizontal? E se estiver na vertical, inclinado 45% ou de cabeça pra baixo?
O que acontece se mostrarmos 2 ou mais códigos de barras ao mesmo tempo?
Poderia indicar outros vídeos mostrando estas funcionalidades?
Existem outros projetos com o mesmo objetivo?


Grato,

[21] Comentário enviado por rarmor em 14/01/2010 - 12:45h

Grande artigo, muito bom mesmo.

Para os colegas que como eu utilizam utilizam o Ubuntu 9.04 ou afins eu instalei utilizando o comando:
$sudo apt-get install zebra-tools

lá...... lalá..... lalalá.....

pronto

$sudo zebracam

Espero ter ajudado.

[22] Comentário enviado por eduslack em 22/01/2010 - 23:13h

O site do projeto agora é em: http://sourceforge.net/projects/zbar/files/

[23] Comentário enviado por wcoutinho em 23/04/2010 - 02:02h

depois de muito tempo baixando libs.
quando tudo funcionou direitnho eu fui usar o comando zebraimg
veio a resposta
zebraimg: command not found

como resolvo isso?

[24] Comentário enviado por wcoutinho em 23/04/2010 - 02:19h

achei o problema.

na versao que eu uso do zebra o comando eh
zbraimg

valeu

[25] Comentário enviado por marcinhoCP em 29/07/2010 - 16:21h

muito bom o artigo!!!

quando eu coloco o comando ./configure dá esse erro.

4) were not met:

No package 'QtCore' found
No package 'QtGui' found

Consider adjusting the PKG_CONFIG_PATH environment variable if you
installed software in a non-standard prefix.

Alternatively, you may set the environment variables QT_CFLAGS
and QT_LIBS to avoid the need to call pkg-config.
See the pkg-config man page for more details.

alguem sabe me dizer como posso resolver?

[26] Comentário enviado por Iron Fist em 23/08/2010 - 22:02h

qual é o tamanho máximo que ele consegue ler? qualquer barcode? inclusive de contas boleto bancário?

[27] Comentário enviado por tiekookeit em 18/12/2010 - 10:40h

Parece que tiraram o projeto do ar, alguém tem o pacote ai para me enviar???



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts