Skip to content

mrfroncu/Gatevision-iOS

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

25 Commits
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


 β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β–ˆβ–ˆβ–ˆβ•—   β–ˆβ–ˆβ•—
β–ˆβ–ˆβ•”β•β•β•β•β• β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•—β•šβ•β•β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β•β–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β–ˆβ–ˆβ•— β–ˆβ–ˆβ•‘
β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•”β•β•β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•”β•β•β•  β•šβ–ˆβ–ˆβ•— β–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘β•šβ•β•β•β•β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ•—β–ˆβ–ˆβ•‘
β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘  β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ•‘   β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•— β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•”β• β–ˆβ–ˆβ•‘β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•‘β–ˆβ–ˆβ•‘β•šβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ•”β•β–ˆβ–ˆβ•‘ β•šβ–ˆβ–ˆβ–ˆβ–ˆβ•‘
 β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•   β•šβ•β•   β•šβ•β•β•β•β•β•β•  β•šβ•β•β•β•  β•šβ•β•β•šβ•β•β•β•β•β•β•β•šβ•β• β•šβ•β•β•β•β•β• β•šβ•β•  β•šβ•β•β•β•

Rozpoznawanie tablic rejestracyjnych i kontrola bramy β€” iOS + Web Panel

iOS Swift SwiftUI CoreML License



Czym jest GateVision?

GateVision to system automatycznej kontroli bramy wjazdowej. Aplikacja iOS w czasie rzeczywistym rozpoznaje tablice rejestracyjne, porΓ³wnuje je z bazΔ… danych i automatycznie steruje bramΔ…. Wykorzystuje CoreML (model YOLO wytrenowany na tablicach) do detekcji regionΓ³w tablic oraz Apple Vision Framework do odczytu tekstu (OCR).

W tle dziaΕ‚a serwer HTTP (port 6600) z peΕ‚nym panelem webowym do zarzΔ…dzania systemem z dowolnego urzΔ…dzenia w sieci lokalnej.

ΕΉrΓ³dΕ‚o obrazu (iPhone / Raspberry Pi / 70mai)
      β”‚
      β”œβ”€β”€ 🧠  CoreML YOLO β†’ Detekcja regionu tablicy β†’ Crop β†’ Vision OCR β†’ Odczyt tekstu
      β”‚
      β”œβ”€β”€ πŸ—„οΈ  SQLite β†’ Sprawdzenie tablicy w bazie β†’ Otwarcie/blokada bramy
      β”‚
      └── 🌐  HTTP :6600 β†’ Panel webowy (status, logi, zarzΔ…dzanie, debug)

Tryby detekcji

GateVision oferuje trzy tryby rozpoznawania tablic:

Tryb Silnik Opis
PeΕ‚na klatka Apple Vision OCR OCR na caΕ‚ym obrazie β€” prosty, bez ML, dobre na krΓ³tki dystans
YOLO ML CoreML + Vision wrapper Model YOLO wykrywa region tablicy, obraz jest wycinany i wysyΕ‚any do OCR β€” lepsza skutecznoΕ›Δ‡ na dalszy dystans
CoreML Direct CoreML bezpoΕ›rednio Ten sam model YOLO, ale z rΔ™cznym preprocessingiem (resize 640Γ—640, CVPixelBuffer) i bezpoΕ›rednim MLModel.prediction() β€” peΕ‚na kontrola, przydatne do debugowania

Pipeline detekcji (tryby ML)

Klatka z kamery (portrait)
    β”‚
    β”œβ”€β”€ CoreML YOLO β†’ bounding boxy tablic (normalized coords)
    β”‚
    β”œβ”€β”€ Crop + padding + upscale (min 150px) β†’ wyciΔ™ty region tablicy
    β”‚
    β”œβ”€β”€ Apple Vision OCR (.accurate) β†’ tekst tablicy + confidence
    β”‚
    β”œβ”€β”€ Regex filter β†’ [A-Z]{1,3}\d{3,5}[A-Z]{0,2}
    β”‚
    └── System gΕ‚osowania (N detekcji w oknie M klatek) β†’ decyzja o otwarciu bramy

Funkcje

Detekcja i OCR

  • 3 tryby detekcji β€” PeΕ‚na klatka, YOLO ML, CoreML Direct
  • 2 tryby OCR β€” Tablica (filtruje rejestracje, steruje bramΔ…) / Wszystko (wyΕ›wietla caΕ‚y tekst β€” do kalibracji)
  • System gΕ‚osowania β€” wymaga N powtΓ³rzeΕ„ tej samej tablicy w oknie M klatek przed otwarciem bramy
  • Cooldown β€” zapobiega wielokrotnemu otwarciu na tΔ™ samΔ… tablicΔ™

ΕΉrΓ³dΕ‚a kamery

  • iPhone β€” wbudowana kamera z wyborem obiektywu (0.5Γ—, 1Γ—, 5Γ—)
  • Raspberry Pi β€” MJPEG stream po HTTP z kamery USB podΕ‚Δ…czonej do Pi
  • 70mai β€” dashcam przez RTSP stream

