Günümüzde QR kodlar, fiziksel dünyadan dijital dünyaya geçişin en hızlı yolu haline geldi. Bir restoran menüsünden dijital kartvizitlere, WiFi şifrelerinden ürün bilgilerine kadar her yerde karşımıza çıkıyorlar. Peki, kendi ihtiyaçlarımıza göre özelleştirilmiş, hem kod üretebilen hem de karmaşık görsellerden kod okuyabilen bir uygulama geliştirmek ne kadar zor?
Bu yazımızda, Python’ın güçlü ekosistemini kullanarak; renkleri, boyutları ve hata düzeltme seviyeleri ayarlanabilen, aynı zamanda düşük kaliteli görselleri bile çözebilen gelişmiş bir QR Kod Uygulaması‘nı nasıl inşa edeceğimizi detaylandıracağız.
🛠️ Kodun Anatomisi
Projenin temel taşlarını oluşturan teknik detaylar şu şekildedir:
Proje Künyesi
- Yazar: Ahmet Aksoy
- Tarih: 2026-04-26
- Ortam: Python 3.12 | Ubuntu 24.04
- Kütüphaneler: Flask, qrcode, pyzbar, Pillow, OpenCV, NumPy
Uygulama, modern bir web arayüzü sunmak için Flask çatısını kullanırken, görüntü işleme tarafında sektör standardı olan OpenCV ve Pillow ile desteklenmektedir.
🎨 Özelleştirilebilir QR Kod Üretimi
Sıradan siyah-beyaz kodların ötesine geçmek için uygulamamızda birkaç kritik özellik bulunmaktadır.
1. Standartlara Uygun İçerik Oluşturma
Sadece düz metin değil, belirli standartlara sahip verileri de QR koduna dönüştürebiliyoruz:
- vCard: Kişisel iletişim bilgilerini (isim, tel, e-posta) içeren standart dijital kartvizit formatı.
- WiFi: SSID, şifre ve güvenlik türünü içeren, tarandığında otomatik ağa bağlayan özel format.
2. Görsel Özelleştirmeler
Kullanıcıya sunulan seçeneklerle QR kodun görünümü dinamik olarak değiştirilir:
- Renk Paletleri: Siyah-beyaz klasikliğinin yanı sıra, kurumsal renklere uygun mavi-beyaz veya modern koyu mod (dark mode) seçenekleri.
- Hata Düzeltme (Error Correction): QR kodların en etkileyici özelliklerinden biri, kodun bir kısmı zarar görse bile okunabilmesidir. Uygulamamızda
L(Düşük) ileH(Yüksek) arasında dört farklı seviye seçilebilmektedir. - Boyutlandırma:
Image.NEARESTinterpolasyon yöntemiyle, piksellerin bulanıklaşması önlenerek net görüntüler elde edilir.
# QR oluşturma mantığından küçük bir kesit
def generate_qr(content, size=300, error_correction='M', color='black'):
# Renk haritasından seçim yap
fg, bg = COLOR_MAP.get(color, ('#000000', '#ffffff'))
qr = qrcode.QRCode(
error_correction=EC_MAP.get(error_correction),
box_size=max(1, size // 33),
border=4
)
qr.add_data(content)
qr.make(fit=True)
img = qr.make_image(fill_color=fg, back_color=bg)
img = img.resize((size, size), Image.NEAREST)
# ... base64 dönüşümü
🔍 Gelişmiş Okuma ve Çözümleme Stratejileri
QR kod okumak her zaman göründüğü kadar kolay değildir. Işık patlamaları, düşük çözünürlük veya bulanıklık, standart okuyucuların başarısız olmasına neden olur. Bu projede, “tek yöntemle olmaz” diyerek çok aşamalı bir çözümleme hattı (pipeline) kurulmuştur:
- Doğrudan Çözümleme: Görüntü orijinal haliyle
pyzbarveOpenCVdetektörlerine gönderilir. - Gri Tonlama ve Eşikleme: Görüntü griye çevrilir ve Otsu’s Binarization yöntemiyle siyah-beyaz kesin hatlara indirgenir. Bu, kontrast sorunlarını çözer.
- Keskinleştirme: Görüntüye bir Laplacian filtresi uygulanarak kenarlar belirginleştirilir.
- Süper Çözünürlük (Upscaling): Küçük ve pikselli görüntüler, kübik interpolasyon ile $2\times$ büyütülerek detaylar belirginleştirilmeye çalışılır.
Bu stratejiler sayesinde, standart kütüphanelerin “okuyamadım” dediği birçok görsel başarıyla çözülebilmektedir.
🌐 Flask ile Web Entegrasyonu
Uygulama, kullanıcı dostu bir deneyim için şu rotalar üzerine kurulmuştur:
/create: Kullanıcının veri türünü seçtiği ve QR kodu anında önizleyebildiği dinamik form./read: Hem dosya yükleme yoluyla hem de canlı kamera akışıyla çalışan okuyucu ekranı./scan_frame: Tarayıcıdan gelen anlık kamera karelerini (base64) alıp Python tarafında işleyen yüksek performanslı uç nokta.
Kamera tarama özelliği, istemci tarafında jsQR ile ön kontrol yaparken, kesin sonuçlar için sunucudaki gelişmiş OpenCV hattını kullanır.
🚀 Kurulum ve Çalıştırma
Projeyi kendi bilgisayarınızda çalıştırmak için şu adımları izleyin:
Bağımlılıklar
Sisteminizde zbar kütüphanesinin kurulu olması gerekir:
- Ubuntu:
sudo apt-get install libzbar0 - macOS:
brew install zbar
Ardından Python kütüphanelerini yükleyin:
pip install flask qrcode[pil] pyzbar pillow numpy opencv-python
Çalıştırma
python qrcode_app.py
Tarayıcınızdan http://localhost:8117 adresine giderek uygulamayı kullanmaya başlayabilirsiniz.
Ahmet Aksoy
Not: Bu yazıda incelediğimiz kodu ve benzer projelerin kaynak kodlarını https://github.com/ahmetax/practical-python-examples adresinde bulabilirsiniz.