LPR · Projekt systemu

Projekt systemu · 16.10.2026

Własny system LPR na przemysłowym SBC bez GPU: projekt

16 854 potwierdzonych ustaleń · 553 cytowanych w tekście

Projekt powstał z ustaleń badania lpr-cpu-sbc. Analitycy rozdziałów przeczytali w całości 10 264 ustalenia z prac naukowych, repozytoriów i dokumentacji technicznej, a w tekście cytują 553 ustalenia, z czego 479 naukowych lub technicznych. Deklaracje producentów pojawiają się tylko tam, gdzie innych danych nie ma, z dopiskiem „wg producenta”. Odnośniki [F…] prowadzą do ustaleń (treść i strona źródłowa), S oznacza założenie projektowe, a obliczenia są w decyzja/obliczenia/p0X.py.

System w jednym przejściu

  1. Kamera 4 MP (H.265, 25 kl./s, stała krótka ekspozycja ustawiana przez SBC) patrzy wzdłuż najazdu na szlaban i widzi tablicę w strefie ok. 2–9 m przed sobą, zanim pojazd dojedzie do linii zatrzymania.

  2. VPU dekoduje oba strumienie bez udziału CPU, RGA zmniejsza co drugą klatkę do 640×360, a pierścień trzyma 1,5 s zdekodowanych klatek.

  3. Detektor pojazdów (YOLOX, Apache 2.0, INT8 na NPU) działa stale, 12,5 kl./s na kamerę; tracker IoU z filtrem Kalmana prowadzi ślad. Pętla albo radar nie otwiera zbierania, tylko przypisuje ślad do przejazdu i uruchamia decyzję, bo najlepsze klatki są sprzed tego sygnału.

  4. Dla każdego śladu detektor tablicy z głowicą czterech narożników pracuje na wycinku z pełnej rozdzielczości na każdej klatce; CPU prostuje tablicę homografią do kanwy OCR.

  5. Wycinek przechodzi twarde bramki jakości (wielkość znaku, ostrość, kąt), a potem dwa splotowe modele OCR na NPU zwracają rozkłady prawdopodobieństw na każdej pozycji.

  6. Fuzja uśrednia rozkłady po pozycjach z wielu wycinków śladu, dekoduje wynik z ograniczeniem składni polskich tablic, a skalibrowana pewność decyduje: odczyt przyjęty, druga szansa na liście zamkniętej albo ścieżka wyjątku.

  7. Każdy przejazd zostawia wycinki, odczyty i pewności; serwer z GPU robi z nich automatyczne etykiety i douczanie, a nowa wersja modelu przechodzi kwantyzację z douczaniem i próbę w cieniu, zanim trafi na SBC.

Karta projektu: decyzje i parametry wiążące

W rozdziałach część obciążeń liczono przy różnych założeniach (5, 12,5 albo 25 kl./s; osobny regresor narożników albo głowica detektora; głos całym ciągiem albo po pozycjach). Poniższa tabela ustala wartości obowiązujące; tam, gdzie rozdział liczy inaczej, rozstrzygnięcie podaje kolumna „Źródło decyzji”.

Element Decyzja i parametry Źródło decyzji
SoC RK3588J (CPU 4× A76 + 4× A55, NPU 3 rdzenie, VPU); RK3576 tylko przy 12,5 kl./s; x86 jako porównanie 6.1
Strumień kamery H.265 Main, 4 MP (2688×1520), 25 kl./s, klatka I co 1 s, ≥8 Mbit/s, RTSP/TCP, NTP i RTCP SR 1.2, 4.1 (≥15 kl./s przy 30 km/h), 6.7 (dolna granica 12,5)
Dekodowanie MPP na jądrze BSP 6.1, NV12 w dma-buf bez kopii przez CPU; ok. 11% VPU dla 2 kamer 1.2, 6.1
Bufory pierścień 1,5 s zdekodowanych klatek na kamerę; bufor wycinków śladu ≥6 s 1.2, 5.5
Detekcja pojazdu YOLOX-Tiny, INT8, PTQ per kanał, wejście 640×384, 12,5 kl./s na kamerę, stale 1.3 (śledzenie wymaga gęstszych detekcji niż 5 kl./s z 2.1)
Śledzenie własny IoU + Kalman, kojarzenie dwuetapowe w stylu ByteTrack, bez reidentyfikacji 1.3
Wyzwalacz obraz (ślad w strefie) jako kanał podstawowy; pętla/radar przez izolowane wejście cyfrowe jako drugi kanał; „otwórz” wymaga przyjętego odczytu i potwierdzenia obecności 1.1, 6.8
Detekcja tablicy YOLOX-Tiny z głowicą 4 narożników i klasą układu (jedno-/dwurzędowa), wejście 384×384 z ramki pojazdu w pełnej rozdzielczości, QAT INT8, każda klatka aktywnego śladu 2.2, 1.4
Narożniki z głowicy detektora; osobny regresor z 5.1 tylko jako wariant, jeśli zmierzony błąd narożnika przekroczy ok. 2,8 px 2.2, 5.1
Prostowanie homografia z 4 narożników na CPU (ok. 0,3–0,45 ms), wycinek prosto do kanwy wejścia OCR 5.1, 2.3
Bramki wycinka znak ≥ 8×16 px (cel 12×24), ostrość, rozmycie ≤ ½ kreski, kąt ≤ 60° w dzień i ≤ 30° w nocy 1.4, 5.4, 5.6
OCR dwa modele splotowe bez atencji, QAT INT8 na NPU: OCR-A detektor znaków (96×288, czyta tablice dwurzędowe), OCR-B klasyfikator 9 pozycji × 37 klas (64×192); pewność na znak 2.3
Zbieranie OCR na wszystkich wycinkach po bramkach, do 15 na sekundę na ślad, minimum 3 użyteczne wycinki; koniec przy decyzji, 20 odczytach albo wyjściu tablicy z kadru 4.2, 1.4
Fuzja uśrednianie rozkładów po pozycjach w obrębie długości modalnej, z obu modeli; jakość wycinka jako bramka, nie waga; bez wyboru „najpewniejszego” odczytu 4.2 (zastępuje głos całym ciągiem z 2.6 i głos po znakach z 5.6)
Składnia szablony polskich tablic wewnątrz dekodowania; korekta tylko w parach mylnych (B/8, D/0, I/1, O/0, Z/2); tablice indywidualne osobna gałąź; zagraniczne tylko długość 5–8 4.3
Decyzja skalibrowana pewność (regresja izotoniczna na cechach przejazdu); próg z kosztów ok. 0,91 przy koszcie błędu 10× wyjątku, korygowany z krzywej ryzyko–pokrycie; poniżej progu lista zamknięta, potem ścieżka wyjątku 4.4
Rozdział NPU rdzeń 0: tor A, rdzeń 1: tor B, rdzeń 2: OCR i ponowna analiza bufora; zajętość ≤ 60% w najgorszym przypadku, ok. 75% po dławieniu termicznym 1.6, 6.1
Dane syntetyki polskich tablic (glify z Dz.U. 2024 poz. 1709) + CCPD (MIT) do pretreningu detektora + nagrania z własnych obiektów; zbiory „tylko do badań” poza treningiem 3.1, 3.2
Pętla uczenia auto-etykieta śladu przy ≥3 zgodnych odczytach i zgodności z modelem-nauczycielem; douczanie na serwerze po 2000 nowych śladach; wdrożenie przez tryb cienia 3.4, 3.5
Kamera 4 MP, obiektyw zmiennoogniskowy ustawiony na HFOV ok. 46–53°, stała ekspozycja ≤ 1/1000 s ustawiana zdalnie, IR 850 nm przy obiektywie, noc w trybie mono, WDR/BLC wyłączone 5.4, 5.5, 6.4–6.6
Montaż w linii szlabanu, przesunięcie boczne ≤ 2,5 m, wysokość 1,3–2,5 m, odczyt 2–9 m przed kamerą; druga kamera, gdy prosty najazd < ok. 6,2 m 5.5
Obudowa SBC ścieżka cieplna ≤ 2,5 °C/W przy 10 W dla 55 °C w szafce; watchdog dwupoziomowy; 24 V DC; ≥4 wejścia izolowane, ≥2 wyjścia, 2× RS-485; SSD przemysłowy na zdarzenia 6.2, 6.3
Odbiór 3000 przejazdów (≥2000 pojazdów); zaliczenie przy ≤ 20 niepoprawnych i 0 błędnych odczytach (dolna granica 95% ≥ 99,0%) 4.6

Budżety w liczbach

Najważniejsze luki

Część 1Potok przetwarzania i budżet czasu

Maszyna stanów przejazdu

DecyzjaKażdy pas ma własny automat z sześcioma stanami: BEZCZYNNOŚĆ, ŚLAD, WYZWOLENIE, DECYZJA, PRZEJAZD, WYJĄTEK. Zbieranie wycinków zaczyna się w chwili potwierdzenia śladu pojazdu w strefie pasa, a nie w chwili wyzwolenia; sygnał obecności z pętli lub radaru (styk ze sterownika szlabanu na wejście cyfrowe SBC) tylko przypisuje ślad do transakcji i otwiera termin decyzji. Wyzwolenie wizyjne (ślad stoi w strefie pętli) działa jako kanał zapasowy.

Dlaczego

Parametry i wykonanie

