Manual
do
Maker
.
com
Que tal sair do tradicional e inovar um pouco a leitura de código de barras e QR Code com Raspberry?
Já temos para smartphone os aplicativos para ambos, mas não lembro de ter visto leitura de código de barras sem a utilização de smartphone, a não ser com leitores laser. Fazê-lo com Raspberry dará um charme especial, além de propiciar a leitura de ambos, o QR Code e o código de barras. Vamos então?
O primeiro passo é instalar a biblioteca para leitura do códigos. Em Python, temos a Zbar, por exemplo.
sudo pip2 install pyzbar
Se estiver utilizando Python3, troque pip2 por pip3. Se ainda não tem o pip instalado, faça-o com apt.
sudo apt-get install python-pip
Precisaremos da imutils também.
sudo pip2 install imutils
Basicamente, utilizamos a biblioteca pyzbar, argparse e OpenCV para ler a imagem. Isso significa que podemos abrir tanto uma imagem como uma câmera ou uma webcam.
Esse é um exemplo básico para ler de imagem:
from pyzbar import pyzbar
import argparse
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-i", "--image", required=True, help="path to input image")
args = vars(ap.parse_args())
image = cv2.imread(args["image"])
barcodes = pyzbar.decode(image)
for barcode in barcodes:
(x, y, w, h) = barcode.rect
cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type
text = "{} ({})".format(barcodeData, barcodeType)
print(text)
cv2.imshow("Imagem", image)
cv2.waitKey(0)
Você pode fazer seus códigos de barras para teste nesse site. Se utilizar o formato Code128, poderá digitar caracteres alfanuméricos, se optar por exemplo pelo EAN128, aí só numérico. Se não conhece os padrões, dê uma lida a respeito nesse site.
Gerei um código de barras para ilustrar o uso desse script supracitado, resultando em:
O código anterior serve para qualquer plataforma. Já para o Raspberry especificamente, devemos instalar mais um pacote:
sudo pip2 install picamera
Se ainda não configurou o sistema para habilitar a câmera do Raspberry, execute o programa raspi-config e habilite-a, depois reinicie o sistema.
O código tem pouca diferença:
from imutils.video import VideoStream
from pyzbar import pyzbar
import argparse
import datetime
import imutils
import time
import cv2
ap = argparse.ArgumentParser()
ap.add_argument("-o", "--output", type=str, default="barcodes.csv",
help="path to output CSV file containing barcodes")
args = vars(ap.parse_args())
print("[INFO] starting video stream...")
# vs = VideoStream(src=0).start()
vs = VideoStream(usePiCamera=True).start()
time.sleep(2.0)
csv = open(args["output"], "w")
found = set()
while True:
frame = vs.read()
frame = imutils.resize(frame, width=400)
barcodes = pyzbar.decode(frame)
for barcode in barcodes:
(x, y, w, h) = barcode.rect
cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)
barcodeData = barcode.data.decode("utf-8")
barcodeType = barcode.type
text = "{} ({})".format(barcodeData, barcodeType)
cv2.putText(frame, text, (x, y - 10),
cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)
if barcodeData not in found:
csv.write("{},{}\n".format(datetime.datetime.now(),
barcodeData))
csv.flush()
found.add(barcodeData)
cv2.imshow("Barcode Scanner", frame)
key = cv2.waitKey(1) & 0xFF
if key == ord("q"):
break
print("[INFO] cleaning up...")
csv.close()
cv2.destroyAllWindows()
vs.stop()
Se quiser dar uma olhada, também tem outros artigos interessantes relacionados (à câmera, não ao código de barras ) e que considero interessantes, talvez seja interessante para você também:
Fazer streaming com a câmera do Raspberry.
Brincando com a câmera do Raspberry.
Servidor de câmera com Raspberry.
Essa biblioteca para leitura de QR Code e código de barras é conceituada, qualquer pesquisa no Google retornará montes de referências. Abrir a câmera com OpenCV e ler a imagem para repassar à biblioteca também pode ser feita de muitas maneiras, mas minhas recomendações de leitura (em inglês) são o pyimagesearch e learnopencv, que são as melhores referências que encontrei relacionados a visão computacional e inteligência artificial.
Esse artigo é simples, mas achei necessário justamente porque vi em um grupo de Raspberry alguém pedindo sugestão para leitores de código de barras. Eis.
Inscreva-se no nosso canal Manual do Maker no YouTube.
Também estamos no Instagram.
Autor do blog "Do bit Ao Byte / Manual do Maker".
Viciado em embarcados desde 2006.
LinuxUser 158.760, desde 1997.