Case Study · 2026-05-18
Multi-Country ALPR for a Southeast Asian Customer — Then and Now
How building the same vision-AI system changed between 2020 and 2026: from supervised learning with manual annotation to VLM-based pipelines, generated by a coding agent.
A case study: how building the same vision-AI system changed between 2020 and 2026 — using the example of license-plate recognition for several Asian countries.
1. Then: Multi-Country ALPR (2020–2022)
Application. Automatic license-plate recognition for a Southeast Asian customer at high-traffic checkpoints. Plates from Vietnam, China, Laos, and Cambodia are captured and classified. Country bundles released: January 2022.
Plate specifics.
| Country | Format | Script | Note |
|---|---|---|---|
| Vietnam | 12A-345.67 (regional code · series · reg. no.) | Latin, black on white | 2010 format; older formats, diplomatic and military with markedly lower accuracy |
| China | Province Hanzi + region letter + number | Latin + Chinese characters | Several color codes (private, EV, large vehicles, agricultural/municipal, coach/test/temporary) |
| Laos | two-part | Lao script + Latin | Official plates red, regular ones framed in yellow |
| Cambodia | country-specific format | Khmer script + Latin | Typeface similar to the Thai one |
Architecture (class description).
Edge — per station (checkpoint):
- Multi-focal panoramic camera system (180°×90°, approx. 45 MP effective resolution) for overview
- Specialized ANPR cameras with integrated IR illumination (10–18 m capture range, day/night)
- PTZ camera with IR (up to approx. 200 m range)
- 4K dome camera for detail
- Local recording server (rack-mount)
- ANPR engine on a dedicated workstation (NVIDIA GPU, CUDA, DeepStream as substrate)
Operations center:
- Multi-stream viewing client (GPU-accelerated)
- Whitelist/blacklist management with mobile push alerts
- Driver/vehicle master data, time profiles
- Map-based site setup
- VPN connectivity to all edge sites
Integration:
- ANPR events via message broker (ActiveMQ), payload with plate string, confidence, bounding box, JPG crops of vehicle and plate
- Multicast/UDP for live streams, unicast/TCP for replay
- ONVIF Profile S interface for third-party systems
ML methodology.
- Supervised learning, a separately trained detector and OCR model per country (VN, CN, LA, KH)
- Manual annotation of all training examples with open-source labeling tools
- Iterative training in numbered steps (typically 10 to 14 per model)
- Detector families: MobileNet-SSD and YOLO variants
- Performance tracking in tabular reports per country combination
Effort. Several person-months to the production-ready country bundles. The single biggest item: annotating training images. Two full-time staff were occupied with annotation throughout.
2. What has changed technologically
Three shifts fundamentally change the blueprint:
- Coding agents as pipeline generators. NVIDIA DeepStream 9 (April 2026) ships an installable skill for Claude Code and Cursor. From a natural-language prompt, production-ready vision pipelines emerge — with REST API, Kafka connectivity, health probes, and container deployment in one pass.
- Vision-language models instead of per-language OCR. A VLM (e.g., NVIDIA Cosmos Reason 2) reads Latin, Hanzi, Lao, and Khmer in a single model and returns structured JSON — including country classification. Four separate OCR models become one.
- Few-shot or zero-shot instead of mass annotation. Instead of tens of thousands of manually labeled plates, dozens of validation examples and a precise prompt are often enough. Iteration shifts from model training to prompt engineering.
3. How you set up the same application today
Recommended architecture.
Edge — per lane (e.g., Jetson Orin):
- RTSP stream of the lane camera + trigger signal from an induction loop or light barrier
- YOLOv26s detects vehicle and plate region (DeepStream-native)
- Plate ROI crop
- VLM inference with a structured prompt — output:
{country, plate_text, latin_translit, confidence} - Structured event → Kafka → backend (watchlist match, audit log)
- FastAPI endpoints for operations and HMI (
/health,/metrics,/lanes/{id}/last)
Backend:
- Watchlist service, persistence, reporting
- VLM fallback tier with a larger model for low-confidence cases
- Review queue for human spot checks → continuous prompt tuning
Bootstrap prompt (example).
Build a DeepStream 9 microservice for checkpoint license-plate recognition.
Input: 8 RTSP streams (one per lane), each triggered by an external GPIO/MQTT
signal indicating a vehicle is at the read line.
Stage 1: YOLOv26s detects vehicle and license plate, crops plate ROI.
Stage 2: For each crop, call a vision-language model with a structured prompt
that returns JSON {country: VN|CN|LA|KH|other, plate_text, latin_translit, confidence}.
Stage 3: Emit one Kafka message per detection to topic `lpr.plates.v1` with
schema {lane_id, ts, country, plate_text, latin_translit, confidence, image_ref}.
Persist plate crops to /var/lib/alpr/plates/{yyyy}/{mm}/{dd}/ for audit.
Expose FastAPI: GET /health, GET /metrics (Prometheus), GET /lanes/{id}/last,
POST /lanes/{id}/replay.
Dockerize; target Jetson Orin AGX.
From this prompt, the skill generates the pipeline, the FastAPI wrapper, the Compose files, and the health probes in one pass.
New things to watch.
- Validation set and audit trail. Such control applications are legally relevant. Plate crop, model version, and prompt hash must be persisted per event.
- Confidence routing. Low confidence → larger VLM or human review queue.
- Prompt versioning. Prompts become the model equivalent and belong in Git, semantically versioned.
- Data sovereignty. Ideally run the VLM on-premise on a local GPU server, not via external APIs.
4. Effort comparison
| Aspect | Then (2020–2022) | Now (2026) |
|---|---|---|
| Annotation | manual, 2 full-time staff throughout | a few dozen validation examples, spot checks |
| OCR models | one per country / writing system | one VLM for all writing systems |
| Pipeline code | weeks to months of manual implementation | hours, generated from a prompt |
| Training iteration | numbered steps, 10–14 rounds per country | prompt tuning against a validation set |
| Time-to-production | person-months per country bundle | person-days |
5. Impact on the work
Training-data annotation used to be pure manual labor and tied up several full-time staff for months. With VLM-based recognition this effort largely disappears — low-skilled annotation work will be needed markedly less in such pipelines going forward.
In return, the work shifts toward higher-skilled tasks: prompt engineering, maintaining the validation datasets, model selection and evaluation. This shift is real — fewer, but more demanding, activities.