Stan Praca Koniec stanu
BEZCZYNNOŚĆ dekodowanie 25 kl./s, detekcja pojazdu co 2. klatkę, bufor 1,5 s ślad potwierdzony (2 kolejne detekcje w polu pasa) → ŚLAD; wyzwolenie bez śladu → WYZWOLENIE z ponowną analizą bufora
ŚLAD detekcja tablicy, bramki, OCR, głosowanie wyzwolenie przypisane do śladu → WYZWOLENIE; ślad opuszcza pole pasa bokiem lub oddala się → BEZCZYNNOŚĆ (zapis zdarzenia); ślad utracony > 1,0 s → odczyty trzymane 5 s do ponownego powiązania
WYZWOLENIE termin decyzji T_max = 1,5 s warunek zgody z 1.4 spełniony → DECYZJA; T_max minął → WYJĄTEK; sygnał zanika, a ślad się oddala → BEZCZYNNOŚĆ
DECYZJA wysłanie numeru i pewności do systemu nadrzędnego ślad przecina linię szlabanu → PRZEJAZD; ślad oddala się ≥ 0,5 s → anulowanie transakcji; 30 s bez przejazdu → WYJĄTEK
PRZEJAZD kontrola drugiego pojazdu pętla wolna ≥ 1 s i brak śladu w strefie przejazdu → BEZCZYNNOŚĆ
WYJĄTEK wysyłka 3 najlepszych wycinków i kadru do operatora, zbieranie trwa późna decyzja automatyczna lub decyzja operatora → DECYZJA; pojazd odjeżdża → BEZCZYNNOŚĆ
Zdarzenie brzegowe Obsługa
Pojazd stoi ślad „stoi”, gdy IoU ramki z ramką sprzed 1 s ≥ 0,9; OCR najwyżej 1 odczyt/s, z okresu postoju najwyżej 3 głosy (klatki są skorelowane)
Kolejka do WYZWOLENIA przechodzi tylko ślad najbliższy szlabanu, którego dolna krawędź leży w strefie pętli; ślady za nim zbierają własne odczyty i czekają na kolejny sygnał
Cofanie kierunek z ruchu dolnej krawędzi ramki; oddalanie przez ≥ 0,5 s po DECYZJI anuluje wjazd; producenci kamer robią w tym przypadku drugi odczyt (wg producenta)
Pieszy klasa „osoba” nie otwiera ŚLADU; sygnał radaru z samą osobą w strefie pętli tylko się loguje
Dwa pojazdy blisko przesłanianie małego auta przez większe to znany przypadek trudny dla śledzenia ; drugi ślad przecinający linię w tym samym otwarciu daje zdarzenie „dwa pojazdy na jedno otwarcie”
Motocykl znaki 45 mm wobec 80 mm , czyli 0,56 wysokości w pikselach (p. 8); brak tablicy po 1,0 s w strefie pętli kieruje od razu do WYJĄTKU; jeśli motocykl ma tablicę tylko z tyłu S, kamera czołowa jej nie zobaczy
Przyczepa w stanie PRZEJAZD kolejne sygnały pętli należą do tej samej transakcji

Ryzyko i lukiBrak danych w źródłach: odsetka fałszywych i pominiętych wyzwoleń pętli, radaru i wizji przy szlabanach parkingowych; dane o fałszywych wyzwoleniach fotokomórek pochodzą z systemów kontroli wysokości (ptaki, owady, rośliny) . Progi 1,0 s, 0,5 s, 5 s i 30 s są założeniami S.

Dekodowanie, zmniejszanie i bufor klatek

DecyzjaStrumień główny 2688×1520 H.265 przy 25 kl./s, I-klatka co 25 klatek, dekodowany ciągle przez MPP (jądro BSP Rockchip, bez ścieżki V4L2 z jądra głównego) do liniowego NV12 w buforach dma-buf. RGA skaluje każdą drugą klatkę do 640×360 RGB i robi wycinki z pełnej rozdzielczości bez kopiowania przez CPU. Bufor pierścieniowy trzyma 1,5 s zdekodowanych klatek na kamerę.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiPrzewodnik GStreamer Rockchip (wg producenta) odradza RGA na RK3588 jako „nieprawidłowe” , a Jellyfin i ffmpeg-rockchip używają go w potoku bez kopii . Dlatego przy starcie RGA przechodzi test zgodności z wynikiem CPU na klatce wzorcowej; przy niezgodności skalowanie przejmuje CPU. Brak danych w źródłach: czasu jednej operacji RGA dla 4 MP i jednoczesnego dekodowania 2×4 MP na RK3588 zmierzonego wprost.

Detekcja pojazdu i śledzenie

DecyzjaDetektor pojazdów rodziny YOLOX (licencja Apache-2.0), INT8, wejście 640×384, uruchamiany co drugą klatkę (12,5 kl./s na kamerę) we wszystkich stanach. Śledzenie: własny tracker IoU z filtrem Kalmana i dwuetapowym kojarzeniem w stylu ByteTrack (najpierw ramki pewne, potem słabe), bez reidentyfikacji.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: czasu YOLOX przy wejściu 640×384 na jednym rdzeniu NPU; budżet przyjmuje ostrożny czas 15,5 ms przeskalowany liniowo z YOLOv8n INT8 (p. 2). Brak danych w źródłach: skuteczności detekcji klas „osoba” i „motocykl” przy szlabanach.

Wybór wycinków do OCR i koniec zbierania

DecyzjaDetektor tablicy z czterema narożnikami pracuje na każdej klatce aktywnego śladu (25 kl./s) na wycinku z pełnej rozdzielczości. Wycinek trafia do OCR tylko po przejściu sześciu twardych bramek; z każdej pary kolejnych klatek do OCR idzie lepsza (najwyżej 12,5 odczytu/s na ślad). Bramki odrzucają, ale nie ważą głosów. Zbieranie kończy zgoda trzech odczytów, limit 20 odczytów lub wyjście tablicy z kadru.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiWyniki 66,7→81,8% dotyczą tablic rumuńskich, 29→69% saudyjskich, a granica 8×16 px tablic chińskich i włoskich. Brak danych w źródłach: zależności dokładności OCR od kąta i ostrości dla tablic polskich.

Budżet czasu i opóźnienie decyzji

DecyzjaBudżet liczony dla najgorszego przypadku: oba tory aktywne jednocześnie, czasy NPU ostrożne, CPU RK3588J w trybie normalnym 1,6 GHz (wg producenta) . Każda jednostka w tym przypadku ma zajętość ≤ 60%, żeby spadek przepustowości termicznej nie zatrzymał potoku. Interfejs OCR ma twardy limit 40 ms na wycinek na jednym rdzeniu A76 przy 1,6 GHz.

Dlaczego

Parametry i wykonanieTabela dla dwóch kamer, stan aktywny obu torów (p. 5):

Etap Jednostka ms/wywołanie Wywołań/s Zajętość
Dekodowanie H.265 4 MP VPU 2,2 50 11%
Skalowanie do 640×360 + wycinki pojazdu RGA 2,0 S 75 15%
Detekcja pojazdu 640×384 NPU, rdzeń toru 15,5 12,5 19%
Detekcja tablicy 512×256 NPU, rdzeń toru 8,2 25 21%
Razem rdzeń NPU toru NPU 0 / NPU 1 — — 40% (55% po spadku termicznym)
Post-proc., tracker, prostowanie, bramki CPU A76 0,5–2,0 25–50 0,09 rdzenia na tor
OCR (limit interfejsu) 2× CPU A76 40 25 50% dwóch rdzeni
OCR (szacunek klasy CTC) 2× CPU A76 16,1 25 20% dwóch rdzeni
Głosowanie, automat stanów CPU A55 0,2 50 1%

Ryzyko i lukiCzasy NPU dla wejść 640×384 i 512×256 to liniowe przeskalowanie pomiarów 640×640 S. Brak danych w źródłach: opóźnienia kamera → SBC (L_kam); relacja użytkownika mówi o ok. 30 klatkach opóźnienia 720p w łańcuchu kamera–PC , więc pomiar L_kam jest warunkiem odbioru. Brak pomiaru OCR klasy CTC na A76 i na NPU RK3588.

Rozdział pracy, kolejki i degradacja

DecyzjaStałe przypisanie: rdzeń NPU 0 obsługuje tor A (pojazd + tablica), rdzeń NPU 1 tor B, rdzeń NPU 2 jest wspólny dla OCR (gdy model CTC skonwertuje się bez operatorów na CPU) i ponownej analizy bufora. Potok jest napisany w C++, z synchronicznymi wywołaniami na tor i krótkimi kolejkami „ostatnia klatka wygrywa”. Przeciążenie obsługuje czterostopniowa degradacja sterowana zmierzonym czasem oczekiwania i temperaturą.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiDane termiczne pochodzą z Raspberry Pi 4, nie z RK3588J w szafce. Próg 85 °C i progi kolejek są założeniami S. Brak danych w źródłach: zmierzonej przepustowości trzech rdzeni NPU RK3588 z przypisaniem stałym wobec puli wątków przy dwóch kamerach.

Założenia S i obliczenia

Część 2Modele i ich trening

Model Architektura Wejście Licencja Czas NPU (INT8) Częstość
Detektor pojazdu YOLOX-Tiny, 4 klasy 640×384, klatka 640×360 z dopełnieniem Apache 2.0 ok. 26 ms (obl. D) 5 kl./s na kamerę
Detektor tablicy z narożnikami YOLOX + głowica 4 punktów + klasa układu 384×384, wycinek pojazdu z klatki 4 MP Apache 2.0 (kod własny) ok. 15 ms (obl. D) każda klatka w strefie odczytu
OCR-A detektor znaków (rodzina CR-NET/Fast-OCR) na YOLOX-Nano 96×288, odcienie szarości Apache 2.0 (kod własny) 1–2 ms (obl. D) 6 najlepszych wycinków
OCR-B CNN + 9 głowic pozycji × 37 klas 64×192, odcienie szarości kod własny 1–2 ms (obl. D) te same 6 wycinków

Detektor pojazdu

DecyzjaPojazd wykrywa YOLOX-Tiny z klasami: osobowy, dostawczy lub ciężarowy, autobus, motocykl. Model pracuje w INT8 na NPU RK3588 z wejściem 640×384 (klatka 640×360 dopełniona do wielokrotności 32) i 5 kl./s na kamerę. Wyznacza okno zdarzenia i ramkę pojazdu; tablicy nie szuka.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: rozmiaru wejścia modelu YOLOX w pomiarze 18 ms, mAP YOLOX-Tiny na COCO oraz skuteczności YOLOX na polskich wjazdach.

Detektor tablicy z czterema narożnikami

DecyzjaTablicę wykrywa jednoetapowy detektor na szkielecie YOLOX-Tiny z głowicą czterech punktów kluczowych (narożniki w kolejności LG, PG, PD, LD), wynikiem tablicy i klasą układu (jednorzędowa, dwurzędowa). Wejście: ramka pojazdu z klatki 4 MP, powiększona o 10% S i przeskalowana do 384×384. Narożniki przenoszę do pełnej rozdzielczości i prostuję tablicę homografią z czterech punktów prosto do kanwy OCR. Nie używam samej ramki, ramki obróconej (OBB) ani STN.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: błędu narożników w pikselach dla tablic polskich i liczby oznaczonych zdjęć potrzebnej do dostrojenia głowicy punktów. Tablice dwurzędowe są w otwartych zbiorach rzadkie (UC3M-LP: 31 z 2547 ).

