3 Mayıs 2018 Perşembe

QR Code (Quick Responce Code - Kare Kod) Hakkında

QR Code; yani İngilizce açılımı Quick Responce (hızlı tepki) Code olan, Türkçeye ise Kare Kod olarak çevrilmiş iki boyutlu barkod sistemini bir yazılımcı gözüyle incelemeye çalışacağız.

Geçmişte barkodlarla, barkod okuyucularla çok işim olmuştu. Lakin o çalışmalarda barkod okuyucular hep donanımsal olarak okuma yapan cihazlardı. Günümüzde de piyasada 1D (bir boyutlu-çubuk barkod) ve 2D (iki boyutlu-karekod) barkodlar için geliştirilmiş okuyucu donanımlar ziyadesiyle mevcut. Biz konunun biraz daha derinine girip normal bir kamera (mesela basit bir webcam) ile bu barkodları nasıl okuyabilirizi inceleyeceğiz. Bunun yanı sıra yazılımsal olarak nasıl karekod oluşturabiliriz? Bunun yolları, yöntemleri nelerdir? Oluşturduğumuz karekod çizilirse, bozulursa, lekelenirse okuyabilecek mi vs. gibi konulara eğileceğiz.

Karekod 1994 yılında Denso Wave firması tarafından bulunup patentlenmiştir. www.qrcode.com/en sitesinde Denso firması tarafından karekod ile ilgili anlatılan çok teferruatlı orjinal bilgilere de erişebilirsiniz. Karekodun uzun tarihçesini anlatmayacağım. Dilerseniz buraya tıklayarak okuyabilirsiniz. Bizim bilmemiz gereken Denso Wave firmasının insanlığın hizmetine bu sistemi herhangi bir patent ücreti talep etmeden sunmuş olmasıdır. :)

Birkaç çeşit karekod tipi vardır. Karekodun mucidi Denso firmasının kendi ürettiği karekod tipleri:
  • QR Code Model 1
  • QR Code Model 2
  • Micro QR Code
  • iQR Code
  • SQRC
  • Frame QR

Gibi çeşitleri bulunmakla beraber firmanın patenti insanlık yararına açmış olmasından dolayı daha sonradan yeni ve kullanışlı farklı karekod çeşitleri de türetilerek kullanılmaya başlanmıştır.
  • Denso'nun ürettiği temel karekod, QR-Code (Quick Response-Hızlı Tepki) olarak anılmaktadır.
  • Daha sonra geliştirilen DataMatrix tipli karekod da dünya piyasalarında reel hayatta en çok kullanılan 3 karekod tipinden biridir.
  • Üçüncü en çok kullanılan karekod tipi de Aztec olarak isimlendirilen tiptir.
Bu 3 tip haricinde CoolDataMatrix, Upcode, Trillcode, Shotcode, mCode, Beetagg, PDF417, MaxiCode, Vericode, Ultracode, Code39, Code16K vs. gibi tipler olsa da bahsettiğim ilk 3 karekod tipi kadar ilgi görmemiş ve onlar kadar yaygın kullanım seviyesine ulaşmamıştır. (bunlardan sadece PDF417 tipinin uçak biniş kartlarında kullanıldığını gördüm. Onun haricinde reel hayatta hiç karşılaşmadım işin doğrusu)


QR Code:
Yaygın kullanılan iki tip QR Code bulunmakta: QR Code Model 1 ve QR Code Model 2.

