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.

CountryFormatScriptNote
Vietnam12A-345.67 (regional code · series · reg. no.)Latin, black on white2010 format; older formats, diplomatic and military with markedly lower accuracy
ChinaProvince Hanzi + region letter + numberLatin + Chinese charactersSeveral color codes (private, EV, large vehicles, agricultural/municipal, coach/test/temporary)
Laostwo-partLao script + LatinOfficial plates red, regular ones framed in yellow
Cambodiacountry-specific formatKhmer script + LatinTypeface 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.

ALPR development 2020-2022: manual annotation, four OCR models, edge stack, time-to-production in person-months
ALPR back then (2020–2022): supervised, manual

2. What has changed technologically

Three shifts fundamentally change the blueprint:

  1. 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.
  2. 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.
  3. 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):

  1. RTSP stream of the lane camera + trigger signal from an induction loop or light barrier
  2. YOLOv26s detects vehicle and plate region (DeepStream-native)
  3. Plate ROI crop
  4. VLM inference with a structured prompt — output: {country, plate_text, latin_translit, confidence}
  5. Structured event → Kafka → backend (watchlist match, audit log)
  6. 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.
ALPR development 2026: bootstrap prompt, agent-generated pipeline, one VLM, few-shot, time-to-production in person-days
ALPR today (2026): VLM-based, agent-generated

4. Effort comparison

AspectThen (2020–2022)Now (2026)
Annotationmanual, 2 full-time staff throughouta few dozen validation examples, spot checks
OCR modelsone per country / writing systemone VLM for all writing systems
Pipeline codeweeks to months of manual implementationhours, generated from a prompt
Training iterationnumbered steps, 10–14 rounds per countryprompt tuning against a validation set
Time-to-productionperson-months per country bundleperson-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.