Scanner de código QR usando Raspberry Pi e OpenCV
Scanner-de-codigo-QR-usando-Raspberry-Pi-e-OpenCVblog_image_banner

Scanner de código QR usando Raspberry Pi e OpenCV
 

O código QR (código de resposta rápida) é um tipo de código de barras de matriz que contém informações sobre o item ao qual está anexado, como dados de localização, identificador ou rastreador que identifica um site ou aplicativo, etc. É uma óptica legível por máquina etiqueta que tem a forma de uma imagem 2D e tem um padrão diferente.


Neste tutorial, vamos construir um scanner de código QR baseado em Raspberry Pi usando a biblioteca OpenCV e ZBar. ZBar é a melhor biblioteca para detectar e decodificar os diferentes tipos de códigos de barras e códigos QR. O OpenCV é usado para capturar um novo quadro de um fluxo de vídeo e processá-lo.

Depois que o OpenCV captura um quadro, podemos passá-lo para uma biblioteca de decodificação de código de barras Python dedicada, como um ZBar, que decodifica o código de barras e o converte nas respectivas informações.

Requisitos

Raspberry Pi 3 (qualquer versão)

Módulo de câmera Pi


Antes de prosseguir com este scanner de código QR Raspberry Pi 3, primeiro, precisamos instalar o OpenCV, a biblioteca de decodificação de código de barras ZBar, imutils e algumas outras dependências neste projeto. OpenCV é usado aqui para processamento de imagem digital. As aplicações mais comuns de processamento digital de imagens são detecção de objetos, reconhecimento facial e contador de pessoas.


Instalando OpenCV no Raspberry Pi

Aqui, a biblioteca OpenCV será usada para o scanner Raspberry Pi QR. Para instalar o OpenCV, primeiro atualize o Raspberry Pi.


sudo apt-get update


Em seguida, instale as dependências necessárias para instalar o OpenCV em seu Raspberry Pi.


sudo apt-get install libhdf5-dev -y 

sudo apt-get install libhdf5-serial-dev –y 

sudo apt-get install libatlas-base-dev –y 

sudo apt-get install libjasper-dev -y 

sudo apt-get install libqtgui4 –y

sudo apt-get install libqt4-test –y

sudo apt-get install libhdf5-dev -y 

sudo apt-get install libhdf5-serial-dev –y 

sudo apt-get install libatlas-base-dev –y 

sudo apt-get install libjasper-dev -y 

sudo apt-get install libqtgui4 –y

sudo apt-get install libqt4-test –y


Depois disso, instale o OpenCV no Raspberry Pi usando o comando abaixo.


pip3 install opencv-contrib-python==4.1.0.25


Anteriormente, usamos OpenCV com Raspberry pi e criamos muitos tutoriais sobre ele.


Instalando OpenCV no Raspberry Pi usando CMake

Reconhecimento facial em tempo real com Raspberry Pi e OpenCV

Reconhecimento de matrículas usando Raspberry Pi e OpenCV

Estimativa do tamanho da multidão usando OpenCV e Raspberry Pi


Também criamos uma série de tutoriais OpenCV começando no nível iniciante.


Instalando outros pacotes necessários


Instalando ZBar


Zbar é a melhor biblioteca para detectar e decodificar os diferentes tipos de códigos de barras e códigos QR. Use o comando abaixo para instalar a biblioteca:


pip3 install pyzbar


Instalando imutils


O imutils é usado para tornar as funções essenciais de processamento de imagem, como translação, rotação, redimensionamento, esqueletização e exibição de imagens Matplotlib mais fáceis com OpenCV. Use o comando abaixo para instalar os imutils:


pip3 install imutils


Instalando argparse


Use o comando abaixo para instalar a biblioteca argparse. argparse é responsável por analisar argumentos de linha de comando.


pip3 install argparse


Configuração do hardware do leitor de código QR Raspberry pi


Aqui, exigimos apenas a câmera Raspberry Pi e Pi para este scanner de código QR usando a câmera Raspberry Pi e você só precisa conectar o conector de fita da câmera no slot da câmera fornecido no Raspberry pi


A câmera Pi pode ser usada para construir vários projetos interessantes, como Câmera de Vigilância Raspberry Pi, Sistema de Monitoramento de Visitantes, Sistema de Segurança Doméstica, etc.