OCR

DecyzjaOdczyt wykonują dwa modele z różnych rodzin, oba czysto splotowe (bez LSTM i atencji), w INT8 na NPU:

Na wyjściu każdy model daje ciąg, pewność dla każdego znaku (OCR-A: wynik ramki znaku, OCR-B: maksimum softmax na pozycji) i układ z detektora tablicy.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: wyniku detektora znaków i klasyfikatora pozycji na polskich tablicach oraz ich dokładności po INT8. Zdjęcia nocne w IR stanowiły 21,5% zbioru, a dały 39–53% błędów atrybutów pojazdu i znaczną część błędów odczytu ; śruby mocujące odpowiadały za 72,6% z 700 błędnych odczytów . Tych błędów nie usuwa wybór architektury.

Przepis treningu

DecyzjaOba modele OCR i detektor tablicy uczę w trzech etapach: (1) pretrening na syntetycznych tablicach polskich i europejskich, (2) trening na prawdziwych tablicach europejskich z wielu krajów, (3) dostrojenie na tablicach polskich, w tym z docelowych kamer. Na końcu QAT (rozdz. 2.5). Zbiory dzielę po numerze tablicy i po kamerze, nie losowo po zdjęciach.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: zysku z syntezy dla tablic polskich, liczby polskich zdjęć potrzebnej do 99% oraz licencji GLPD wprost dopuszczającej trening modelu zamkniętego (źródła podają tylko warunek linku ).

Kwantyzacja i konwersja na RKNN

DecyzjaDetektor pojazdu: PTQ INT8 z kwantyzacją wag per kanał. Detektor tablicy z narożnikami i oba modele OCR: QAT INT8, 10 epok po treningu FP32. Na NPU idą tylko sploty, BN i proste aktywacje. Na CPU, w C++, zostają: dekodowanie wyjść, sigmoid i softmax, NMS, punkty kluczowe, homografia z próbkowaniem wycinka, reguły składni i głosowanie.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: pomiaru QAT dla OCR i detektora z punktami kluczowymi na RKNN oraz listy operatorów RKNN 2.x działających na NPU.

Fuzja 2–3 modeli OCR

DecyzjaFuzja dwóch modeli (OCR-A i OCR-B) na 6 najlepszych wycinkach śladu daje 12 głosów. Wynik to głosowanie większościowe na poziomie całego ciągu; remis rozstrzyga OCR-A (zasada MV-BM ). Odczyt przyjmuję, gdy zwycięski ciąg ma co najmniej 7 z 12 głosów i co najmniej 2 głosy od każdego modelu S; w przeciwnym razie trafia do ścieżki „niepewny” (rozdz. o decyzji). Czasowo fuzja na NPU się opłaca: dwa modele to 26 ms pracy NPU na przejazd, trzeci dodałby 13 ms (obl. E). Trzeciego modelu w pierwszej wersji nie dodaję, bo zysk z trzeciego modelu jest mniejszy niż z kolejnych klatek; fuzji po najwyższej pewności nie stosuję.

Dlaczego

Parametry i wykonanie

def fuse(reads):                      # reads: [(model, text, char_conf)], 2 modele x K wycinków
    reads = [r for r in reads if syntax_ok(r.text)]           # reguły z rozdz. 2.3
    votes = Counter(r.text for r in reads)
    top = votes.most_common()
    if not top: return None, "niepewny"
    best_n = top[0][1]
    tied = [t for t, n in top if n == best_n]
    text = tied[0] if len(tied) == 1 else pick_from_model(reads, tied, "OCR-A")   # MV-BM
    by_model = Counter(r.model for r in reads if r.text == text)
    ok = best_n >= 7 and by_model["OCR-A"] >= 2 and by_model["OCR-B"] >= 2      # S, przy 12 głosach
    return text, "pewny" if ok else "niepewny"

Ryzyko i lukiBrak danych w źródłach: zysku z połączenia dwóch modeli i wielu klatek naraz na tablicach polskich. Przy niezależnych odczytach 12 głosów o trafności 90% dałoby 99,95% (obl. F), ale błędy klatek jednego przejazdu są skorelowane (śruby , stały kąt), więc to tylko górna granica.

Założenia S i obliczenia

Część 3Dane treningowe i pętla uczenia na obiekcie

Zestaw startowy danych i licencje

DecyzjaModel produktu uczy się wyłącznie na danych, do których właściciel ma prawo trenowania modelu zamkniętego: własnych syntetykach polskich tablic, zbiorze CCPD (licencja MIT) użytym tylko do pretreningu detektora tablicy i narożników, nagraniach z pierwszych obiektów właściciela opisanych ręcznie oraz, opcjonalnie, zbiorze UniData PL kupionym na umowie, która wprost dopuszcza trening modelu komercyjnego. Zbiory „tylko do badań” i zbiory bez ustalonej licencji nie wchodzą ani do treningu, ani do pretreningu, ani do oceny; ich wyniki z publikacji służą wyłącznie jako punkty odniesienia.

Dlaczego

Parametry i wykonanie

Źródło Użycie Liczność Status prawny
Syntetyki PL (3.2) pretrening i trening OCR, detektor (wklejki) 100 000 z szablonów + permutacje własne
CCPD Base pretrening detektora tablicy i regresji narożników 200 000 (100 000 trening, 100 000 walidacja) MIT
CCPD-Tilt, CCPD-Rotate zewnętrzny test detektora przy kącie 30 216 + 10 053 MIT
Pilotaż na obiektach właściciela detektor, OCR, test 200 klatek na kamerę, ≥5 000 unikalnych tablic (3.6) własne, przetwarzanie na podstawie oceny skutków S
UniData PL OCR, test zewnętrzny 83 793 zdjęć tylko po umowie; metadane HF: cc-by-nd-4.0 , kopia ud-smart-city: cc-by-nc-nd-4.0
RodoSol, UFPR-ALPR, ELP, UC3M-LP, Katowice, GLPD nie używać — badawcze albo nieustalone

W pretreningu detektora strata narożników CCPD ma wagę 0,3 względem straty ramki S, bo narożniki są niedokładne ; pełną wagę dostają narożniki opisane na nagraniach pilotażowych.

Ryzyko i lukiBrak danych w źródłach: publiczny polski zbiór z licencją dopuszczającą zamknięty produkt nie istnieje, więc cała część prawdziwa pochodzi z obiektów właściciela albo z zakupu. Cena i warunki UniData nie występują w ustaleniach; pełny zbiór jest dostępny po kontakcie z dostawcą .

Generator syntetycznych polskich tablic

DecyzjaGenerator jest rendererem szablonowym: własne wektorowe glify zbudowane z geometrii przepisów (wariant ostry i zaokrąglony), tła i elementy tablicy rysowane programowo, bez GAN i bez silnika 3D w pierwszej wersji. Daje 100 000 wycinków OCR, uzupełnionych permutacjami znaków na prawdziwych wycinkach, oraz wklejki tablic na prawdziwe klatki dla detektora. Proporcja w partii uczącej: 3:1 (syntetyki:prawdziwe) do 5 000 unikalnych tablic prawdziwych, 1:1 do 20 000, potem 1:3 S.

Dlaczego

Parametry i wykonanieSpecyfikacja obejmuje wyłącznie cechy opisane w ustaleniach:

geometria: homografia, yaw ~ U(0°, 60°), pitch ~ U(0°, 45°), roll ~ U(-10°, 10°)       S
rozmycie:  jądro liniowe 0–12 px w kierunku ruchu (obl. C: 1/250 s, 200 px, 60° -> 11,1 px)
skala:     zmniejszenie dwuliniowe do 40–100% i powrót; szum Poissona; JPEG q ~ U(30, 95)
IR nocą:   30% próbek mono, jasność tablicy ±30% , halo wokół znaków             S
pogoda:    mgła/deszcz/cień/śnieg/odblask (Albumentations) w 30% próbek                  S
brud:      zasłonięcia 0–20% powierzchni tablicy                                          S
kolor:     bez zmian odcienia; jasność i kontrast ±15%                                    

Zakres kątów obejmuje oba osie z zapasem względem pasa: w benchmarku syntetycznym 90–92% siatki kątów [0°, 89°]² daje się odczytać po rekonstrukcji . Udział IR wynika z błędów: zdjęcia nocne IR to 21,5% zbioru UFPR-VeSV, ale 53,4% błędów rozpoznania marki, czyli 4,18 razy wyższa stopa błędów (obliczenia D) ; wygląd tablic w IR i w świetle widzialnym się różni . Te same pięć transformacji pogodowych obniżyło polski model do 73,49% w deszczu i 44,58% w śniegu . Detektor dostaje wklejki syntetycznych tablic, zwłaszcza dwurzędowych, na prawdziwe klatki z obiektów; tak zbudowano 50 000 tablic dwurzędowych w TransLPRNet .

Ryzyko i lukiBrak danych w źródłach: zmierzony zysk z syntezy dla tablic polskich lub europejskich i z symulacji nocnego IR. Proporcje 3:1, 1:1 i 1:3 opierają się na relacji 2,86:1 z pracy europejskiej i na malejącym zysku z syntezy przy rosnącej liczbie prawdziwych tablic .

Podział danych bez niemal-duplikatów i ocena międzyzbiorowa

DecyzjaJednostką podziału jest grupa tablicy: wszystkie wycinki z tym samym znormalizowanym numerem trafiają do jednego zbioru, niezależnie od obiektu. Każda wersja modelu ma trzy wyniki: test czasowy (ostatnie 4 tygodnie każdego obiektu) S, test z pominiętym obiektem (leave-one-site-out) i stały zbiór referencyjny 3 000 przejazdów. Audyt hashem percepcyjnym wyłapuje niemal-duplikaty między grupami.

Dlaczego

Parametry i wykonaniePrzy losowym podziale zdjęć 80/20 tablica z 10 zdjęciami trafia do obu zbiorów z prawdopodobieństwem 0,893 (obliczenia E).

klucz = normalizuj(numer)                    # wielkie litery, bez spacji i myślników
grupy = union_find(klucz)                    # jedna grupa = jedna tablica na wszystkich obiektach
for para in lsh(phash(wycinek_wyprostowany), hamming <= 6):     # S
    if mse(para) < 500: połącz(grupy, para)  # błędna etykieta tej samej tablicy 
