Camera como leitor de código de barras
Aproveitando que mudei o paradigma desse site para static blogging usando Jekyll (ver último post) vamos escrever sobre algo muito útil (pelo menos para mim myself and I). Lendo um código de barras usando a webcam do meu notebook.
Um tempo atrás eu queria facilitar o pagamento de minhas contas usando a webcam do meu notebook. Usando Debian na época instalei as dependências e compilei o Zbar, que hoje já é disponibilizado nos sources das principais distribuições de Linux. Depois de sofrer um pouco acabei desistindo.
Semana passada me mostraram um app da Kinoni que enviava o código de barras via bluetooth ou wifi (desde que na mesma subnet) mas o carinha que deveria ser instalado do lado do desktop só funcionava no mac ou no windows, sem contar que instalei o app e ele só funcionava em trial, depois pedia para comprar a versão pro. O importante é que isso me fez pesquisar de novo.
Hands On
Basicamente instalei o :
sudo yum install zbar
Nos Debian/Ubuntu deve ser com sudo apt-get install zbar
E fiz alguns testes com os comandos zbarcam e zbarimg que respectivamente “scaneiam” (cara, como odeio esses neologismos gringos, mas não achei melhor) e geram códigos de barra cada um com seus parâmetros.
O que mais gostei foi:
zbarcam --raw /dev/video0
Que abre a webcam faz o scan (me recuso a usar a palavra “scaneia” de novo) e gera o output na própria linha de comando.
Jogando o output do zbar no browser
Meu objetivo primário era facilitar o pagamento de contas e desta maneira (com o output no terminal) teria que continuar a copiar os números e colar no campo de formulário dentro dessas páginas de pagamentos de conta.
Num forum achei o crikey (Conveniently Repeated Input Key) que simula eventos de teclado
Baixei a última versão crikey-0.8.3.tar.gz (versão no dia que escrevi isso) e decompactei.
cd ~/Downloads
wget -c http://www.shallowsky.com/software/crikey/crikey-0.8.3.tar.gz
tar -zxvf crikey-0.8.3.tar.gz
Gerou a saída:
crikey-0.8.3/
crikey-0.8.3/Makefile
crikey-0.8.3/crikey.c
crikey-0.8.3/TESTING
Para instalar tentei:
cd crikey-0.8.3
make
Mas deu um erro por causa de uma dependência:
gcc -Wall -Wstrict-prototypes -g -O2 -c -o crikey.o crikey.c
crikey.c:29:34: fatal error: X11/extensions/XTest.h: No such file or directory
#include <X11/extensions/XTest.h>
^
compilation terminated.
make: *** [crikey.o] Error 1
Desconfiei que fosse dependencia do pacote libX11-devel mas ela já estava instalada. Um busca rápida vi que faltava a libXtst-devel:
sudo yum install libXtst-devel
Nos Debians/Ubuntus deve ser:
sudo apt-get install libxtst-dev
Aí sim conseguimos compilar:
cd crikey-0.8.3
make
Output da compilação:
gcc -Wall -Wstrict-prototypes -g -O2 -c -o crikey.o crikey.c
gcc -o crikey crikey.o -L/usr/X11R6/lib -lX11 -lXtst -lXext
E instalar:
sudo cp crikey /usr/local/bin
Um teste rápido que fiz foi rodar o comando
crikey -s 5 'Olá mundo!!!\nEscrevendo via crikey!!!'
que manda o texto depois de 5 segundos de delay para onde seu cursor estiver focado. No caso abri o gedit, rodei o comando no console e voltei pro gedit. Depois de exatos 5 segundos qe rodei o comando o output apareceu no meu gedit.
Pagando as contas
Agora quando vou pagar uma conta, rodo o comando no meu terminal:
zbarcam --raw /dev/video0 | crikey -i
Onde o zbar abre minha webcam, lê o código de barras, gera um output de texto puro que é direcionado para a entrada interativa do crikey que manda para onde você estiver com o cursor.
Depois de rodar esse comando vou até meu internet banking, abro o pagamento de conta, posiciono o cursor no campo do código de barras e posiciono o código de barras de frente a webcam até ele conseguir ler. Magicamente os números aparecem no campo.
Divirtam-se e até a próxima…
;-)