Código Python para o leitor de código QR Raspberry Pi

O código completo do leitor Raspberry Pi QR é fornecido no final da página. Antes de programarmos o Raspberry Pi, vamos entender o código.


Então, como de costume, inicie o código importando todos os pacotes necessários


from imutils.video import VideoStream

from pyzbar import pyzbar

import argparse

import datetime

import imutils

import time

import cv2​


Em seguida, construa o analisador de argumentos e analise os argumentos. O argumento da linha de comando contém informações sobre o caminho do arquivo CSV. O arquivo CSV (Comma Separated Values) contém o carimbo de data / hora e a carga útil de cada código de barras de nosso stream de vídeo.


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())


Depois disso, inicialize o fluxo de vídeo e descomente a linha comentada se estiver usando uma webcam USB.


#vs = VideoStream(src=0).start()

vs = VideoStream(usePiCamera=True).start()

time.sleep(2.0)


Agora, dentro do loop, pegue um quadro do stream de vídeo e redimensione-o para 400 pixels. Depois de capturar o quadro, chame a função pyzbar.decode para detectar e decodificar o código QR.


frame = vs.read()

frame = imutils.resize(frame, width=400)

barcodes = pyzbar.decode(frame)


Agora, faça um loop sobre os códigos de barras detectados para extrair a localização do código de barras e desenhe a caixa delimitadora ao redor do código de barras na imagem.


for barcode in barcodes:

       (x, y, w, h) = barcode.rect

       cv2.rectangle(frame, (x, y), (x + w, y + h), (0, 0, 255), 2)


Em seguida, decodifique o código de barras detectado em uma string "utf-8" usando a função decodificar ("utf-8") e extraia o tipo de código de barras usando a função barcode.type.


barcodeData = barcode.data.decode("utf-8")

barcodeType = barcode.type


Depois disso, salve os dados do código de barras extraídos e o tipo de código de barras dentro de uma variável chamada text e desenhe os dados e o tipo do código de barras na imagem.


text = "{} ({})".format(barcodeData, barcodeType)

cv2.putText(frame, text, (x, y - 10),

    cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)


Agora exiba a saída com os dados do código de barras e o tipo de código de barras.


cv2.imshow("Barcode Reader", frame)


Agora, na última etapa, verifique se a tecla 's' foi pressionada, em seguida, quebre o loop principal e inicie o processo de limpeza.


key = cv2.waitKey(1) & 0xFF

# if the `s` key is pressed, break from the loop

if key == ord("s"):

       break

print("[INFO] cleaning up...")

csv.close()

cv2.destroyAllWindows()

vs.stop()


Testando o scanner de código QR Raspberry Pi


Assim que a configuração estiver pronta, inicie o programa leitor de código QR. Você verá uma janela mostrando uma visualização ao vivo de sua câmera, agora você pode apresentar códigos de barras na frente da câmera PI. Quando pi decodifica um código de barras, ele desenha uma caixa vermelha ao redor dele com os dados do código de barras e o tipo de código de barras, conforme mostrado na imagem abaixo:


É assim que você pode construir facilmente um leitor de código QR da câmera Raspberry Pi usando apenas a placa Raspberry Pi e a câmera Pi ou câmera USB.


O código completo para este projeto é fornecido abaixo.


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())

#vs = VideoStream(src=0).start()  #Uncomment this if you are using Webcam

vs = VideoStream(usePiCamera=True).start() # For Pi Camera

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)

        print (text)

cv2.putText(frame, text, (x, y - 10),

cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 0, 255), 2)

 

# if the barcode text is currently not in our CSV file, write

# the timestamp + barcode to disk and update the set

if barcodeData not in found:

csv.write("{},{}\n".format(datetime.datetime.now(),

barcodeData))

csv.flush()

found.add(barcodeData)

cv2.imshow("Barcode Reader", frame)

key = cv2.waitKey(1) & 0xFF

 

# if the `s` key is pressed, break from the loop

if key == ord("s"):

break

print("[INFO] cleaning up...")

csv.close()

cv2.destroyAllWindows()

vs.stop()



ENTRE EM CONTATO COM A LOJAMUNDI.

Assine nossa Newsletter! É gratuito!

Cadastre seu nome e email para receber novidades e materiais gratuitos da Lojamundi.