podział: grupa -> train/val/test (70/10/20) S; obiekt pominięty: wszystkie grupy obiektu -> test

Stały zbiór referencyjny: 3 000 przejazdów z co najmniej 5 obiektów, warstwy: noc IR ≥20%, kąt powyżej 30° ≥20%, tablice dwurzędowe i typy specjalne ≥10% S. Przy 10 błędach na 3 000 dolna 95-procentowa granica skuteczności wynosi 99,44%; potwierdzenie ≥99% wymaga 299 przejazdów bez błędu albo 1 693 przy 10 błędach (obliczenia G). Zewnętrzny test detektora: CCPD-Tilt i CCPD-Rotate; zewnętrzny test OCR: UniData PL po zakupie. Zbiór referencyjny nigdy nie wchodzi do treningu ani do kalibracji kwantyzacji.

Ryzyko i lukiNa parkingu ze stałymi użytkownikami te same tablice wracają setki razy, więc liczba unikalnych grup jest wielokrotnie mniejsza od liczby przejazdów S. Brak danych w źródłach: progi hasha percepcyjnego dla wycinków tablic.

Zapis na SBC i automatyczne etykiety

DecyzjaSBC zapisuje dla każdego przejazdu wszystkie wycinki tablicy ze śladu wraz z odczytami i pewnościami. Etykieta śladu powstaje automatycznie, gdy co najmniej 3 ważne odczyty dają ten sam ciąg, zwycięzca ma ≥60% głosów, a model-nauczyciel na serwerze daje ten sam ciąg. Etykieta przechodzi na wszystkie wycinki śladu, także małe i rozmyte, na których pojedynczy odczyt był błędny. Ślady bez zgody trafiają do kolejki operatora.

Dlaczego

Parametry i wykonanieZapis na wycinek: JPEG tablicy z marginesem 20%, szerokość do 256 px, ok. 10 kB S (odniesienie: brytyjski standard wymaga wycinka 120 × 60 px do 3 kB ), cztery narożniki, pewność detekcji, ciąg OCR, prawdopodobieństwa dwóch najlepszych klas na znak, wariancja Laplasjanu oraz średnia i odchylenie jasności , czas, kamera, identyfikator śladu, decyzja szlabanu. Przy 600 przejazdach na dobę i 15 wycinkach to 88 MB na dobę i 2,57 GB na 30 dni (obliczenia J) S. SBC nie zapisuje pełnych klatek, wysyła na serwer tylko ślady wybrane poniżej i usuwa bufor po 30 dniach S.

ważne = [r for r in ślad if regex_PL(r.tekst) and min(r.p_znaku) > 0.4]   # 
zwycięzca, udział = głosowanie_ciągu(ważne, waga=średnia_pewność)       # 
if len(ważne) >= 3 and udział >= 0.6 and nauczyciel(ślad) == zwycięzca:   # , S
    etykieta(ślad) = zwycięzca; wyślij(ślad, wszystkie_wycinki)           # trudne wycinki = złoto
elif operator_wpisał_numer(ślad) or len(ważne) > 0:
    kolejka_operatora(ślad)
audyt: losowe 600 śladów z etykietą automatyczną na wersję; 0 błędów => błąd etykiet <= 0,5% (obl. I)

Nauczyciel to fuzja 4–6 modeli OCR o różnych architekturach, uczona na serwerze na tych samych danych co model SBC S. Najcenniejsze są ślady, w których pojedyncze wycinki przeczą etykiecie śladu: to dokładnie te przypadki, na których model SBC się myli.

Ryzyko i lukiBrak danych w źródłach: zmierzony udział błędnych etykiet przy podwójnym warunku (głosowanie i nauczyciel) dla tablic polskich; jedyny pomiar to ok. 5% błędów przy samym głosowaniu OCR . Błąd systematyczny wspólny dla modelu SBC i nauczyciela przechodzi przez filtr; wykrywa go tylko audyt.

Poprawki operatora, douczanie poza SBC i wdrożenie wersji

DecyzjaTrening odbywa się na serwerze z GPU; SBC tylko wnioskuje. Detektor dostraja się przy każdej nowej kamerze po 100 zweryfikowanych klatkach. OCR douczany jest od wag produkcyjnych, gdy uzbiera się 2 000 nowych zweryfikowanych śladów, w partii 70% danych bazowych i 30% nowych. Każda wersja przechodzi kwantyzację INT8 z douczaniem (QAT), ocenę modelu już po kwantyzacji na zbiorze stałym i obiekcie pominiętym, a potem kanarka w trybie cienia na 1–2 obiektach z testem znaków na parach niezgodnych.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach: zmierzony zysk dokładności z pętli poprawek operatora dla tablic; Neural Sentinel opisuje mechanizm, nie podaje zysku. Próg 2 000 pochodzi z systemu VLM, nie z modelu CTC.

Ile danych potrzeba do celu

DecyzjaWersja 1 startuje przy ≥5 000 unikalnych polskich tablicach zweryfikowanych z obiektów pilotażowych, 100 000 syntetyków i pretreningu detektora na CCPD. Docelowo, dla 99% całych numerów na przejazd z głosowaniem w śladzie, zbiór obejmuje 20 000–30 000 unikalnych tablic (ok. 10 wycinków na ślad). Miarą ilości danych jest liczba unikalnych tablic, nie zdjęć ani przejazdów.

Dlaczego

Źródło (region) Dane Wynik na tablicę
Dataset-1 (Chiny) 3 333 prawdziwych + augmentacja 97,9%
4 750 + augmentacja + GAN / 6 000 + augmentacja 99,0% / 98,9%
9 000 / 50 000 prawdziwych bez augmentacji 96,1% / 96,7%
Békési i Ekler (PL, zdjęcia) 800 / 800 + transfer z CZ 87,3% / 89,2%
Laroca i in. (8 zbiorów) ≥500 obrazów na region 96,9% średnio
GLPD (74 kraje) ok. 3 mln 87,93%
WINK, jedna brama osiedla (wg operatora) 3 000 → 18 000 etykiet, głosowanie 95% → 98,6%

Parametry i wykonanie

Etap Unikalne tablice PL Warunek przejścia
Wersja 0 (pilotaż, tryb cienia) 0 + syntetyki + CCPD detektor: 200 klatek na kamerę opisanych ręcznie
Wersja 1 (produkcja) ≥5 000 zbiór stały ≥98% na przejazd S
Wersja 2 ≥20 000 zbiór stały ≥99%, dolna granica 95% ≥99% przy ≥1 693 przejazdach z ≤10 błędami
Utrzymanie +2 000 na cykl bramka z 3.5

Ryzyko i lukiBrak danych w źródłach: krzywa dane → dokładność dla tablic polskich. Punkty z Dataset-1 pochodzą z jednego kraju o stałym formacie, a dane WINK to deklaracja operatora z jednej kamery; liczby 5 000 i 20 000–30 000 są interpolacją tych punktów S.

Założenia S i obliczenia

Skrypt decyzja/obliczenia/p03.py, wynik p03.out (sekcje A–M).

Część 4Droga do 99%: decyzja o numerze

Budżet błędu na przejazd

DecyzjaCel 99,0% poprawnych całych numerów na przejazd rozpisujemy na pięć strat, z których każdą system mierzy osobno w dzienniku zdarzeń: wyzwolenie i detekcja pojazdu 0,05%, za mało użytecznych wycinków tablicy 0,15%, losowy błąd OCR, który przetrwał fuzję, 0,10%, błąd stały pojazdu (śruba, brud, czcionka, naklejka) 0,40%, poprawny odczyt odrzucony progiem pewności 0,30%. Iloczyn (1 − e) daje 99,00%. Drugi, niezależny cel: błędny odczyt (misread) ≤ 0,10% wszystkich przejazdów; brak odczytu (no-read) trafia do ścieżki wyjątku i mieści się w pozostałych stratach.

Dlaczego

Parametry i wykonanie

Strata Budżet Wymaganie wynikające z budżetu (p04)
E1 wyzwolenie i pojazd 0,05% rejestrujemy każdy sygnał czujnika; przejazd bez śladu pojazdu liczy się jako strata
E2 wycinki 0,15% przy N = 7 klatkach i K_MIN = 3 klatka daje użyteczny wycinek z p ≥ 84,3%; przy N = 5 p ≥ 94,5% (B1)
E3 OCR losowy 0,10% przy n = 5 użytecznych wycinkach dokładność całego ciągu na wycinek q' ≥ 95,2% (99,31% na znak przy 7 znakach) w wariancie ścisłej większości, ≥ 87,8% gdy błędy się nie powtarzają (B2)
E4 błąd stały 0,40% z tego błędy bez śladu prawdziwego znaku ≤ 0,10% przejazdów: w symulacji przy 0,2% pojazdów z błędem stałym oba cele są spełnione (99,83% poprawnych automatycznie), przy 0,4% utrzymanie błędnych odczytów ≤ 0,1% obniża pokrycie do 89,8% (D2b)
E5 odrzucenie 0,30% próg pewności ustawiony tak, by odrzucał ≤ 0,3% poprawnych odczytów (4.4)

Przy 30 km/h i strefie 4 m jest 4,8 klatki przy 10 kl./s, 7,2 przy 15 kl./s i 12 przy 25 kl./s (p04 A, N = L / v · fps), więc OCR w oknie zdarzenia pracuje z co najmniej 15 kl./s, aby N ≥ 7, a po bramce jakości n ≥ 5 S. Dziennik zdarzeń zapisuje dla przejazdu czas wyzwolenia, klatki, wszystkie wycinki z szerokością tablicy w pikselach, rozkłady na pozycjach, wynik fuzji, cechy pewności i decyzję; z tych pól liczymy E1–E5 bez ponownego przetwarzania wideo.

Ryzyko i lukiWymagania E2 i E3 zakładają niezależne klatki S; klatki jednego pojazdu są skorelowane, więc wartości z tabeli są dolnymi granicami. Brak danych w źródłach o udziale tablic dwurzędowych, zagranicznych i specjalnych w ruchu na polskich parkingach.

Fuzja odczytów z wycinków śladu