RozdzielczoΕ›Δ‡ kamery

  • 720p (1280Γ—720) β€” niska latencja, mniejsze zuΕΌycie baterii
  • 1080p (1920Γ—1080) β€” balans jakoΕ›ci i wydajnoΕ›ci
  • 4K (3840Γ—2160) β€” maksymalny zasiΔ™g detekcji

Baza danych (SQLite)

  • Lista autoryzowanych tablic z danymi wΕ‚aΕ›cicieli
  • Oznaczanie pojazdΓ³w flotowych i przypisywanie do uΕΌytkownikΓ³w (AD)
  • Blokowanie/odblokowywanie tablic bez usuwania z systemu
  • PeΕ‚na historia detekcji z klatkΔ… z momentu rozpoznania (JPEG snapshot)

Sterowanie bramΔ…

  • Automat stanowy: ZAMKNIĘTA β†’ OTWIERANIE β†’ OTWARTA β†’ ZAMYKANIE β†’ ZAMKNIĘTA
  • Konfigurowalne czasy otwierania, otwarcia i zamykania
  • RΔ™czne sterowanie z aplikacji i panelu web

Panel webowy (port 6600)

  • Status β€” stan bramy, metryki OCR, podglΔ…d kamery live (MJPEG stream), przyciski sterowania
  • Logi β€” tabela detekcji z wyszukiwarkΔ… i podglΔ…dem zdjΔ™Δ‡
  • Tablice β€” dodawanie, edycja, blokowanie, usuwanie tablic
  • Ustawienia β€” tryb OCR, tryb detekcji, ΕΊrΓ³dΕ‚o kamery, rozdzielczoΕ›Δ‡
  • Debug β€” diagnostyka OCR, info o kamerze, baza danych, logi ML z toggle/clear/copy

Debug i diagnostyka

  • MLLogger β€” szczegΓ³Ε‚owe logi pipeline'u ML w czasie rzeczywistym
  • Debug ML β€” przechwytywanie wyciΔ™tych regionΓ³w tablic ze wszystkich detekcji ML (nie tylko zmatchowanych)
  • Debug tab β€” diagnostyka OCR, parametry kamery, stany bramy, testy sterowania
  • Loading screen β€” wizualizacja inicjalizacji (baza, model ML, kamera, serwer)

Panel Web β€” REST API

http://<IP-iPhone>:6600
Metoda Endpoint Opis
GET / Dashboard HTML
GET /api/status Stan bramy, FPS, ostatnia tablica, ΕΊrΓ³dΕ‚o kamery
GET /api/snapshot Aktualna klatka JPEG
GET /api/stream MJPEG stream (podglΔ…d live)
GET /api/live_log Ostatnie 60 detekcji na ΕΌywo
GET /api/log?q= Historia detekcji z wyszukiwaniem
GET /api/log/:id/snapshot Klatka JPEG z danego logu
GET/POST /api/plates Lista / dodaj tablicΔ™
PUT/DELETE /api/plates/:id Edytuj / usuΕ„ tablicΔ™
POST /api/plates/:id/toggle_block PrzeΕ‚Δ…cz blokadΔ™
POST /api/gate/open OtwΓ³rz bramΔ™
POST /api/gate/close Zamknij bramΔ™
GET/POST /api/settings Odczyt / zapis ustawieΕ„ (tryb OCR, detekcja, kamera, rozdzielczoΕ›Δ‡)
GET /api/debug PeΕ‚na diagnostyka (OCR, kamera, brama, ML logi, baza)
POST /api/ml_log/toggle WΕ‚Δ…cz/wyΕ‚Δ…cz logowanie ML
POST /api/ml_log/clear WyczyΕ›Δ‡ logi ML

Instalacja

Wymagania

  • Xcode 15+
  • iPhone z iOS 16+ (zalecany iPhone 12+ dla Neural Engine)

Build

  1. Sklonuj repo
  2. OtwΓ³rz Gatevision.xcodeproj w Xcode
  3. Build & Run (Cmd+R) na urzΔ…dzeniu fizycznym (kamera nie dziaΕ‚a w symulatorze)

Model ML (trained_plates_detection.mlpackage) jest doΕ‚Δ…czony do repo β€” Xcode kompiluje go automatycznie do .mlmodelc przy buildzie.


Konfiguracja

Tryby OCR

Tryb Kiedy używać
Tablica Produkcja β€” filtruje europejskie tablice, steruje bramΔ…
Wszystko Kalibracja β€” pokazuje kaΕΌdy rozpoznany tekst z confidence

System gΕ‚osowania

Przed otwarciem bramy aplikacja zbiera minVotes detekcji tej samej tablicy w oknie voteWindowSize klatek. Eliminuje faΕ‚szywe odczyty.

DomyΕ›lnie: 2 gΕ‚osy w oknie 6 klatek

Czasy bramy

ZAMKNIĘTA β†’ [openingTime]s β†’ OTWARTA β†’ [openDuration]s β†’ [closingTime]s β†’ ZAMKNIĘTA
DomyΕ›lnie:       2s               10s                          3s

