MareArts ANPR SDK
viewsPython SDK · REST server · pip
MareArts ANPR
Detection and OCR for 80+ countries, a REST server with a dashboard, Docker, Road Objects, and Vehicle Intelligence. One license covers the SDK, the server, the mobile app, and Road Objects.
PyPI package marearts-anpr · Python 3.10–3.14 · current release 3.9.1. Docs and examples: github.com/MareArts/MareArts-ANPR.
Install
pip, then GPU if you have one
# CPU — Linux, macOS, Windows, ARM
pip install marearts-anpr
# NVIDIA CUDA
ma-anpr gpu-setup cuda
# Windows AMD / Intel / NVIDIA
ma-anpr gpu-setup directml
onnxruntime and onnxruntime-gpu conflict if both are installed. ma-anpr gpu-setup uninstalls the CPU package and installs the GPU one. A pip extra does not do that.
ma-anpr config # username, serial key, signature
ma-anpr validate # check the license
Credentials go to ~/.marearts/.marearts_env, or set MAREARTS_ANPR_USERNAME, MAREARTS_ANPR_SERIAL_KEY, and MAREARTS_ANPR_SIGNATURE.
Python
Detect and read in a few lines
from marearts_anpr import (
ma_anpr_detector_v16, ma_anpr_ocr_v16, marearts_anpr_from_image_file
)
detector = ma_anpr_detector_v16("640p_fp32", user_name, serial_key, signature)
ocr = ma_anpr_ocr_v16("fp32", "univ", user_name, serial_key, signature)
result = marearts_anpr_from_image_file(detector, ocr, "car.jpg")
print(result)
# {'results': [{'ocr': 'ABC1234', 'ocr_conf': 99, 'ltrb': [...], ...}], ...}
Construct the detector and OCR outside the loop. Loading takes seconds; each frame is milliseconds.
Same call shape for a file, a PIL image, or a BGR array:
from marearts_anpr import marearts_anpr_from_pil, marearts_anpr_from_cv2
marearts_anpr_from_image_file(detector, ocr, "car.jpg")
marearts_anpr_from_pil(detector, ocr, pil_image)
marearts_anpr_from_cv2(detector, ocr, bgr_array)
You can pass detector only (boxes, no text), OCR only (a cropped plate), or both.
V16 models
| Part | Name | Use |
|---|---|---|
| Detector | 640p_fp32 |
Recommended. Distant or small plates. |
| Detector | 320p_fp32 |
Faster. On GPU the gap is small, so prefer 640p. |
| OCR | fp32 |
Recommended. Faster than int8 on CPU and GPU. |
| OCR | int8 |
Smaller download. Use when storage is the limit, not speed. |
RTX 4090, one process, detection + OCR (from the GitHub README, measured):
| Input | 640p + OCR | 320p + OCR |
|---|---|---|
| 640×480 | 22 ms · 46 fps | 16 ms · 64 fps |
| 1280×720 | 26 ms · 38 fps | 19 ms · 53 fps |
| 1920×1080 | 33 ms · 31 fps | 25 ms · 40 fps |
Full tables, backends, and CLI: python-sdk/README.md.
ma-anpr car.jpg
ma-anpr car.jpg --region kr --backend cuda
ma-anpr *.jpg --json results.json
Regions
Per-country character sets
Pass a 2-letter country code for best accuracy, a group code, or univ. Unknown codes fall back to univ. Switch without reloading the model.
ocr.set_region("kr")
ocr.set_region("eup") # EU + Ex-USSR + UK
ocr.set_region("na")
ocr.set_region("univ") # default
| Group | Code |
|---|---|
| Europe (37) | eu |
| Ex-USSR (15) | exussr |
| Europe+ | eup |
| Asia (17) | asia |
| North America | na |
| South America | southamerica |
| Africa | africa |
| Oceania | oceania |
| UK |
uk / gb
|
| China | cn |
| Korea | kr |
| Japan | jp |
| Universal | univ |
ch is Switzerland. China is cn. Country list: Regions in the SDK README.
Vehicle info
Go beyond plate text
Cloud Vehicle Intelligence adds make, model, colour, type, front or rear, plate nation, and a server-side OCR check. Needs internet. Local ANPR still returns if the cloud call fails.
| Field | Example |
|---|---|
| Make | Toyota, BMW, Hyundai |
| Model | Camry, 3 Series, Tucson |
| Color | White, Black, Silver |
| Type | Sedan, SUV, Truck, Van |
| Face | front, rear |
| Plate nation | KR, DE, US |
| Server OCR | Cloud plate text, for a cross-check |
from marearts_anpr import ma_anpr_mmc
mmc = ma_anpr_mmc(user_name, serial_key, signature)
result = marearts_anpr_from_image_file(detector, ocr, "car.jpg", mmc)
if result.get("mmc_error"):
print(result["mmc_error"]) # plates are still in result["results"]
for r in result["results"]:
print(r["ocr"], r.get("mmc_make"), r.get("mmc_model"), r.get("mmc_color"))
On-device, no quota: ma-anpr mmc-setup then ma-anpr mmc-backend local, and from marearts_anpr import ma_anpr_mmc_local. Same enrich fields. REST: POST /api/anpr/mmc.
Server
Dashboard and REST, same install
The server is in pip install marearts-anpr. No second package.
ma-anpr config
ma-anpr server start # http://127.0.0.1:8000
ma-anpr server start --daemon # background
curl -X POST http://127.0.0.1:8000/api/anpr -F "image=@car.jpg"
curl -X POST http://127.0.0.1:8000/api/anpr/mmc -F "image=@car.jpg"
Dashboard at port 8000. Swagger at /docs.
| Group | Does |
|---|---|
| Detection |
POST /api/anpr, /api/anpr/mmc, batch |
| History | List, search, detail, delete, CSV / JSON export |
| Watchlist | Plates to alert on |
| Config | Region, threads, models, MMC backend |
| Monitor | Health, stats, logs, SSE |
ma-anpr server status
ma-anpr server list
ma-anpr server logs --follow
ma-anpr server stop
ma-anpr server detect car.jpg --mmc
server stop checks server_id: marearts-anpr before it kills a process. Full CLI: server/README.md.
Docker
Build the image, then run
Images are built from MareArts-ANPR/docker. GPU needs NVIDIA Container Toolkit. CPU image runs without --gpus.
git clone https://github.com/MareArts/MareArts-ANPR.git
cd MareArts-ANPR/docker
docker build -t marearts-anpr-server:latest .
docker run -d --gpus all --name marearts-anpr-server -p 8000:8000 \
-e MAREARTS_ANPR_USERNAME="your@email.com" \
-e MAREARTS_ANPR_SERIAL_KEY="your_serial_key" \
-e MAREARTS_ANPR_SIGNATURE="your_signature" \
-v ~/.marearts:/root/.marearts \
marearts-anpr-server:latest
docker build -t marearts-anpr-server-cpu:latest -f Dockerfile.cpu .
docker run -d --name marearts-anpr-server-cpu -p 8000:8000 \
-e MAREARTS_ANPR_USERNAME="your@email.com" \
-e MAREARTS_ANPR_SERIAL_KEY="your_serial_key" \
-e MAREARTS_ANPR_SIGNATURE="your_signature" \
-v ~/.marearts:/root/.marearts \
marearts-anpr-server-cpu:latest
Same dashboard and /api/anpr as the pip server. Guide: docker/README.md.
Road objects
Person, vehicle, two-wheeler
Included in the ANPR license. Separate package marearts-road-objects.
from marearts_road_objects import ma_road_object_detector
rod = ma_road_object_detector("640p_fp32", user_name, serial_key, signature)
result = rod.detect("street.jpg")
# [{'class': 'car', 'conf': 0.97, 'ltrb': [...]}, {'class': 'person', ...}]
Support
License and next steps
- Get a key on the product page.
-
pip install marearts-anprthenma-anpr config. - Call the SDK, or
ma-anpr server start. - The same key opens the mobile app and the desktop viewer.
Python SDK, REST server, mobile app, Road Objects, and Vehicle Intelligence share the ANPR serial. Keys are bound to the PayPal email and cannot be moved.
| Contact | hello@marearts.com |
| GitHub | MareArts/MareArts-ANPR |
| Live demo | live.marearts.com |
| PyPI | marearts-anpr |
| Videos | ANPR playlist (this page: ANPR clips only, muted autoplay) |
marearts-anpr 3.9.1 · Python 3.10–3.14