Systemy kodów kreskowych - kod QR

| Gospodarka Artykuły

Znane nam z życia codziennego etykiety z opisami produktów są mało wydajne w automatycznym procesie produkcji. Informacje przeznaczone dla ludzi i opisane jednym z wielu alfabetów upraszcza się i kompresuje za pomocą kodów kreskowych. Aktualnie wyróżnić można około 250 takich standardowych systemów kodowania. Dwuwymiarowy system kodowania QR jest przykładem opracowanego dla alfabetów azjatyckich, który staje się ogólnoświatowym standardem. Aktualnie jest najlepszym systemem przeznaczonym do odczytu przez urządzenia przenośne mające kamerę oraz dostęp do Internetu.

Systemy kodów kreskowych - kod QR

Pierwszy i nadal powszechnie stosowany standard UPC (Universal Product Code) powstał już w latach 70. Przeznaczony był do usprawnienia sprzedaży oraz gromadzenia informacji magazynowych. Całość kodu składa się z 48 lub 95 bitów i pozwala na zapisanie 6 lub 12 cyfr. Każda cyfra kodowana jest za pomocą 7 bitów, kod zawiera dodatkowo pola początku, środka i końca. Na ostatnim miejscu znajduje się suma kontrolna, która pozwala na sprawdzenie poprawności odczytu. Kod może być skanowany przy użyciu skanerów ręcznych i może być drukowany na miejscu w sklepie.

Rozszerzenie standardu UPC stanowi kod 128. Pozwala on na zapisanie 128 znaków - cyfr, liter oraz kilkunastu symboli. Obejmuje 128 znaków oznaczonych w kodzie ASCII numerami 32-126 oraz 200-211. Najbardziej rozpowszechnioną wersją kodu 128 jest standard GS128 używany głównie przez firmy transportowe oraz pakujące. Cechą wyróżniającą kod GS128 jest zastosowanie identyfikatorów zastosowań. Są to dodatkowe pola opisujące rodzaj przenoszonej informacji (np. IZ15 - data trwałości, IZ11 - data produkcji czy IZ412 - producent).

W miarę poszerzania obszarów zastosowań kodów kreskowych pojawiły się nowe wymagania co do ilości informacji, rozmiarów kodu oraz bezbłędności
odczytu danych. Już w latach 80. pojawiły się pierwsze kody dwuwymiarowe, które oferowały możliwość zapisu dużo większej ilości informacji na małej powierzchni. Standardy takie jak Kod 16K czy PDF417, określane często jako kody piętrowe, można opisać jako złożenie kilku warstw kodu jednowymiarowego. Kod PDF417 na powierzchni porównywalnej z powierzchnią kodu UPC mieści ponad 1000 znaków.

W latach 90. rozpoczął się intensywny rozwój kodów, za pomocą których można zapisać alfabety spoza standardu ASCII, takie jak arabski, grecki, czy chińskich znaków logograficznych. Kod Aztec czy QR to zaawansowane obrazy zawierające matryce punktów. Umożliwiają zapisanie dużej ilości informacji zapewniając równocześnie szybki odczyt danych oraz korektę błędów.

Punkty charakterystyczne kodu QR

Rys. 1. Punkty charakterystyczne kodu QR: A – punkty detekcji, B – wzorzec czasu, C – punkty kalibracji, D – obszar danych, E – ramka

Cechy kodu QR

Kod QR ma postać kwadratu, w którym dane zapisywane są za pomocą białych i czarnych punktów zwanych modułami. Oprócz informacji użytecznej w polu kodu zapisane są także dodatkowe dane pozwalające na poprawny i szybki odczyt, a także na korektę błędów. Standard określa 40 wersji kodu QR. Najmniejszy z nich (wersja 1) ma rozmiar 21×21 modułów. Każda kolejna wersja ma o 4 moduły więcej w pionie i poziomie. Najwięcej informacji zawiera wersja 40 o rozmiarze 177×177 modułów. Można w nim zapisać ponad 7000 cyfr (w porównaniu z 12 w kodzie UPC) lub ponad 4000 znaków.

