{"id":30857670,"url":"https://github.com/habedi/omni-lpr","last_synced_at":"2026-01-20T16:59:22.487Z","repository":{"id":312328945,"uuid":"1045572988","full_name":"habedi/omni-lpr","owner":"habedi","description":"A multiprotocol (REST and MCP) server for automatic license plate recognition 🚗","archived":false,"fork":false,"pushed_at":"2025-08-29T22:21:52.000Z","size":577,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-08-29T22:37:37.616Z","etag":null,"topics":["automatic-license-plate-recognition","computer-vision","deep-learning","generative-ai","license-plate-recognition","mcp-server","ocr","python","rest-api"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/habedi.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["habedi"]}},"created_at":"2025-08-27T11:46:12.000Z","updated_at":"2025-08-29T21:55:38.000Z","dependencies_parsed_at":"2025-08-29T22:37:41.617Z","dependency_job_id":"10421422-14b7-4ca9-89b4-03287ba2c261","html_url":"https://github.com/habedi/omni-lpr","commit_stats":null,"previous_names":["habedi/omni-lpr"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/habedi/omni-lpr","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/habedi%2Fomni-lpr","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/habedi%2Fomni-lpr/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/habedi%2Fomni-lpr/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/habedi%2Fomni-lpr/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/habedi","download_url":"https://codeload.github.com/habedi/omni-lpr/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/habedi%2Fomni-lpr/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":274040579,"owners_count":25212094,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-07T02:00:09.463Z","response_time":67,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["automatic-license-plate-recognition","computer-vision","deep-learning","generative-ai","license-plate-recognition","mcp-server","ocr","python","rest-api"],"created_at":"2025-09-07T13:09:12.673Z","updated_at":"2026-01-20T16:59:22.480Z","avatar_url":"https://github.com/habedi.png","language":"Python","funding_links":["https://github.com/sponsors/habedi"],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg alt=\"Omni-LPR Logo\" src=\"logo.svg\" width=\"300\"\u003e\n  \u003c/picture\u003e\n\u003cbr\u003e\n\n\u003ch2\u003eOmni-LPR\u003c/h2\u003e\n\n[![Tests](https://img.shields.io/github/actions/workflow/status/habedi/omni-lpr/tests.yml?label=tests\u0026style=flat\u0026labelColor=333333\u0026logo=github\u0026logoColor=white)](https://github.com/habedi/omni-lpr/actions/workflows/tests.yml)\n[![Code Coverage](https://img.shields.io/codecov/c/github/habedi/omni-lpr?style=flat\u0026label=coverage\u0026labelColor=333333\u0026logo=codecov\u0026logoColor=white)](https://codecov.io/gh/habedi/omni-lpr)\n[![Code Quality](https://img.shields.io/codefactor/grade/github/habedi/omni-lpr?style=flat\u0026label=code%20quality\u0026labelColor=333333\u0026logo=codefactor\u0026logoColor=white)](https://www.codefactor.io/repository/github/habedi/omni-lpr)\n[![Python Version](https://img.shields.io/badge/python-%3E=3.10-3776ab?style=flat\u0026labelColor=333333\u0026logo=python\u0026logoColor=white)](https://github.com/habedi/omni-lpr)\n[![PyPI](https://img.shields.io/pypi/v/omni-lpr?style=flat\u0026labelColor=333333\u0026logo=pypi\u0026logoColor=white)](https://pypi.org/project/omni-lpr/)\n[![License](https://img.shields.io/badge/license-MIT-00acc1?style=flat\u0026labelColor=333333\u0026logo=open-source-initiative\u0026logoColor=white)](https://github.com/habedi/omni-lpr/blob/main/LICENSE)\n\u003cbr\u003e\n[![Documentation](https://img.shields.io/badge/docs-read-8ca0d7?style=flat\u0026labelColor=282c34)](https://github.com/habedi/omni-lpr/tree/main/docs)\n[![Examples](https://img.shields.io/badge/examples-view-green?style=flat\u0026labelColor=282c34)](https://github.com/habedi/omni-lpr/tree/main/examples)\n[![Docker Image (CPU)](https://img.shields.io/badge/Docker-CPU-007ec6?style=flat\u0026logo=docker)](https://github.com/habedi/omni-lpr/pkgs/container/omni-lpr-cpu)\n[![Docker Image (OpenVINO)](https://img.shields.io/badge/Docker-OpenVINO-007ec6?style=flat\u0026logo=docker)](https://github.com/habedi/omni-lpr/pkgs/container/omni-lpr-openvino)\n[![Docker Image (CUDA)](https://img.shields.io/badge/Docker-CUDA-007ec6?style=flat\u0026logo=docker)](https://github.com/habedi/omni-lpr/pkgs/container/omni-lpr-cuda)\n\nA multi-interface (REST and MCP) server for automatic license plate recognition\n\n\u003c/div\u003e\n\n---\n\nOmni-LPR is a self-hostable server that provides automatic license plate recognition (ALPR) capabilities via a REST API\nand the Model Context Protocol (MCP). It can be used both as a standalone ALPR microservice and as an ALPR toolbox for\nAI agents and large language models (LLMs).\n\n### Why Omni-LPR?\n\nUsing Omni-LPR can have the following benefits:\n\n- **Decoupling.** Your main application can be in any programming language. It doesn't need to be tangled up with Python\n  or specific ML dependencies because the server handles all of that.\n\n- **Multiple Interfaces.** You aren't locked into one way of communicating. You can use a standard REST API from any\n  app, or you can use MCP, which is designed for AI agent integration.\n\n- **Ready-to-Deploy.** You don't have to build it from scratch. There are pre-built Docker images that are easy to\n  deploy and start using immediately.\n\n- **Hardware Acceleration.** The server is optimized for the hardware you have. It supports generic CPUs (ONNX), Intel\n  CPUs (OpenVINO), and NVIDIA GPUs (CUDA).\n\n- **Asynchronous I/O.** It's built on Starlette, which means it has high-performance, non-blocking I/O. It can handle\n  many concurrent requests without getting bogged down.\n\n- **Scalability.** Because it's a separate service, it can be scaled independently of your main application. If you\n  suddenly need more ALPR power, you can scale Omni-LPR up without touching anything else.\n\n\nSee the [ROADMAP.md](ROADMAP.md) for the list of implemented and planned features.\n\n\u003e [!IMPORTANT]\n\u003e Omni-LPR is in early development, so bugs and breaking API changes are expected.\n\u003e Please use the [issues page](https://github.com/habedi/omni-lpr/issues) to report bugs or request features.\n\n---\n\n### Quickstart\n\nYou can get started with Omni-LPR in a few minutes by following the steps described below.\n\n#### 1. Install the Server\n\nYou can install Omni-LPR using `pip`:\n\n```sh\npip install omni-lpr\n```\n\n#### 2. Start the Server\n\nWhen installed, start the server with a single command:\n\n```sh\nomni-lpr\n```\n\nBy default, the server will be listening on `http://127.0.0.1:8000`.\nYou can confirm it's running by accessing the health check endpoint:\n\n```sh\ncurl http://127.0.0.1:8000/api/health\n# Sample expected output: {\"status\": \"ok\", \"version\": \"0.3.4\"}\n```\n\n#### 3. Recognize a License Plate\n\nNow you can make a request to recognize a license plate from an image.\nThe example below uses a publicly available image URL.\n\n```sh\ncurl -X POST \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"path\": \"https://www.olavsplates.com/foto_n/n_cx11111.jpg\"}' \\\n  http://127.0.0.1:8000/api/v1/tools/detect_and_recognize_plate_from_path/invoke\n```\n\nYou should receive a JSON response with the detected license plate information.\n\n### Usage\n\nOmni-LPR exposes its capabilities as \"tools\" that can be called via a REST API or over the MCP.\n\n#### Available Tools\n\nThe server provides tools for listing models, recognizing plates from image data, and recognizing plates from a path.\n\n- `list_models`: Lists the available detector and OCR models.\n\n- **Tools that process image data** (provided as Base64 or file upload):\n    - `recognize_plate`: Recognizes text from a pre-cropped license plate image.\n    - `detect_and_recognize_plate`: Detects and recognizes all license plates in a full image.\n\n- **Tools that process an image path** (a URL or local file path):\n    - `recognize_plate_from_path`: Recognizes text from a pre-cropped license plate image at a given path.\n    - `detect_and_recognize_plate_from_path`: Detects and recognizes plates in a full image at a given path.\n\nFor more details on how to use the different tools and provide image data, please see the\n[API Documentation](docs/README.md).\n\n#### REST API\n\nThe REST API provides a standard way to interact with the server. All tool endpoints are available under the `/api/v1`\nprefix. Once the server is running, you can access interactive API documentation in the Swagger UI\nat http://127.0.0.1:8000/api/v1/apidoc/swagger.\n\n#### MCP Interface\n\nThe server also exposes its tools over the MCP for integration with AI agents and LLMs. The MCP endpoint is available at\nhttp://127.0.0.1:8000/mcp/, via streamable HTTP.\n\nYou can use a tool like [MCP Inspector](https://github.com/modelcontextprotocol/inspector) to explore the available MCP\ntools.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n    \u003cimg src=\"docs/assets/screenshots/mcp-inspector-3.png\" alt=\"MCP Inspector Screenshot\" width=\"auto\"\u003e\n  \u003c/picture\u003e\n\u003c/div\u003e\n\n### Integration\n\nYou can connect any client that supports the MCP protocol to the server.\nThe following examples show how to use the server with [LM Studio](https://lmstudio.ai/).\n\n#### LM Studio Configuration\n\n```json\n{\n    \"mcpServers\": {\n        \"omni-lpr-local\": {\n            \"url\": \"http://127.0.0.1:8000/mcp/\"\n        }\n    }\n}\n```\n\n#### Tool Usage Examples\n\nThe screenshot of using the `list_models` tool in LM Studio to list the available models for the APLR.\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n\u003cimg src=\"docs/assets/screenshots/lmstudio-list-models-1.png\" alt=\"LM Studio Screenshot 1\" width=\"auto\" height=\"auto\"\u003e\n\u003c/picture\u003e\n\u003c/div\u003e\n\nThe screenshot below shows using the `detect_and_recognize_plate_from_path` tool in LM Studio to detect and recognize\nthe license plate from an [image available on the web](https://www.olavsplates.com/foto_n/n_cx11111.jpg).\n\n\u003cdiv align=\"center\"\u003e\n  \u003cpicture\u003e\n\u003cimg src=\"docs/assets/screenshots/lmstudio-detect-plates-1.png\" alt=\"LM Studio Screenshot 2\" width=\"auto\" height=\"auto\"\u003e\n  \u003c/picture\u003e\n\u003c/div\u003e\n\n---\n\n### Documentation\n\nOmni-LPR documentation is available [here](docs).\n\n#### Examples\n\nCheck out the [examples](examples) directory for usage examples.\n\n---\n\n### Contributing\n\nContributions are always welcome!\nPlease see [CONTRIBUTING.md](CONTRIBUTING.md) for details on how to get started.\n\n### License\n\nOmni-LPR is licensed under the MIT License (see [LICENSE](LICENSE)).\n\n### Acknowledgements\n\n- This project uses the awesome [fast-plate-ocr](https://github.com/ankandrew/fast-plate-ocr)\n  and [fast-alpr](https://github.com/ankandrew/fast-alpr) Python libraries.\n- The project logo is from [SVG Repo](https://www.svgrepo.com/svg/237124/license-plate-number).\n\n\u003c!-- Need to add this line for MCP registry publication --\u003e\n\u003c!-- mcp-name: io.github.habedi/omni-lpr --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhabedi%2Fomni-lpr","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhabedi%2Fomni-lpr","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhabedi%2Fomni-lpr/lists"}