DecyzjaStosujemy fuzję miękką po pozycjach: OCR zwraca dla każdego użytecznego wycinka rozkład prawdopodobieństw na każdej pozycji, system wybiera długość modalną, uśrednia rozkłady pozycji w obrębie tej długości i dekoduje wynik z ograniczeniem składni (4.3). Jakość wycinka działa jako bramka (szerokość tablicy, ostrość, pewność detekcji), nie jako waga. Wybór pojedynczego odczytu o najwyższej pewności jest wykluczony. Głos całym ciągiem liczymy równolegle i używamy jako cechy decyzji.

Dlaczego

Praca Dane Pojedyncza klatka → fuzja Klatek
Laroca 2018 UFPR-ALPR, Brazylia, kamera ruchoma 64,89% → 78,33% (47/60) 30
Laroca 2018 SSIG, Brazylia, kamera stała 85,45% → 93,53% b.d.
PSU wjazdy parkingowe, Arabia Saudyjska 29% → 69%, brak wzrostu powyżej 35 klatek 35
33 klipy, tablice rumuńskie 66,7% (najlepsza klatka) → 81,8% b.d.
Békési, Ekler Parking Database, tablice polskie 86,4% na klatkę → 22/22 filmów 50

Parametry i wykonanie

def fuzja(wycinki):                       # jeden ślad = jeden przejazd
    R = [w for w in wycinki
         if w.szer_tablicy_px >= W_MIN and w.ostrosc >= S_MIN and w.det_conf >= 0.5]
    if len(R) < K_MIN:                    # K_MIN = 3
        return BRAK_ODCZYTU()                 # strata E2
    L = argmax_l(sum(w.pewnosc for w in R if len(w.tekst) == l))  # długość modalna
    G = [w for w in R if len(w.tekst) == L]
    P = [mean(w.rozklad[i] for w in G) for i in range(L)]  # średni rozkład na pozycji
    tekst, margines = dekoduj_ze_skladnia(P)                # 4.3
    zgodnosc = sum(dekoduj_ze_skladnia([w.rozklad]).tekst == tekst for w in R) / len(R)
    mv = najczestszy_ciag(R)                                # głos całym ciągiem
    return KANDYDAT(tekst, P, margines, zgodnosc, mv == tekst, len(R))

OCR musi zwracać rozkład na każdej pozycji: w modelu z głowicą na pozycję (fast-plate-ocr, wyjście max_plate_slots × słownik ) jest to wyjście sieci, w modelu CTC rozkład z kroków czasowych przypisanych do znaku. K_MIN = 3 odpowiada regule systemu rumuńskiego (trzy odczyty z pewnością > 0,4 zgodne ze składnią ); W_MIN i S_MIN ustala rozdział kamerowy. Symulacja S (p04 C) odtwarza kierunek wyników z prac: przy n = 5 najwyższa pewność daje 93,5%, głos całym ciągiem 98,95%, fuzja miękka 99,07%, z dekodowaniem składni 99,29%; przy n = 3 grupowanie długości podnosi głos po pozycjach z 98,30% do 98,58%, a fuzja miękka daje 98,75%.

Sufit przy błędach skorelowanych. Fuzja nie naprawia błędu obecnego we wszystkich wycinkach: wszystkie pozostałe błędne pozycje to przypadki, w których prawdziwy znak nie pojawił się w żadnej klatce , a po głosowaniu zostają tablice mylone prawie w każdej klatce, np. 5 i S . Wynik PSU przestaje rosnąć powyżej 35 klatek . Model „odsetek s pojazdów błędnych w każdej klatce” daje s = 21,7% dla UFPR-ALPR i 31,0% dla PSU, a 22/22 filmów z tablicami polskimi ogranicza s tylko do ≤ 12,7% (p04 B4). Skuteczność nie przekroczy 1 − s przy dowolnej liczbie klatek, więc powyżej n = 5–7 zysk daje praca nad E4, nie nad fuzją.

Ryzyko i lukiBrak danych w źródłach o porównaniu reguł fuzji na tablicach polskich; jedyny pomiar wideo z Polski obejmuje 22 filmy.

Walidator składni tablic PL/UE w dekodowaniu

DecyzjaSkładnię stosujemy wewnątrz dekodowania, nie jako filtr po fakcie: na uśrednionych rozkładach pozycji system wybiera najlepszy ciąg zgodny z szablonem (klasa znaku na każdej pozycji). Korekta wyniku jest dozwolona tylko w obrębie par mylnych; każda inna niezgodność ze składnią obniża pewność i kieruje przejazd do 4.4. Tablice niepolskie dostają tylko regułę długości 5–8 bez korekt, a tablice indywidualne osobną gałąź bez wykluczeń liter.

Dlaczego

Parametry i wykonanie

Reguła Źródło Użycie w dekodowaniu
W wyróżniku pojazdu (po odstępie) brak liter B, D, I, O, Z, zbyt podobnych do 8, 0, 1, 0, 2 na tych pozycjach słownik bez B, D, I, O, Z; dla par mylnych korekta B→8, D→0, I→1, O→0, Z→2
Tablice indywidualne mogą zawierać B, D, I, O, Z osobna gałąź; gdy obie gałęzie dają różne poprawne ciągi, przejazd idzie do 4.4
Wiodące zero jest częścią numeru zakaz usuwania zer i normalizacji długości
Dwurzędowe: górny rząd wyróżnik miejsca, dolny wyróżnik pojazdu sklejanie górny + dolny; klasa układu z detektora
Tablice profesjonalne z literą P w stałym miejscu osobny szablon
Dodatkowe znaki wiodące w gęsto zaludnionych regionach wyróżnik miejsca 2–3 litery (przykłady PY, WH, SMI ) S
Czarne tablice sprzed 2001 r. ważne; czcionka niezwężona do 2018 r. osobny szablon i obecność w danych uczących
Tło zielone (elektryczne), znaki zielone (profesjonalne), tło żółte (zabytkowe), znaki czerwone (tymczasowe) klasy układu; bez augmentacji koloru, której wyłączenie usunęło ponad połowę błędów klasyfikacji układu
Tablice europejskie: 5–8 znaków jedyna reguła dla tablic spoza PL, bez korekt
def dekoduj_ze_skladnia(P):               # P: lista rozkładów na pozycjach
    kandydaci = []
    for szablon in SZABLONY[dlugosc(P)]:  # PL, indywidualne, profesjonalne, stare, UE
        tekst = [argmax(P[i][c] for c in szablon.klasa[i]) for i in range(len(P))]
        if szablon.miejsce and tekst[:szablon.dl_miejsca] not in KODY_MIEJSCA:
            continue
        logp = sum(log(P[i][tekst[i]]) for i in range(len(P)))
        kandydaci.append((logp, tekst, szablon))
    najlepszy, drugi = dwa_najlepsze(kandydaci)
    wolny = [argmax(P[i]) for i in range(len(P))]       # dekodowanie bez składni
    korekta = [i for i in range(len(P)) if wolny[i] != najlepszy.tekst[i]]
    if any((wolny[i], najlepszy.tekst[i]) not in PARY_MYLNE for i in korekta):
        flaga("poza parami mylnymi")       # obniża pewność (4.4)
    margines = min(P[i][najlepszy.tekst[i]] - drugi_znak(P[i], najlepszy.szablon.klasa[i])
                   for i in range(len(P)))
    return najlepszy.tekst, margines, najlepszy.logp - drugi.logp

PARY_MYLNE = {O/0, D/0, B/8, I/1, Z/2, S/5, G/6} według . Listę wyróżników miejsca i szablonów wyróżnika pojazdu ładujemy z rozporządzenia o rejestracji i oznaczaniu pojazdów (Dz.U. 2024 poz. 1709 ) jako plik konfiguracyjny, aktualizowany bez zmiany modelu.

Ryzyko i lukiZmierzony zysk składni (+6,15 pkt proc.) pochodzi z tablic chińskich przy niskim punkcie wyjścia i nie przenosi się wprost na tablice polskie. Brak danych w źródłach: pełna lista szablonów wyróżnika pojazdu i udział tablic indywidualnych w ruchu.

Kalibracja pewności i decyzja „nie wiem”

DecyzjaPewność odczytu to skalibrowane prawdopodobieństwo poprawności: regresja izotoniczna S na cechach przejazdu (margines na pozycji, najmniejsze średnie prawdopodobieństwo na pozycji, przewaga log-prawdopodobieństwa nad drugim ciągiem zgodnym ze składnią, zgodność wycinków i głosu całym ciągiem, liczba wycinków, flaga korekty, warstwa dzień/noc IR, PL/UE). System przyjmuje odczyt, gdy P(poprawny) ≥ t. Poniżej progu przejazd dostaje drugą szansę na liście zamkniętej (pojazdy wewnątrz przy wyjeździe, lista abonamentowa), a gdy i ona nie rozstrzyga, trafia do ścieżki wyjątku z najlepszym wycinkiem.

Dlaczego

Parametry i wykonaniePróg z kosztów: przyjmujemy, gdy P(poprawny) ≥ c_m / (c_m + c_n), gdzie c_m to koszt błędnego odczytu, a c_n koszt ścieżki wyjątku; przy c_m/c_n = 10 (punktacja +1/0/−10 ) próg wynosi 0,909, przy 100 wynosi 0,990 (p04 D1). Ostateczne t to największe pokrycie na lokalnym zbiorze kalibracyjnym, przy którym jednostronna górna granica 95% (Clopper-Pearson) odsetka błędnych odczytów wśród przyjętych nie przekracza celu: dla ≤ 0,1% potrzeba 2995 przyjętych przejazdów bez błędu albo 4742 przy jednym, dla ≤ 0,2% odpowiednio 1497 i 2371 (p04 D3). Kalibrację i próg liczymy osobno dla warstw dzień, noc IR i tablice niepolskie; dla tablic europejskich próg musi być wyższy, bo przy niższym detektor znaków dodawał fałszywe znaki na tablicach o mniejszej liczbie znaków . Na małej próbie podniesienie progu potrafi pogorszyć obserwowany odsetek błędów , więc progu nie stroimy na mniej niż ok. 1500 przejazdach. Lista zamknięta przyjmuje dopasowanie przy odległości edycyjnej 0, a przy odległości 1 tylko dla pary mylnej z 4.3, gdy żaden inny element listy nie leży w odległości ≤ 2 S.

Ryzyko i lukiBrak danych w źródłach o kalibracji pewności OCR na tablicach polskich ani o krzywej ryzyko–pokrycie zmierzonej na wjeździe parkingowym; MC-dropout wymaga wielu przebiegów modelu na wycinek, a jego koszt na NPU RK3588 nie jest zmierzony.

