Como Gerar e Ler QRCodes em Python com Poucas Linhas de Código

Como Gerar e Ler QRCodes em Python com Poucas Linhas de Código

A geração e leitura automatizada de QRCodes facilita a integração de sistemas com pagamentos, autenticação e compartilhamento de links. Utilizando a biblioteca qrcode para criação e o opencv-python (cv2) para decodificação, é possível manipular dados visuais de forma rápida sem complexidade matemática.

Python
import cv2
import qrcode

# 1. GERAR QRCODE
def gerar_qrcode(conteudo: str, arquivo_saida: str = "qrcode.png"):
    # Cria o objeto QRCode e insere os dados
    img = qrcode.make(conteudo)
    img.save(arquivo_saida)
    print(f"QRCode gerado com sucesso: {arquivo_saida}")

# 2. LER QRCODE
def ler_qrcode(caminho_imagem: str) -> str:
    # Carrega a imagem do arquivo
    imagem = cv2.imread(caminho_imagem)
    # Inicializa o detector de QRCode do OpenCV
    detector = cv2.QRCodeDetector()
    # Decodifica e retorna o texto contido no QRCode
    conteudo, _, _ = detector.detectAndDecode(imagem)
    return conteudo

# Exemplo prático de uso
if __name__ == "__main__":
    link = "https://github.com"
    
    # Gera a imagem
    gerar_qrcode(link, "github_qr.png")
    
    # Lê a imagem gerada
    resultado = ler_qrcode("github_qr.png")
    print(f"Conteúdo lido do QRCode: {resultado}")

Pontos-chave

  • qrcode.make(): Método simplificado da biblioteca qrcode que gera automaticamente uma matriz com nível padrão de correção de erros e salva nos formatos tradicionais de imagem (.png, .jpg).

  • Detector Nativo do OpenCV: A classe cv2.QRCodeDetector() elimina a necessidade de dependências pesadas de processamento de imagem para ler arquivos locais ou frames de vídeo.

  • Retorno Triplo do detectAndDecode: O método do OpenCV retorna três valores: o texto decodificado, os pontos de contorno do polígono (points) e a matriz binarizada (straight_qrcode). O caractere _ ignora os dados geométricos não utilizados.

  • Tratamento para Imagens Sem QR: Se a imagem não contiver um QRCode válido, detectAndDecode retornará uma string vazia "", sendo recomendado validar a saída antes de executar operações condicionais.

Comentários

Postagens mais visitadas deste blog

Gerando Relatórios em PDF com Python (ReportLab e FPDF)

Python para Computação Quântica: Introdução com Qiskit

C# e Banco de Dados: Como Conectar e Realizar Operações com SQL Server