QR Code Model 1
Model 1 özellik olarak 73*73 modül (karekod içindeki her bir piksele modül deniyor. yani piksel gibi düşünürsek buna da çözünürlük diyebiliriz) içerebiliyor. Toplamda 1167 karaktere kadar kodlayabiliyor. Gelişmiş hata doğrulama özelliği bulunmamakta. Görsel olarak baktığınızda karekodun sağ-üst, sol-üst ve sol-alt köşelerinde birer bulucu işaret kutucuğu (finder patterns) vardır.


   
QR Code Model 2
Model 2 ise 177*177 modül çözünürlüğüne kadar çıkabiliyor. Toplamda da 7089 karakter kodlayabiliyor. Model 1 den geliştirileren bu yeni modelde gelişmiş hata doğrulama (error correction) özelliği de mevcuttur. (Bu çok önemli bir özelliktir) Görsel olarak baktığınızda model 1 deki gibi karekodun sağ-üst, sol-üst ve sol-alt köşelerinde birer bulucu işaret kutucuğu (finder patterns) vardır. Model 1 deki bu görünüme ilaveten sağ-alt köşeye yakın yerde, biraz daha iç konumda diğer üçünden biraz daha ufak bir bulucu işaret kutucuğu daha vardır.









Biraz yer kaplayacak fakat yaptığım ufak bir deneyi paylaşmak istiyorum sizlerle. İşimize özel ürettiğimiz karekodumuz kirlenirse, yırtılırsa, yıpranırsa, çizilirse, kazınırsa, üzerine boya-mürekkep vs damlarsa ne olacak? Karekodumuz okunamaz duruma mı gelecek? İşte şimdi tam olarak bu soruların cevabını yaptığım bu testte bulacağız. (okutma testlerini android cep telefonumdaki zxing kütüphanesi kullanan barkod tarayıcı uygulaması ile yaptım)

ECC yani, Error CorreCtion, Türkçesiyle hata doğrulama/düzeltme özelliği QR Code'larda 4 seviye şeklinde bulunmaktadır:

  • Level L = yaklaşık %7 civarında düzeltme sağlar.
  • Level M = yaklaşık %15 civarında düzeltme sağlar.
  • Level Q = yaklaşık %25 civarında düzeltme sağlar.
  • Level H = yaklaşık %30 civarında düzeltme sağlar.


QR Code Model 1 - Level L için yaptığım testler ve karekodların altında test sonuçları:
Okunabilen: QR Code Model 1. ECC Level-L
Okunabilen: QR Code Model 1. ECC Level-L
OKUNAMAYAN: QR Code Model 1. ECC Level-L
Okunabilen: QR Code Model 1. ECC Level-L
OKUNAMAYAN: QR Code Model 1. ECC Level-L
---------------------------------------------------------------------------------------------------------------------------------


QR Code Model 2 - Level H için yaptığım testler ve karekodların altında test sonuçları:
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
Okunabilen: QR Code Model 2. ECC Level-H
OKUNAMAYAN (eh bir zahmet okunamasın artık :) ): QR Code Model 2. ECC Level-H


DataMatrix:
Tam adı DataMatrix ECC200 (error correction / hata doğrulama seviyesi 200) olan bu karekod, Aucity CiMatrix Inc. / Siemens ortaklığındaki kurumda QR Code'dan ilham alınarak geliştirildi ve aynı Denso Wave firmasının QR Code için yaptığı gibi DataMatrix için alınan patent te halka açık halde ücretsiz şekilde kullanıma sunuldu.

DataMatrix karekodların kendi içinde ayrılan dört farklı kodlama tipi vardır:
  • 0 - BASE256: 8 bit değerleri (yani komple ASCII karakter tablosunu) kodlamak için kullanılır.
  • 1 - C40: nümerik ve büyük harf karakterleri kodlaman içindir. 3 alfanümerik veriyi 2 byte'a kodlar.
  • 2 - TEXT: nümerik, küçük ve büyük harf karakterler içindir. 3 alfanümerik veriyi 2 byte'a kodlar.
  • 3 - ASCII: esasen 0-127 arasındaki ASCII karakterleri kodlamak içindir. Her byte için 1 veya 2 karakter kodlar.GS1-DataMatrix, DOD UID veya ISO/IEC15434 kodlarken bu mod gereklidir.
DataMatrix karekod tipine ait kapasite bilgilerini gösteren tablo

ilerde devam edecek (daha yazacak çok şey var bu konuda)... :)

Hiç yorum yok:

Yorum Gönder