Błędy stałe: śruby, brud, czcionka, naklejki

DecyzjaBłąd stały obsługujemy na trzech poziomach. Przejazd: zgodne wycinki z niskim marginesem na jednej pozycji albo z niezgodnością składni poza parami mylnymi nie są korygowane, tylko trafiają do ścieżki wyjątku z zaznaczoną pozycją. Obiekt: każda korekta operatora tworzy wpis (pozycja, odczyt, prawda, warstwa); macierz pomyłek per pozycja wyzwala alarm, gdy jedna para przekroczy ustalony udział korekt S. Model: korekty operatora wracają do uczenia z powtórką danych bazowych, a augmentacja dokłada zaślepki śrub i zabrudzenia na pozycjach znaków.

Dlaczego

Parametry i wykonanieSygnały błędu stałego na przejeździe: zgodność ≥ 0,8 przy marginesie < m_min na jednej pozycji S, niezgodność składni na tej samej pozycji we wszystkich wycinkach, odczyt powtarzający się dla pojazdu z listy abonamentowej, który różni się od numeru z listy o parę mylną. Dla pojazdów powracających system przechowuje zatwierdzone przez operatora aliasy (odczyt błędny → numer z listy), jak warianty znanych tablic z parami I/1 i S/5 w Frigate ; alias działa tylko na liście zamkniętej. Dane nocne IR zbieramy i walidujemy osobno: zdjęcia IR stanowiły 21,5% zbioru UFPR-VeSV, a dały 39,4–53,4% błędów rozpoznawania atrybutów pojazdu .

Ryzyko i lukiWszystkie liczby o śrubach pochodzą z Wielkiej Brytanii. Brak danych w źródłach o udziale śrub, ramek i naklejek na tablicach polskich ani o udziale błędów stałych na polskich parkingach.

Protokół pomiaru 99% na własnych przejazdach

DecyzjaOdbiór na obiekcie: 3000 kolejnych przejazdów (co najmniej 2000 różnych pojazdów), każdy oceniony przez człowieka z zapisanych wycinków i obrazu przeglądowego jako poprawny, błędny odczyt albo brak odczytu (w tym brak wyzwolenia). System spełnia cel, gdy jednostronna dolna granica 95% (Clopper-Pearson) odsetka poprawnych ≥ 99,0% i górna granica odsetka błędnych odczytów ≤ 0,1%, czyli przy 3000 przejazdach co najwyżej 20 przejazdów niepoprawnych i zero błędnych odczytów.

Dlaczego

Parametry i wykonanie

Ryzyko i lukiBrak danych w źródłach o niezależnym teście jakiegokolwiek systemu na wjeździe parkingowym z tablicami polskimi; ICC przejazdów tego samego pojazdu nie jest zmierzony i przyjmujemy go jako S.

Założenia S i obliczenia

Skrypt data/jobs/lpr-cpu-sbc/decyzja/obliczenia/p04.py, wynik p04.out (części A–E; symulacja z ziarnem 404 i 405).

Część 5Odczyt przy dużych kątach najazdu

Prostowanie tablicy: cztery narożniki, homografia, wycinek o stałym rozmiarze

DecyzjaKażdą tablicę wykrytą w wycinku 4 MP prostujemy przed OCR. Własny regresor narożników (mała sieć splotowa, NPU, INT8) zwraca cztery narożniki, klasę układu (jedno- lub dwuwierszowa) i pewność. CPU wylicza z narożników homografię i jednym przekształceniem perspektywicznym z interpolacją dwuliniową przenosi tablicę do prostokąta kanonicznego 256×64 px. OCR dostaje wyłącznie ten wycinek, a sieć OCR nie ma wbudowanego modułu STN.

Dlaczego

Parametry i wykonanie

for plate in plate_detections(frame_4mp):                     # ramka osiowa
    roi = rga_crop_resize(frame_nv12, expand(plate.box, 1.3, 1.6), w=288, h=96)
    q, layout, conf = npu_corners(roi)                          # INT8
    quad = roi_to_frame(q, plate.box)
    if conf < 0.5 or not convex(quad) or width_change(quad, plate.box) > 0.25:
        crop, geom_ok = rga_crop_resize(frame_nv12, plate.box, 256, 64), False
    else:
        H = perspective_from_4pts(quad, CANON[layout])          # układ 8x8
        crop = warp_bilinear(roi_rgb, H, CANON_SIZE[layout])    # CPU A76
        theta, rho_h, rho_v = plate_geometry(H, f_px, quad)
        geom_ok = theta <= 65
    emit(crop, geom_ok, theta, rho_h, rho_v)

Ryzyko i lukiZyski z prostowania zmierzono na tablicach chińskich, tajwańskich i brazylijskich. Sieci prostujące potrafią zniekształcić obraz prosty , stąd zabezpieczenia i ścieżka zapasowa. Brak danych w źródłach: zysku z prostowania dla polskich tablic w przedziałach kąta.

Odrzucone alternatywy i podział pracy między NPU a CPU

DecyzjaSTN w sieci OCR, obrócone ramki (OBB), rekonstrukcja widoku i superrozdzielczość nie wchodzą do potoku podstawowego. Na NPU RK3588 działają tylko sieci splotowe w INT8 (detektor, regresor narożników, OCR). RGA wycina i skaluje, a CPU liczy homografię, przekształcenie i kąt.

Dlaczego

Alternatywa Najmocniejszy wynik Słabość Na RK3588
STN afiniczny przed LPRNet 91,5% na CCPD2019, +8,38 pkt ; podzbiór z kątem poziomym 20–50° koryguje ok. ±35° ; przekształcenie afiniczne nie opisuje czworokąta perspektywy ; STN+CRNN bez pozostałych modułów 59,52% wobec 92,38% ; wymaga dużych zbiorów brak danych o próbkowaniu siatki w RKNN; nieobsługiwane operatory schodzą na CPU (przykład atencji )
OBB z regresją kąta 91,5% wobec 82,7% bez regresji kąta ten sam potok i tak prostuje wycinek przed OCR ; obrócony prostokąt nie oddaje perspektywy brak danych o NMS obróconych ramek w RKNN
Rekonstrukcja widoku +15–38 pkt przy ekstremalnych kątach ; sieci dyskryminacyjne lepsze od generatywnych brak danych o koszcie i kwantyzacji rezerwa dla θ > 60°
Superrozdzielczość 1,7% → 44,7% przy fuzji 5 klatek na niskiej rozdzielczości nie pomaga poniżej 35 px długości tablicy ; po zmianie zbioru poprawia 647 z 11 027 tablic –
Detektor z punktami kluczowymi brak wyników dla tablic YOLO-pose na AGPL-3.0 (wg producenta) ; RF-DETR Keypoint na Apache 2.0 , ale w wersji preview i z kręgosłupem DINOv2 ryzyko zejścia atencji na CPU

Parametry i wykonanie

Etap Jednostka Koszt na tablicę
wycięcie i skalowanie do 96×288, NV12→RGB RGA brak danych w źródłach
regresor narożników 0,25 GFLOP NPU INT8 0,9–2,6 ms przez skalowanie z Mini-YOLO (1,8 GFLOP w 6,5–18,5 ms ) [obliczenia T11]
homografia (układ 8×8) i przekształcenie 256×64×3 CPU A76 0,72 M operacji: 0,30 ms przy 2,4 GHz i 0,45 ms przy 1,6 GHz w RK3588J przy jednej operacji na cykl; pomiar kodu skalarnego na hoście x86: 0,22–0,27 ms w kolejnych uruchomieniach [obliczenia T11]

Ryzyko i lukiSkalowanie po FLOP pomija stały narzut wywołania NPU. Brak danych w źródłach: opóźnienia małej sieci regresyjnej w RKNN i obsługi próbkowania siatki.

Trening odporny na kąt

DecyzjaRegresor narożników i OCR uczymy na mieszance obrazów realnych z narożnikami (CCPD do pretreningu, własne polskie dane z wdrożeń do dostrojenia) i syntetycznych polskich tablic nakładanych homografiami z kątem poziomym 0–65° i pionowym 0–45°. OCR uczymy na wycinkach z tego samego potoku prostowania, z celowo zaburzonymi narożnikami, utratą rozdzielczości wzdłuż skróconej osi i rozmyciem ruchu.

Dlaczego

Parametry i wykonanie

Zbiór Kąt i narożniki Licencja Użycie Wyniki z prac
CCPD (Rotate, Tilt) kąt poziomy i pionowy w adnotacji ; narożniki niedokładne ; silna kompresja MIT pretrening regresora i OCR SSD512+HC 52,04 na Tilt ; STN+LPRNet 91,45% na podzbiorze 20–50° , po zmianie zbioru 89,27%
RodoSol-ALPR narożniki we wszystkich 20 000 obrazach tylko badania niekomercyjne poza produktem rekonstrukcja +15–38 pkt
CD-HARD 102 obrazy, głównie ukośne brak danych test 57,69% bez prostowania
zbiór polski z Katowic scena przy szlabanie, narożniki na ukośnej tablicy brak danych test pilotażowy –

Ryzyko i lukiZbiory brazylijskie z dokładnymi narożnikami nie wchodzą do produktu z powodu licencji . Brak danych w źródłach: publicznego polskiego zbioru z adnotacją kąta i licencją komercyjną.

Ile pikseli musi mieć skrócona tablica i co z tego wynika dla 4 MP

DecyzjaWymaganie definiujemy w obrazie źródłowym wzdłuż osi tablicy, już po skróceniu: minimum to znak 8×16 px, a cel projektowy 12×24 px, czyli ρ_h ≥ 0,255 px/mm wzdłuż szerokości i ρ_v ≥ 0,30 px/mm wzdłuż wysokości (kreska 9 mm ma wtedy 2,3 px). Kamera 4 MP spełnia cel w całym zakresie 2–10 m i 0–60°, jeśli HFOV nie przekracza wartości z tabeli poniżej. Czas ekspozycji ograniczamy do t ≤ 9 mm / (v·tg θ), a w nocy czytamy tylko przy θ ≤ 30°.

Dlaczego

Parametry i wykonanieMinimalna ogniskowa 4 MP (2560 px) dla celu 12×24 px: f_px / największy HFOV / ogniskowa w mm według karty kamery 4 MP 1/1,8″, w której 12 mm odpowiada HFOV 39,8° (f_px ≈ 295·f_mm, wg producenta ) [obliczenia T2]:

