Live tool:
All Case Studies

Case study 05 · Operational computer vision · 2026

Jukir: Parked Vehicle Counting from CCTV Frames

Roadside parked vehicles, dwell time, and daily fee estimates are still logged by hand on site. This prototype crops vehicle candidates with local YOLOv8, reads the entire street from a single VLM Contact Sheet, and deterministically repairs Indonesian Samsat licence plates.

Camera input
RTSP stream / frame samples with ROI polygon
Stage 1 detection (local)
YOLOv8n · 494 ms per street frame
Stage 2 reading (VLM)
1 Contact Sheet request for 8–12 vehicles
Session dedup & repair
Samsat parser + Levenshtein <= 1
Occluded plate handling
Logged as UNREADABLE session + crop proof
Kumo-styled Jukir ANPR console showing the Pasar Baru street scan, Rp 36,000 daily collection estimate, 18 unique motorbike sessions, and per-row plate crop thumbnails
Jukir ANPR console (Kumo UI) after scanning the Pasar Baru street and attendant-post frames: Rp 36,000 estimated collection across 18 motorbike sessions, 3 Parkir Liar alerts (> 30 min), and plate crop thumbnails on every row. 18 active sessions · Rp 36,000

One crowded street frame, eight vehicle candidates processed in a single pass.

In the Pasar Baru frame below, seven motorbike plates and their month.year tax expiry dates are read cleanly. One motorbike whose plate is blocked by a bajaj (#5) is still logged as an active vehicle session so physical counts and daily collection estimates never leak.

Jukir multi-vehicle detection on a busy Pasar Baru Jakarta street: 8 vehicles and plates detected in one frame (B 5179 HO, B 1739 BWK, B 6453 CC, B 6233 SMB, B 6760 VCH, B 6245 POL, B 6908 POL, plus #5 UNREADABLE)

Photo source & license

Base photograph of Pasar Baru, Jakarta by Midori via Wikimedia Commons (CC BY 3.0), cropped and annotated by the Jukir YOLOv8 + VLM pipeline.

Tile Samsat Plate Read Tax Exp Score Session Note
#1 B 5179 HO 09.14 0.95 Motorbike · Valid session, Rp 2,000 tariff applied
#2 B 1739 BWK 03.14 0.95 Motorbike · Valid session, Rp 2,000 tariff applied
#3 B 6453 CC 03.14 0.92 Motorbike · Valid session, Rp 2,000 tariff applied
#4 B 6233 SMB 01.13 0.95 Motorbike · Valid session, Rp 2,000 tariff applied
#5 UNREADABLE --.-- 0.40 Motorbike · Plate occluded by bajaj, counted as 1 session + crop proof
#6..#8 B 6760 VCH (+2) 12.15 0.95 B 6760 VCH, B 6245 POL (06.14), and B 6908 POL (07.13)

Stage-2 Numbered Contact Sheet: 1 VLM call for the entire street.

Calling a VLM separately for every motorbike inflates latency and API cost. Jukir stitches each paired vehicle crop and zoomed licence plate into a single numbered sheet (#1 to #8) so the entire street resolves in one request.

Jukir Stage-2 Numbered Contact Sheet from the Pasar Baru frame: 8 paired vehicle and plate crops stitched for a single VLM call
Actual Contact Sheet sent to the VLM from the Pasar Baru street capture above. Each row pairs the vehicle context crop on the left with the zoomed plate crop on the right.

Attendant post queue: valid plates, OCR character repair, and occluded plate detection in one frame.

In the attendant post queue below, the VLM read the middle motorbike plate as "3 919 TBX" because a mounting bolt merged with the leading letter. The deterministic Samsat parser recognizes Indonesian regional prefixes and repairs it to "B 919 TBX".

Motorbike queue detection at a parking attendant post: valid plates AA 5140 PW (08.23) and AA 5452 SM (02.24), orange OCR-repaired plate (#4 Motor: B 919 TBX), and occluded plate (#3 UNREADABLE)
Blue: valid plates AA 5140 PW (08.23) and AA 5452 SM (02.24). Orange: Samsat parser repair from "3 919 TBX" to "B 919 TBX". Red: motorbike on the right with an occluded plate (#3 UNREADABLE). Base photo: DARMAS BS 9 / Wikimedia Commons (CC BY-SA 4.0).

How deterministic code keeps the parking ledger accurate

Slot-aware letter vs. digit character repair
"3 919 TBX" -> "B 919 TBX"
Indonesian licence plates strictly follow [Regional Letter Prefix] [1-4 Digits] [Letter Suffix]. A "3" or "8" in the prefix slot is repaired to "B", while an "O" or "I" in the digit slot is repaired to "0" and "1".
Rule 1 · Samsat slot normalization
Repeat sightings merged within Levenshtein distance <= 1
Levenshtein <= 1 · 1 session
When a camera scans the same motorbike at 08:02 ("B 1O34 XYZ") and 08:17 ("B 1034 XYZ"), the ledger merges both into a single active session and computes 15 minutes of dwell time without double-billing.
Rule 2 · Parking session deduplication
Automatic dwell-time alert for overstaying vehicles
Dwell 45.1 m > 30 m limit
Each location configures operating hours, base/progressive tariffs, and a dwell-time threshold (e.g. 30 minutes on Jl. Sabang). Vehicles exceeding the threshold are flagged immediately for review.
Rule 3 · Dwell alert & overstay flag

Have a CCTV feed or field logging workflow to test?

Send us one sample clip or camera frame from your site. We will run it through this pipeline and walk through the plate reads and session ledger.

Send Sample Footage