Cztery poziomy korekcji błędów pozwalają na odczyt danych nawet z kodu uszkodzonego w 30%. Przy zastosowaniu wyższego poziomu korekcji znacznie zmniejsza się ilość przechowywanych informacji. Przykładowe dane dla wybranych 5 wersji przedstawiono w tabeli 2.

Kod QR można odczytać za pomocą większości urządzeń przenośnych wyposażonych w kamerę. Specyfikacja kodu QR jest darmowa, a w sieci można znaleźć otwarte algorytmy odczytu tego kodu. Odczytane dane można w bardzo prosty sposób połączyć z dostępnymi w telefonie aplikacjami, wyświetlając automatycznie odczytaną stronę WWW, przesyłając maila na podany adres, zapisując wizytówkę w kontaktach, czy dodając wydarzenie do kalendarza. Dla przekazywania bardzo małych ilości danych (np. samego adresu WWW lub e-mail) powstała specjalna wersja Mikro QR.

Odczyt punktu detekcji kodu QR

Rys. 2. Odczyt punktu detekcji niezależnie od położenia daje informację 1:1:3:1:1 a przesunięcie środka w punkcie detekcji pozwala na zmniejszenie przesunięcia płaszczyzn

W obszarze kodu QR wyróżnić można 5 charakterystycznych punktów, które przedstawione zostały na rysunku 2. W trzech rogach pola kodu znajdziemy punkty detekcji (finding pattern) otoczone przez białą ramkę. Pozwalają one na określenie płaszczyzny, wielkości oraz położenia kodu względem kamery.

Niezależnie od położenia punkt detekcji odczytywany w różnych kierunkach daje zawsze informację 1:1:3:1:1 (rys. 2). Odnalezienie takich trzech wzorców pozwala na pozycjonowanie obrazu i przyspieszenie kolejnych etapów odczytu kodu (rys. 3a). Elementami podobnymi do punktu detekcji są mniejsze punkty kalibracji (aligment pattern). Ich symetryczne rozmieszczenie i większa ilość pozwalają na eliminację odchyleń płaszczyzny kodu względem płaszczyzny kamery - rys. 3c i 3d. Liczba punktów detekcji zależna jest od wersji kodu QR, a dokładniej od jego wielkości i poziomu zabezpieczenia.

Deformacje kodów QR

Rys. 3. Możliwe deformacje odczytywanych kodów QR

Zniekształcenia płaszczyzny eliminowane za pomocą punktów kalibracji powstają w szczególności, gdy kod przyklejony jest do niepłaskich powierzchni - butelek, torebek foliowych itp. Punkty kalibracji umieszczone są w równych odstępach, a informację o odkształceniu można uzyskać, porównując położenie zarejestrowanego punktu centralnego do centrum obliczonego na podstawie otaczającej ramki.

Ilość informacji, jaką można umieścić wewnątrz kodu QR, zależna jest od obszaru oraz rozdzielczości. Wielkość pojedynczego pola danych oraz odstęp możemy skalibrować za pomocą wzorca czasu (timing pattern). W standardzie zarezerwowano na ten cel po jednej linii i kolumnie, które wypełnione są naprzemiennie modułami jasnymi i ciemnymi.

Odczyt wzorca czasu pozwala też na wykrywanie odchyleń obrazu względem płaszczyzny kamery (rys. 3c i 3d). Wokół całego kodu umieszcza się ramkę (quite zone) która pozwala wyodrębnić obszar kodu z całego zdjęcia.

Głównym nośnikiem informacji w kodzie są komórki danych (data area) czarne i białe punkty oznaczające odpowiednio 0 i 1 logiczną. Informacje zapisane są za pomocą kodu Reed-Solomon.

Bartłomiej Grześkowiak

Zobacz również