ANPR/LPR
for Industry

Straight facts

This page explains how to deploy Automatic Number Plate Recognition (ANPR/LPR) that actually works in the field—no hype, no unrealistic claims.

🚗 What ANPR/LPR is

Detect a vehicle → locate the plate → read characters → validate against rules → emit events (open gate, log entry, alert). Robust systems separate detection (find plate) from recognition (read text) and add post-validation (formats/whitelists/blacklists).

📍 Where it fits — Use cases

🚪 Access Control & Parking

Gates, barriers, campuses

💰 Tolling & Road Usage

Multi-lane free-flow with lane assignment

👮 Law Enforcement & Watchlists

Stolen/overstay alerts

📦 Logistics & Yards

Dock scheduling, dwell time

🏭 Industrial Sites

Safety, contractor tracking, shift analytics

🇹🇭 Thailand specifics that matter

Thai Plate Formats

Thai plates vary: private cars often 2 Thai letters + 1–4 digits + province line; motorcycles and commercial fleets differ; there are temporary red plates, special backgrounds, colored series, and certain numeric-only prefixes for bus/truck classes (per Land Transport Act).

⚠️ Character Challenges

Thai letters that resemble numerals (e.g., 0/O, B/8)

🔧 Physical Issues

Plate frames/covers, reflective glare, dirt, and mixed fonts

🏛️ Local & Special Plates (Thailand/ASEAN)

We support localized and non-standard plate types with a combined approach: custom detection, extended OCR charsets, and rule-based validators.

🏛️ Diplomatic / Embassy (CD/CC)

Prefix/format validators + Latin/Arabic OCR; color/texture cues help disambiguate series.

🏢 Government plates with Thai numerals (๐–๙)

OCR includes the Thai digit set; events deliver both plate_raw (Thai digits) and plate_norm (Arabic digits).

🏭 Internal / non-standard plates

Template-aware validators (regex + dictionaries) and fine-tune detector/OCR on your samples.

🔴 Temporary / special backgrounds

Multi-frame voting + plate ROI enhancement improves read-rate in glare/reflective conditions.

🏗️ System architecture (practical)

🎯

1. Trigger/Track

Motion, loop, radar, or vision tracker

🔍

2. Plate Detection

Model finds plate ROI (multi-frame tracking)

3. Enhancement

De-skew, denoise, super-res (optional)

🔤

4. OCR/Recognition

Thai+Latin charset with CTC/attention models

5. Post-validation

Country/region rules, regex formats, majority-vote

📡

6. Eventing & API

JSON/REST/MQTT to VMS/Access/ERP

📷 Camera & optics that actually work

📐 Placement (single lane)

  • • Distance 5–15 m, mount 3–5 m high
  • Horizontal & vertical angles ≤ 30°
  • • Roll ≤ 5°

🎯 Pixel Density

  • • Plate width ≥ 150–200 px
  • • More for motorcycles/small fonts

⚡ Shutter Speed

  • 1/1000–1/4000 s for 40–120 km/h
  • • Lock shutter, let gain/IR handle exposure

🎬 Frame Rate

  • • 25–60 fps
  • • Multi-frame voting improves read rate

💡 Illumination

  • • 850 nm IR, narrow beam aimed at lane
  • • Consider strobe synced to shutter
  • • Kill headlight glare

🔧 Hardware

  • • Prefer global shutter for high speed
  • • Strong WDR helps at night and back-light
  • • Motorized varifocal (12–50 mm)
  • • Add polarizer if glare is severe

💡 Tip

Separate "plate camera" (narrow FOV) from "overview camera" (wide FOV); don't try to do everything with one camera

📊 Performance metrics you should demand

📸 Capture Rate

% of vehicles with a visible, usable plate in the frames

👁️ Read Rate

% of visible plates that are correctly read

🎯 Precision/Recall/F1

Character-level and plate-level accuracy metrics

📈 Confidence & Threshold Curves

ROC/PR curves to tune FP vs FN

⚡ Throughput & Latency

Per lane; CPU/GPU utilization; dropped frames

⚠️ Common failure modes (and fixes)

🌀 Motion blur at junctions

Fix: Faster shutter; add pre-trigger (loop/radar); track across frames and majority-vote

💡 Headlight/retro-reflective washout

Fix: Strobe IR, shorter exposure, polarizer, narrower IR beam

📐 Oblique angles / two plates in FOV

Fix: Constrain to one lane, correct placement

🖼️ Frames/covers/dirty plates

Fix: Enhance plate ROI, raise pixel density, add "unreadable" state

🔤 Similar characters (0/O, B/8)

Fix: Post-validator with Thai formats + province dictionary + hotlist cross-check

🚀 Deployment patterns

📱 On-camera LPR

Simple wiring; limited by camera CPU and vendor model; fine for parking gates

📦 Edge box (GPU/ASIC)

Best balance for 1–8 lanes/site; integrates with VMS/Access; resilient offline

☁️ Server/Cloud

Many lanes/locations; ensure privacy, bandwidth, and failover

🔒 Data, privacy, and PDPA

📋 Personal Data Treatment

Treat plates as personal data: signage, purpose limitation, retention policy (e.g., 30–90 days), access logs

💾 Storage Strategy

Store plate text + hash, ROI crops, and unredacted original only where authorized

🔍 Hash-lookup Workflows

Offer workflows for audits without exposing full identities

🔐 Security Measures

Encrypt in transit/at rest; role-based access; time-stamped evidence

What to ask vendors

📊 Performance Evidence

Per-lane read rate at your distance/angle/speed, day & night (with test video)

📷 Technical Plan

Shutter/IR plan and pixel-density plan; global vs rolling shutter

🇹🇭 Thai Support

Thai formats supported? Post-validation rules and dictionaries?

🔗 Integration

REST/MQTT, VMS (e.g., NX), Access/ERP; on-prem vs cloud

📋 Evidence Pack

Images, crops, confidence, latency, and full audit trail

🔗 GaugeSnap integration

🧠 Edge AI Vision

Tuned for Thai plates (detector + OCR + Thai format validator + province dictionary)

🗳️ Multi-frame Voting

Boost read rate at junction speeds

🔌 APIs to Your Stack

REST/MQTT webhooks to VMS (NX), Access Control, Parking, ERP

🔒 Privacy-first Storage

Hashed plates, configurable retention, role-based access, PDPA-ready audit logs

📊 Dashboards

Capture/read rates, confidence histograms, latency, per-lane health

🚀 How to start (low-risk)

Send a 30–60 s test video per lane (day & night), with distance/angles and target speed. We'll return:

1. Camera/IR/shutter plan

Pixel-density check

2. Baseline read-rate estimate

With multi-frame voting

3. Integration outline

Events, APIs, retention/PDPA