Odległość 0–30° 45° 60°
2 m 600 px / 130° / 2,0 mm 722 / 121° / 2,5 1021 / 103° / 3,5
4 m 1200 / 94° / 4,1 1444 / 83° / 4,9 2043 / 64° / 6,9
6 m 1800 / 71° / 6,1 2166 / 61° / 7,4 3064 / 45° / 10,4
8 m 2400 / 56° / 8,1 2889 / 48° / 9,8 4085 / 35° / 13,9
10 m 3000 / 46° / 10,2 3611 / 39° / 12,3 5106 / 28° / 17,3

Ryzyko i lukiPróg 8×16 px zmierzono małym LPRNet na tablicach chińskich i włoskich . Przelicznik ogniskowej pochodzi z jednej karty katalogowej, a kompresja H.265 obniża efektywną rozdzielczość (silna kompresja CCPD psuje czytelność tablic ). Brak danych w źródłach: współczynnika odblasku powyżej 45°.

Geometria montażu przy pasie ze szlabanem; kiedy druga kamera

DecyzjaKamera stoi w linii szlabanu (obudowa szlabanu, słupek na wysepce albo wysięgnik), z przesunięciem bocznym o ≤ 2,5 m i wysokością 1,3–2,5 m, i czyta tablicę w czasie najazdu, w strefie ok. 2–9 m przed kamerą, a nie na linii zatrzymania. Obiektyw dobieramy tak, by kadr obejmował całe okno odczytu (θ ≤ 45° i znak ≥ 12×24 px): HFOV 46–53°, czyli ok. 9–10 mm. Okno zdarzenia obejmuje klatki sprzed wyzwalacza: bufor wycinków śladu trzyma co najmniej 6 s. Drugą kamerę stawiamy, gdy prosty odcinek najazdu jest krótszy niż d₁ + N·v/fps.

Dlaczego

Parametry i wykonanieTablica na 0,5 m, rozrzut toru ±0,5 m, linia zatrzymania 0,8 m przed kamerą, 12,5 kl./s S [obliczenia T7, T7b]:

Konfiguracja o / h θ na stopie Okno dzienne HFOV / ogniskowa Klatki 15 / 30 km/h Okno nocne θ ≤ 30°
A obudowa szlabanu 1,75 / 1,3 m 67° 1,95–8,2 m 53° / 8,6 mm 19 / 9 3,35–8,2 m
B słupek na wysepce 2,0 / 2,5 m 74° 2,85–9,4 m 46° / 10,2 mm 20 / 10 4,9–9,4 m
C wysięgnik nad krawędzią 0,8 / 3,0 m 73° 2,65–6,0 m 62° / 7,2 mm 10 / 5 4,55–6,0 m
D słupek 2,5 m za szlabanem 1,75 / 4,15 m 53° 4,05–8,2 m 46° / 10,2 mm 13 / 6 7,05–8,25 m

Ryzyko i lukiLiczby pochodzą z modelu kamery otworkowej bez dystorsji. Brak danych w źródłach: zmierzonej skuteczności dla konkretnej geometrii pasa ze szlabanem i dla układu dwóch kamer na jednym pasie.

Wybór klatek i głosowanie przy zmiennym kącie

DecyzjaKażda klatka śladu przechodzi bramkę geometryczną: θ ≤ 60° (nocą ≤ 30°), znak ≥ 8×16 px, rozmycie ≤ skrócona kreska. Z klatek, które przeszły, bierzemy najwyżej 5 o największym wyniku q = min(znak_w/12, znak_h/24, kreska/rozmycie, 2), z liniową karą za kąt powyżej 45° i odstępem co najmniej 0,5 m drogi między klatkami. Głosujemy po pozycjach znaków (MVCP) na wyprostowanych wycinkach, remis rozstrzyga pewność OCR, a obrazów nie uśredniamy. Decyzja zapada, gdy trzy klatki dają ten sam numer zgodny ze składnią.

Dlaczego

Parametry i wykonanie

cand = []
for f in track:                                   # wycinki z 5.1, kolejne klatki śladu
    cw, ch = 47 * f.rho_h, 80 * f.rho_v           # znak w px po skróceniu
    stroke = 9 * f.rho_h                           # kreska w px
    blur = f.track_speed_px * f.t_exp / f.frame_dt # rozmycie z prędkości na torze
    theta_max = 30 if night else 60
    if f.geom_ok and f.theta <= theta_max and cw >= 8 and ch >= 16 and blur <= stroke:
        q = min(cw / 12, ch / 24, stroke / max(blur, 1e-3), 2.0)
        if f.theta > 45: q *= (60 - f.theta) / 15
        cand.append((q, f))
sel = pick_top(cand, k=5, min_spacing_m=0.5)       # odstęp drogi z toru
reads = [ocr(f.crop) for _, f in sel]
result = mvcp_vote(reads) if same_layout(reads) else mv_hc(reads)
if count_agree(reads, result) >= 3 and syntax_ok(result): decide(result)

Ryzyko i lukiWynik q i odstęp 0,5 m wynikają z modelu i symulacji, a nie z pomiaru na tablicach przy szlabanie. Dane WINK pochodzą od operatora jednej kamery. Brak danych w źródłach: porównania wyboru klatek według kąta z wyborem według pikseli dla polskich tablic.

Założenia S i obliczenia

Część 6Sprzęt wynikający z potoku

SoC: budżet NPU i VPU dla dwóch kamer

DecyzjaBazą jest RK3588J; potok planujemy tak, by w stanie nominalnym zajmował najwyżej ok. 55% pojemności NPU, co po dławieniu termicznym (−27,7%) daje ok. 75% i zostawia zapas. RK3576 dopuszczamy tylko przy strumieniu 12,5 kl./s i modelach nominalnych, x86 N100 nie mieści budżetu bez obniżenia liczby klatek.

Dlaczego

Parametry i wykonanieKoszt NPU na klatkę zdarzenia jednej kamery: wariant najgorszy = detekcja pojazdu 640×640 (17,3 ms) + detekcja tablicy 640×640 (17,3 ms) + OCR klasy PP-OCRv4-rec (12,7 ms) = 47,3 ms; wariant nominalny = 640×384 (10,4 ms) + 384×384 (6,2 ms) + OCR (12,7 ms) = 29,3 ms. Pojemność RK3588 = 3 rdzenie × 0,9 = 2,7 rdzenio-s/s. Obie kamery w zdarzeniu jednocześnie:

Strumień Wariant RK3588 RK3588 po dławieniu RK3576 (1 rdzeń S)
2×12,5 kl./s nominalny 27% 38% 62%
2×12,5 kl./s najgorszy 44% 61% 101%
2×25 kl./s nominalny 54% 75% 125%
2×25 kl./s najgorszy 88% 121% 202%

Przydział: jeden proces inferencji na model i rdzeń NPU, wspólna kolejka wycinków obu kamer do OCR. Detekcja jałowa poza zdarzeniem (2×5 kl./s, 640×384) zajmuje 4% NPU. Porównanie x86: sama detekcja 640 na CPU N100 przy 2×12,5 kl./s wymaga 1,06 całego procesora (OpenVINO, 23,6 kl./s ); NPU Core Ultra 7 155H wykonuje YOLOv8n w 7,0 ms , ale nie ma w danych ceny ani wersji przemysłowej.

Ryzyko i lukiYOLOv8 i YOLO11 to AGPL-3.0 dla kodu i wag ; w budżecie służą tylko jako wzorzec kosztu modelu klasy ~8,7 GFLOPs , a modele zamkniętego produktu z innych rozdziałów muszą zmieścić się w tej samej klasie. Operatory attention w RKNN-Toolkit2 1.6.0 schodziły na CPU , więc OCR z attention łamie budżet. Brak danych w źródłach: liczba rdzeni NPU RK3576, takt NPU w RK3588J i pomiar NPU dla wejścia 640×384.

CPU, RAM i zapis

DecyzjaCztery rdzenie A76 rezerwujemy na OCR awaryjny, śledzenie, fuzję i decyzję, rdzenie A55 na sieć, zapis i I/O. Ścieżka dekoder → NPU działa bez kopiowania pełnych klatek przez CPU (DMA-BUF), CPU dotyka tylko wycinków. RAM: 8 GB LPDDR4X z pulą CMA ≥512 MB. eMMC ≥32 GB w trybie pSLC na system tylko do odczytu, osobny przemysłowy SSD M.2 na zdarzenia.

Dlaczego

Parametry i wykonanieNV12 4 MP = 2560×1440×3/2 B (wzór bufora MPP ); bufor pierścieniowy 1 s × 2 kamery: 138 MB przy 12,5 kl./s, 276 MB przy 25 kl./s. Procesy OCR i fuzji przypięte do rdzeni A76 (na Orange Pi 5 to CPU 4–7 ). SSD na nagrywanie ciągłe przez 5 lat: TBW ≥158 TB; na same zdarzenia wystarcza dowolny SSD przemysłowy ≥256 GB (94 doby). Fuzja głosowaniem jest pomijalna obliczeniowo: odległość edycyjna dla tekstów ~1K znaków to 0,2 ms .

Ryzyko i lukiPrzewodnik Rockchip uznaje RGA na RK3588 za „nieprawidłowe” i odradza , a ffmpeg-rockchip używa RGA w ścieżce bez kopiowania ; skalowanie do 640×384 robimy więc w preprocesingu NPU albo na CPU na wycinkach. Dane o trwałości eMMC pochodzą z jednego badania z 2019 r. na układzie 16 GB.

Jądro, termika, watchdog, zasilanie i I/O

DecyzjaObraz produkcyjny działa na jądrze BSP Rockchip 6.1 LTS z rkmpp i rknpu, zamrożonym w wersji; jądro główne utrzymujemy jako sprawdzaną alternatywę. SoC musi mieć ścieżkę cieplną do metalowej obudowy o oporze ≤2,5 °C/W przy 10 W i ≤3,6 °C/W przy 7 W dla 55 °C w szafce. Watchdog działa dwupoziomowo, zasilanie 24 V DC, I/O: ≥4 wejścia izolowane, ≥2 wyjścia bezpotencjałowe, 2× RS-485, RTC z baterią.

Dlaczego

Parametry i wykonanieWatchdog programowy karmi sprzętowy (SoC ma pięć watchdogów ):

