Gdzie-moja-paka
CODE

Gdzie-moja-paka

Przeciągasz etykietę kurierską na okno, wpisujesz numer zamówienia — reszta dzieje się sama.

PROJECT
CODE-039
STOS
PYTHON · OCR
PRZEWOŹNICY
INPOST · POCZTEX · INNI
ROZPOZNAWANIE
OFFLINE
WEJŚCIE
DRAG & DROP PDF
STATUS
UKOŃCZONY
DATA
24 sierpnia 2026

Aplikacja desktopowa dla magazynu i obsługi zamówień. Program sam rozpoznaje przewoźnika, odczytuje numer listu przewozowego, pobiera aktualny status i pilnuje przesyłki aż do doręczenia. Rozpoznawanie działa offline — internet potrzebny jest wyłącznie do pobrania statusu.

PARCEL / DROGA PRZESYŁKIODPYTYWANIE CYKLICZNE
ŚLEDZENIE

Paczka przesuwa się po osi statusów, a program odpytuje przewoźnika w tle — pierścienie rozchodzące się od punktów kontrolnych to kolejne zapytania do API. Statusy z różnych przewoźników są sprowadzane do jednego słownika, dlatego na osi widać cztery etapy, a nie kilkanaście różnych nazw. Program przestaje pytać dopiero po doręczeniu.

NADANAetykieta wczytanaW TRANSPORCIEsortowniaW DORĘCZENIUkurierDORĘCZONApotwierdzenieZAMÓWIENIE154236KURIERInPostNR PRZESYŁKI5200000123503330…SPRAWDZONOprzed chwiląBŁĘDNY ODCZYT NUMERU LEPIEJ ODRZUCIĆ, NIŻ ODPYTAĆ PRZEWOŹNIKA O NIEISTNIEJĄCĄ PRZESYŁKĘ
ROZPOZNAWANIE ETYKIETY DZIAŁA OFFLINE · INTERNET POTRZEBNY WYŁĄCZNIE DO POBRANIA STATUSU
PARCEL.TRACKROZPOZNAWANIE ETYKIET KURIERSKICH
OFFLINE + API
WEJŚCIEPRZETWARZANIENARZĘDZIEDECYZJAKONTROLAMAGAZYNWYJŚCIEODPYTYWANIE CYKLICZNE01PLIK ETYKIETYdrag & drop02EKSTRAKCJA PDF03OCRgdy skan04ROZPOZNANIEKURIERA05NUMER LISTU06WALIDACJAWZORCA07NUMERZAMÓWIENIA08API PRZEWOŹNIKA09BAZA PRZESYŁEK10STATUSdo doręczenia
ROZPOZNAWANIE DZIAŁA BEZ SIECI · INTERNET POTRZEBNY WYŁĄCZNIE DO POBRANIA STATUSU OD PRZEWOŹNIKA
PARCEL / ROZPOZNANIE ETYKIETYEKSTRAKCJA → OCR → WZORZEC
OFFLINE
InPost520000012350333082465252PACZKOMATWYKRYTE POLAPRZEWOŹNIKInPostNR PRZESYŁKI5200000123503330…WZORZEC24 cyfry · OKŹRÓDŁOwarstwa tekstowa PDFMAPOWANIE STATUSÓW DO WSPÓLNEGO SŁOWNIKAInPost: „Wysłana z oddziału”W TRANSPORCIEPocztex: „Przyjęta w placówce”NADANADPD: „Out for delivery”W DORĘCZENIUAllegro: „Delivered”DORĘCZONA
WALIDACJA WZORCA PRZED ZAPYTANIEM · BŁĘDNY ODCZYT LEPIEJ ODRZUCIĆ, NIŻ ODPYTAĆ O NIEISTNIEJĄCĄ PRZESYŁKĘ
01

PROBLEM

Obsługa zamówień sprowadza się często do pytania „gdzie jest paczka klienta numer 154236”. Odpowiedź wymaga znalezienia etykiety, odczytania numeru listu, wejścia na stronę przewoźnika i wklejenia numeru — przy kilkudziesięciu zapytaniach dziennie to godziny pracy.

Do tego każdy przewoźnik ma inny format etykiety i inny wzorzec numeru, a część etykiet to skany bez warstwy tekstowej.

02

POMYSŁ

Zredukować całą operację do jednego gestu: przeciągnięcia pliku na okno. Program ma sam rozpoznać, czyja to etykieta, wyciągnąć numer, powiązać go z zamówieniem i od tej chwili pilnować przesyłki, odpytując przewoźnika cyklicznie aż do doręczenia.

03

PROJEKT

Rozpoznawanie jest dwustopniowe. Najpierw próba ekstrakcji warstwy tekstowej z PDF — szybka i dokładna. Dopiero gdy jej nie ma, uruchamia się OCR. Ta kolejność ma znaczenie kosztowe: większość etykiet z systemów nadawczych ma tekst, więc OCR uruchamia się rzadko.

Przewoźnik rozpoznawany jest po wzorcu numeru i charakterystycznych elementach układu etykiety. Numer przechodzi walidację wzorca, zanim trafi do zapytania — błędny odczyt lepiej odrzucić, niż odpytać przewoźnika o nieistniejącą przesyłkę.

Osobno obsłużone są przesyłki nadane przez Allegro Delivery, które mają własną specyfikę numeracji.

Statusy z różnych API są sprowadzane do wspólnego słownika. Każdy przewoźnik opisuje ten sam etap innymi słowami, a operatora interesuje jedno: czy paczka jedzie, czeka, czy została doręczona. Mapowanie odbywa się w warstwie adaptera, więc dodanie nowego przewoźnika nie zmienia niczego w interfejsie.

04

REALIZACJA

Program przechowuje przesyłki lokalnie i odpytuje API przewoźników cyklicznie, pokazując, kiedy ostatnio sprawdzał. Interfejs jest celowo minimalny: numer zamówienia, kurier, numer przesyłki, status, data ostatniej zmiany i czas ostatniego sprawdzenia.

W repozytorium leży katalog labels_probki z realnymi etykietami różnych przewoźników — to on stanowi zestaw testowy rozpoznawania. Dodanie nowego przewoźnika jest opisane w README jako osobna procedura.

Program jest budowany do jednego pliku EXE i ma dwa zestawy zależności — podstawowy oraz osobny dla OCR. Rozdzielenie ich było świadome: instalacja OCR jest ciężka, a część stanowisk pracuje wyłącznie na etykietach z warstwą tekstową i nie potrzebuje jej wcale.

05

EFEKT

Odpowiedź na pytanie o przesyłkę zajmuje sekundy zamiast minut, a status aktualizuje się bez udziału człowieka. Dane osobowe z etykiet są traktowane osobno — README ma dedykowaną sekcję o ich ochronie, bo etykieta kurierska to imię, nazwisko i adres.

07

WNIOSKI

Największym zaskoczeniem była jakość etykiet. Zakładałem, że OCR będzie rzadkością — w praktyce część systemów nadawczych generuje PDF-y, w których numer jest obrazkiem. Dwustopniowe rozpoznawanie nie było nadmiarową ostrożnością, tylko koniecznością.