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.
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.
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:
[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!!
[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!
[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?
[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!
[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!
[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...
[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?
[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.