co 1 s, dla każdej kamery:
  if klatki_zdekodowane_1s < 0.8*fps: restart_rtsp(); po 3 razach: reset_sesji_dekodera()
  if brak_wyników_NPU > 2 s: restart_procesu_inferencji()
  if temperatura_SoC > 85 °C: obniż fps do 12,5 i zapisz alarm
karm /dev/watchdog tylko, gdy wszystkie testy są zielone (timeout 30 s S)

System plików główny tylko do odczytu przez overlayfs chroni przed zanikiem zasilania (wg sprzedawcy) . I/O na pas: wejście z przekaźnika detektora pętli (styk DC 24 V/3 A ) lub radaru, wejście stanu szlabanu S, wyjście „otwórz” do wejścia sterownika szlabanu; dla dwóch pasów 4 DI i 2 DO plus zapas.

Ryzyko i lukiDla RK3588J źródła podają −40…85 °C albo −20…70 °C przy przepływie powietrza 0,7 m/s , oba wg producentów. Brak danych w źródłach o MTBF i statystykach awarii SBC w szafkach zewnętrznych.

Kamera: piksele na tablicy i obiektyw

DecyzjaNa dalekim końcu strefy odczytu tablica ma mieć ≥128 px szerokości na wprost, ≥148 px przy kącie bocznym 30° i ≥181 px przy 45°. Kamera 4 MP (≥2560 px w poziomie) z obiektywem zmiennoogniskowym ustawionym na kąt widzenia ≤58° dla strefy 3–8 m (≤49° przy 45°); obiektyw stały 2,8 mm odpada.

Dlaczego

Parametry i wykonaniePoP = 2560 × 520 / (2·d·tan(HFOV/2)):

Obiektyw (HFOV) 3 m 5 m 8 m 10 m ≥148 px do
2,8 mm, 103° 176 106 66 53 3,6 m
6 mm, 52° 455 273 171 136 9,2 m
zmiennoogniskowy ustawiony na 55° S 426 256 160 128 8,6 m

W typowej geometrii przy szlabanie (kamera 1,5 m w bok i 1,0 m nad tablicą S) kąt boczny wynosi 26,6° przy 3 m i 10,6° przy 8 m: bliski koniec strefy wyznacza kąt, daleki wyznacza piksele.

Ryzyko i lukiPróg 20–30 px na wysokość znaku (130–162 px na tablicę) to zalecenie producenta obiektywów . Brak danych w źródłach: dokładność OCR w funkcji pikseli dla tablic polskich; założenie, że motocykl ma tylko tablicę tylną, jest S.

Kamera: migawka z rozmycia ruchu

DecyzjaDopuszczalne rozmycie na tablicy wynosi połowę kreski, 4,5 mm. Przy 30 km/h daje to czas ekspozycji ≤1,08 ms dla kąta osi kamery z kierunkiem jazdy α ≤30° i ≤0,76 ms dla 45°. Kamera musi przyjmować zdalnie stałą ekspozycję ≤1/1000 s; migawka globalna nie jest wymagana.

Dlaczego

Parametry i wykonaniet_max dla b = 4,5 mm:

v α = 5° 15° 30° 45°
10 km/h 18,6 ms 6,26 ms 3,24 ms 2,29 ms
20 km/h 9,29 ms 3,13 ms 1,62 ms 1,15 ms
30 km/h 6,20 ms 2,09 ms 1,08 ms 0,76 ms

Pochylenie od migawki szczelinowej przy czasie odczytu 20 ms S wynosi na tablicy 31–38 linii 1,8–2,2 mm, poniżej połowy kreski. Opcjonalny drugi zestaw nastaw „postój” (ślad stoi w strefie stop) pozwala wydłużyć t do 8 ms S.

Ryzyko i lukiBrak danych w źródłach: czas odczytu matryc kamer 4 MP, opóźnienie zastosowania nowej ekspozycji wysłanej przez API kamery, pomiar tolerancji OCR na rozmycie w pikselach dla tablic polskich.

Kamera: ekspozycja nocna i IR

DecyzjaOświetlacz IR 850 nm wbudowany w obudowę wokół obiektywu (odsunięcie źródła ≤79 mm przy 3 m). Ekspozycję i wzmocnienie ustawia SBC w pętli zamkniętej na jasności tła tablicy w wycinku, nie automatyka kamery na całym kadrze. Nocą kamera pracuje w trybie mono z wyłączonym filtrem IR, WDR i BLC wyłączone. Katalogowy zasięg IR ≥35 m dla odczytu do 8 m przy 1 ms i kącie wejścia 30° (oszacowanie).

Dlaczego

Parametry i wykonanie

dla każdej klatki z tablicą: m = percentyl 90 jasności w wycinku tablicy (8 bit)
cel: m ∈ [150, 200], piksele nasycone < 2% S
m > 200 lub nasycenie: wzmocnienie −3 dB; na minimum: moc IR −1 krok
m < 150: wzmocnienie +3 dB do limitu; na limicie: moc IR +1 krok
czas ekspozycji nigdy powyżej t_max z 6.5; nową nastawę wysyłaj co ≥3 klatki S

Łańcuch zasięgu IR: migawka 1/500 s skraca zasięg zwykłej kamery o ok. 50% (wg producenta) , dalej zasięg ∝ √t i ∝ √R' S; dla 1 ms i 30° zasięg efektywny = 0,23 zasięgu katalogowego.

Ryzyko i lukiWartości retrorefleksji i widm pochodzą z badań tablic brytyjskich; brak danych w źródłach o odbiciu IR tablic polskich i o tym, czy tanie kamery przyjmują zmianę mocy IR przez API.

Strumień i sterowanie kamerą

DecyzjaH.265 Main 8-bit 4:2:0 bez trybów „+”/smart codec, 12,5–15 kl./s, klatka I co 1 s, przepływność maksymalna (≥8 Mbit/s), RTSP po TCP. Kamera synchronizuje czas przez NTP i wysyła raporty RTCP SR, z których SBC mapuje czas klatki na swój zegar. Wymagane API w czasie pracy: czas ekspozycji, limit wzmocnienia, tryb i moc IR, wymuszony dzień/noc, WDR wyłączone.

Dlaczego

Parametry i wykonaniefps kamery = 12,5, a 25 tylko gdy strefa jest krótsza niż 3,33 m (5 klatek przy 30 km/h); GOP = fps; tryb przepływności CBR z limitem; znacznik czasu klatki = t_RTCP(PTS) w CLOCK_REALTIME SBC zsynchronizowanym z tym samym NTP.

Ryzyko i lukiBrak danych w źródłach: zależność dokładności OCR wycinka od przepływności H.265 oraz obsługa ręcznej migawki i mocy IR przez ONVIF Imaging w konkretnych tanich kamerach; to warunek odbioru kamery w teście.

Wyzwalacz

DecyzjaWyzwalaczem podstawowym jest obraz: ślad pojazdu wchodzący w ROI z detekcji 640×384 działającej stale z prędkością 5 kl./s (4% NPU). Pętla albo radar przez izolowane wejście cyfrowe są drugim, niezależnym źródłem: okno zdarzenia otwiera dowolne z nich, a polecenie „otwórz” wymaga przyjętego odczytu i potwierdzenia obecności pętlą, radarem albo stojącym śladem w strefie stop. Bufor 1 s klatek sprzed wyzwolenia czyni opóźnienie wyzwalacza nieistotnym; pętla bezpieczeństwa zostaje w sterowniku szlabanu.

Dlaczego

Parametry i wykonanie

IDLE --(ślad w ROI ∨ DI_pętla/radar)--> OKNO (klatki od t_wyzw − 1 s)
OKNO: detekcja tablic + OCR na każdej klatce, głosowanie
OKNO --(odczyt przyjęty ∧ (DI_obecność ∨ ślad stoi w strefie stop))--> OTWÓRZ: DO impuls 500 ms S
OKNO --(ślad opuścił ROI bez obecności)--> IDLE, zdarzenie zapisane bez otwarcia
DI: transoptor 24 V, eliminacja drgań 20 ms S, znacznik CLOCK_MONOTONIC → czas klatki przez RTCP

Ryzyko i lukiBrak danych w źródłach o zmierzonym odsetku fałszywych wyzwoleń pętli, radaru i obrazu na wjazdach parkingowych.

Zestaw do zakupu

Kategoria Parametry wymagane (skąd) Ceny w ustaleniach
SBC RK3588J lub RK3588; 8 GB LPDDR4X; eMMC ≥32 GB (pSLC); M.2 na SSD; 9–36 V DC; watchdog sprzętowy; 4 DI izolowane, ≥2 DO, 2× RS-485, 2× GbE; RTC z baterią; obudowa bez wentylatora z ciepłowodem do ścianki, opór ≤2,5 °C/W (6.1–6.3) RK3588 Firefly EC-A3588Q 416,95 EUR ; RK3576 w obudowie 299 / 339 USD ; płytki RK3588 149–250 USD
SSD przemysłowy M.2 ≥256 GB; TBW ≥158 TB tylko przy ciągłym nagrywaniu (6.2) brak danych
Kamera ×2 4 MP, ≥2560 px; zmiennoogniskowy, ustawiany ≤58°; stała ekspozycja ≤1/1000 s; limit wzmocnienia; IR 850 nm wokół obiektywu, regulowany, zasięg katalogowy ≥35 m; H.265 Main 8-bit bez trybów „+”; GOP = fps; ≥8 Mbit/s; NTP, RTCP SR; ONVIF S/T z ustawianiem ekspozycji (6.4–6.7) zwykła 4 MP 2,8 mm 93,63 EUR brutto (obiektyw za szeroki); dedykowana ANPR 1286,58 EUR brutto
Oświetlacz IR zewnętrzny tylko gdy wbudowany nie daje zasięgu: 850 nm, montaż ≤d·tan 1,5° od obiektywu (6.6) 850 nm 212–282 EUR netto
Wyzwalacz detektor pętli z wyjściem przekaźnikowym albo radar 60 GHz wykrywający pojazd stojący; wyjście bezpotencjałowe na DI (6.8) brak danych
Szafka opór cieplny i temperatura wewnątrz ≤55 °C latem (6.3) brak danych

Mini PC N100 (porównanie) kosztuje 130–180 USD , pracuje w 0…60 °C (wg producenta) i nie mieści detekcji 2×12,5 kl./s (6.1).

Założenia S i obliczenia