Format tablic (regex)

[A-Z]{1,3}\d{3,5}[A-Z]{0,2}

ObsΕ‚uguje: WA12345, KR999, PO55123AB, GD00001 itd.


Architektura

CaΕ‚a aplikacja iOS mieΕ›ci siΔ™ w jednym pliku (GateVisionApp.swift) β€” single-file architecture.

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        iPhone                                β”‚
β”‚                                                              β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  ΕΉrΓ³dΕ‚o kamery   │────▢│         CameraEngine          β”‚  β”‚
β”‚  β”‚  β€’ iPhone cam    β”‚     β”‚  β€’ CoreML YOLO detekcja       β”‚  β”‚
β”‚  β”‚  β€’ Raspberry Pi  β”‚     β”‚  β€’ Apple Vision OCR           β”‚  β”‚
β”‚  β”‚  β€’ 70mai RTSP    β”‚     β”‚  β€’ System gΕ‚osowania          β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  β€’ Automat stanowy bramy      β”‚  β”‚
β”‚                           β”‚  β€’ SQLite logging             β”‚  β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚                                β”‚  β”‚
β”‚  β”‚    SwiftUI UI    │◀────│  @Published properties        β”‚  β”‚
β”‚  β”‚  β€’ Status tab    β”‚     β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β”‚  β”‚  β€’ Logi tab      β”‚                     β”‚                  β”‚
β”‚  β”‚  β€’ Tablice tab   β”‚     β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚  β€’ Settings tab  β”‚     β”‚          WebServer            β”‚  β”‚
β”‚  β”‚  β€’ Debug tab     β”‚     β”‚  NWListener :6600             β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚  β€’ REST API (JSON)            β”‚  β”‚
β”‚                           β”‚  β€’ HTML dashboard             β”‚  β”‚
β”‚  WiFi ──────────────────▢│  β€’ MJPEG stream               β”‚  β”‚
β”‚                           β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Struktura plikΓ³w

Gatevision/
β”œβ”€β”€ GateVisionApp.swift                    # CaΕ‚a aplikacja iOS (single file)
β”‚   β”œβ”€β”€ Enums                              # GateState, DetectionMode, OCRMode, CameraSource,
β”‚   β”‚                                      #   LensType, CameraResolution, LoadStep
β”‚   β”œβ”€β”€ DebugMLEntry                       # Model danych debug ML
β”‚   β”œβ”€β”€ Design System (GV)                 # Kolory, Liquid Glass modifiers
β”‚   β”œβ”€β”€ Database                           # SQLite wrapper (plates + access_log + snapshots)
β”‚   β”œβ”€β”€ MLLogger                           # Logger pipeline'u ML
β”‚   β”œβ”€β”€ WebServer                          # NWListener HTTP + REST API + dashboard
β”‚   β”œβ”€β”€ CameraEngine                       # AVFoundation + CoreML + Vision OCR + gate FSM
β”‚   β”‚   β”œβ”€β”€ captureOutput                  # Przetwarzanie klatek z iPhone
β”‚   β”‚   β”œβ”€β”€ handleExternalFrame            # Przetwarzanie klatek z Pi/70mai
β”‚   β”‚   β”œβ”€β”€ runCoreMLDetection             # YOLO ML (via Vision wrapper)
β”‚   β”‚   β”œβ”€β”€ runDirectCoreMLDetection       # CoreML Direct (manual preprocessing)
β”‚   β”‚   └── ocrCroppedRegions              # Crop + OCR na wyciΔ™tych regionach
β”‚   β”œβ”€β”€ SplashScreen                       # Loading screen z progress bar
β”‚   β”œβ”€β”€ RootView                           # TabView z 5 zakΕ‚adkami
β”‚   β”œβ”€β”€ StatusTab                          # Kamera live + GateCard + metryki
β”‚   β”œβ”€β”€ LogTab                             # Aktualna sesja + Historia + Debug ML
β”‚   β”œβ”€β”€ PlatesTab                          # CRUD lista tablic
β”‚   β”œβ”€β”€ SettingsTab                        # Konfiguracja + Debug nawigacja
β”‚   β”œβ”€β”€ DebugTab                           # Diagnostyka, czasy bramy, ML logi, testy
β”‚   └── MLLogView                          # PrzeglΔ…darka logΓ³w ML
β”‚
β”œβ”€β”€ dashboard.html                         # Panel webowy (HTML/CSS/JS)
β”œβ”€β”€ trained_plates_detection.mlpackage     # Model CoreML YOLO (detekcja tablic)
└── trained_plates_detection.pt            # Model PyTorch (ΕΊrΓ³dΕ‚o)

Licencja

MIT β€” szczegΓ³Ε‚y w pliku LICENSE.


Made with ❀️ for smart gate automation

GateVision przetwarza wszystko lokalnie na urzΔ…dzeniu β€” ΕΌadne dane nie sΔ… wysyΕ‚ane na zewnΔ…trz.

About

ANPR System - proof of concept in Swift

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors