feat(vision): add recognize CLI + verify fast-alpr end-to-end
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
This commit is contained in:
@@ -22,8 +22,12 @@ class BBox(BaseModel):
|
||||
|
||||
class PlateResult(BaseModel):
|
||||
text: str
|
||||
# The plate's confidence = the MIN of fast-alpr's per-character confidences (a plate
|
||||
# is only as trustworthy as its weakest character). See recognizer.py.
|
||||
confidence: float = Field(ge=0.0, le=1.0)
|
||||
bbox: BBox | None = None
|
||||
# Predicted issuing region/country (advisory; fast-alpr's global model emits this).
|
||||
region: str | None = None
|
||||
|
||||
|
||||
class VehicleResult(BaseModel):
|
||||
|
||||
Reference in New Issue
Block a user