
CircleCode
Oryginalny dwuwymiarowy kod kreskowy o geometrii polarnej na okrągłe etykiety 20–40 mm.
- PROJECT
- LAB-052
- GEOMETRIA
- POLARNA, Ø 20–40 mm
- KOREKCJA
- REED-SOLOMON GF(256)
- KONTROLA
- CRC-32
- DRUK
- ZPL · TSPL · EPL · PDF
- STATUS
- UKOŃCZONY
- DATA
- 11 sierpnia 2026
Format zaprojektowany do znakowania reklamacji, zwrotów, paczek, części i dokumentów na okrągłych etykietach drukowanych na drukarkach termicznych 203/300 DPI i odczytywanych aparatem telefonu. To nie jest zdeformowany QR — ma własną geometrię, własny strumień bitów i własne wzorce pozycjonujące.

Ø 30 mm · 600 DPI · MODUŁ 0,381 mm
- 1DETEKCJA26 znaczników, 1 kandydat3.13 ms
- 2REKTYFIKACJAbłąd reprojekcji 0.337 px2.64 ms
- 3PRÓBKOWANIEmoduł 8.99 px0.47 ms
- 4DEKODOWANIERS: 0 korekcji, CRC poprawne0.12 ms
- TYP
- —
- NUMER
- —
ADRES DOCELOWY · OZNACZONY JAKO BEZPIECZNY
████████████████████████████
GDYBY CRC NIE PRZESZŁO, W TYM MIEJSCU POJAWIŁBY SIĘ KOMUNIKAT „NIE MOŻNA ODCZYTAĆ” — NIGDY PRAWDOPODOBNY NUMER. TO JEST ZASADA FAIL-CLOSED.
PROBLEM
Okrągła etykieta o średnicy 25 mm nie mieści czytelnego kodu QR w rozdzielczości drukarki termicznej. Wpisanie kwadratu w koło marnuje dużą część powierzchni, a zmniejszanie modułów poniżej fizycznej rozdzielczości głowicy daje kod, który wygląda dobrze na ekranie i nie odczytuje się z wydruku.
POMYSŁ
Zaprojektować format od zera pod okrągłą powierzchnię: dane rozłożone w pierścieniach, wzorce pozycjonujące dopasowane do geometrii polarnej, rozmiar modułu wyznaczony przez fizyczne możliwości drukarki termicznej.
Nad wszystkim jedna zasada — fail-closed, z jawną hierarchią priorytetów: brak fałszywych odczytów, niezawodne dekodowanie, odporność na wydruk, szybkość, rozmiar, wygląd. W tej kolejności, bez wyjątków.
PROJEKT
Projekt dzieli się na pięć bibliotek. Rdzeń obsługuje arytmetykę GF(256), kodowanie Reeda-Solomona, sumę CRC-32, format TLV, ramkę i geometrię. Koder odpowiada za maskowanie, przeplot i dobór wersji. Dekoder za odzyskanie formatu i logiczne odczytanie danych. Biblioteka druku renderuje w siatce kropek do PNG, BMP, SVG i PDF oraz generuje polecenia dla drukarek etykiet. Osobna biblioteka realizuje pełny potok widzenia komputerowego — z własną implementacją, przy czym OpenCV pozostaje opcjonalny.
Konsekwencje zasady fail-closed są widoczne w dwóch miejscach. Dekoder nigdy nie zgaduje: gdy CRC-32 nie przechodzi, użytkownik widzi komunikat „nie można odczytać”, a nie prawdopodobny numer reklamacji. Generator odmawia wygenerowania kodu, którego nie da się bezpiecznie wydrukować, zamiast zmniejszać moduły poniżej minimum głowicy.
Geometria polarna wymusiła własne wzorce pozycjonujące. W kodzie QR trzy kwadraty w narożnikach wyznaczają orientację i skalę; na okręgu nie ma narożników, więc rolę tę pełnią struktury pierścieniowe o znanej sygnaturze, wykrywalne niezależnie od obrotu etykiety pod aparatem.
REALIZACJA
Wszystkie pięć komponentów jest zaimplementowanych i przetestowanych. Repozytorium zawiera pełną specyfikację formatu, opis strumienia danych, dokumentację potoku dekodera, dziennik decyzji projektowych oraz osobny dokument dotyczący wersji na Androida.
Wyjście na drukarki obejmuje trzy języki poleceń — ZPL, TSPL i EPL — czyli praktycznie każdą drukarkę etykiet spotykaną w magazynie.
EFEKT
Format działa na etykietach o średnicy od dwudziestu milimetrów, przy rozdzielczości druku 203 DPI, i odczytuje się aparatem telefonu. Wersja pierwsza jest zamknięta i udokumentowana na tyle, żeby dało się napisać niezależną implementację ze specyfikacji.
Osobnym wyzwaniem był druk termiczny. Głowica ma skończoną rozdzielczość i skończoną powtarzalność, a etykieta bywa naklejona na powierzchni zakrzywionej. Renderowanie w siatce kropek — zamiast rysowania krzywych i liczenia na rasteryzator drukarki — daje kontrolę nad tym, gdzie dokładnie wypadnie każdy moduł.
GALERIA
01 ZDJĘĆCircleCode — etykieta Ø30 mm wygenerowana narzędziem cc-tool, CC-V1-L, ECC-Q, maska 5 · wygenerowane przez projekt
WNIOSKI
Jawna hierarchia priorytetów okazała się najskuteczniejszym narzędziem projektowym w całym przedsięwzięciu. Przy każdym sporze — czy zmniejszyć moduł, czy dopuścić odczyt bez pełnej kontroli sumy — odpowiedź wynikała z listy, a nie z dyskusji.


