5cedcaefe1
Add a dev CLI (uv run python -m vision_service.cli <image>) that runs a recognizer on an image file and prints the parsed plate(s) + confidence + region — fast feedback with no HTTP. Also a package.json `recognize` script and a vision-recognize entry point. Verified fast-alpr for real: installed the `alpr` extra, downloaded the YOLOv9 + CCT ONNX weights (~11MB, cached offline under ~/.cache), and ran recognition on the project's test image → "5AU5341" at 1.000 confidence, region "Czech Republic", ~40ms on CPU, via both the CLI and POST /analyze. Fixes result parsing against the actual fast-alpr API: ocr.confidence is a LIST of per-character confidences (not a scalar) — reduced to one plate confidence via the MIN (a plate is only as trustworthy as its weakest character); also surface ocr.region. Extracted the per-result mapping into a pure plate_from_alpr_result + _reduce_confidence and unit-tested them (no model weights needed). 7 tests pass; ruff + mypy strict clean; full turbo build/lint/test green. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
17 lines
793 B
JSON
17 lines
793 B
JSON
{
|
|
"name": "@parking/vision",
|
|
"version": "0.0.0",
|
|
"private": true,
|
|
"//": "Thin shim so this Python service is a first-class node in the Turbo task graph (it is NOT a JS package — deps are managed by uv/pyproject.toml). Each script shells to Python tooling. See wiki/decisions/vision-service-packaging.md.",
|
|
"scripts": {
|
|
"dev": "uv run uvicorn vision_service.app:app --reload --host 0.0.0.0 --port 8089",
|
|
"start": "uv run uvicorn vision_service.app:app --host 0.0.0.0 --port 8089",
|
|
"lint": "uv run ruff check .",
|
|
"format": "uv run ruff format .",
|
|
"typecheck": "uv run mypy vision_service",
|
|
"test": "uv run pytest -q",
|
|
"recognize": "uv run python -m vision_service.cli",
|
|
"build": "echo 'no build step (Python service; models fetched at deploy)'"
|
|
}
|
|
}
|