Skip to content
Β 
Β 

Latest commit

Β 

History

889 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

ALPR Database Community logo

A self-hosted automated license plate recognition database for Blue Iris and CodeProject AI Server

Source Roadmap Deployment

⭐ Please star the repository if you find the project useful ⭐


ALPR Database Community screens

🌟 Overview

I've been using CodeProject AI with Mike Lud's license plate model on Blue Iris for a couple years now, but in this setup, the ALPR doesn't really do a whole lot. Really, you have more of a license plate camera with some OCR as a bonus, and no nice way to take advantage the data other than parsing Blue Iris logs or paying $600+/year for PlateMinder or Rekor ALPR.

This project serves as a complement to a CodeProject Blue Iris setup, giving you a full-featured database to store and actually use your ALPR data, completely for free. Complete with the following it has a very solid initial feature set and is a huge upgrade over the standard setup.

Features:

  • Searchable database & fuzzy search
  • Export filtered plate records as CSV or JSON
  • Live recognition feed
  • Traffic Analytics
  • Categorization and filtering
  • Store information on known vehicles
  • Unified MQTT, Pushover, email, and signed webhook notifications
  • Storage thresholds, category breakdowns, maintenance status, and guarded cleanup previews
  • Automation rules
  • Customizable tagging
  • Configurable retention
  • Flexible API
  • HomeAssistant integration
  • Permissioned users

πŸ”§ Installation and updates

This community fork builds containers directly from a reviewed Git commit. It does not download or run installer/update scripts from the former upstream project, and its Compose files default to the local image alpr-dashboard:local with pulling disabled.


Prerequisites

In order to send data and use the application, you will need ALREADY WORKING ALPR within Blue Iris. If you are not getting plate numbers in your alert memos, please configure and ensure your ALPR is working before beginning the setup.

You will also need the following installed on your system.

  • Docker
  • Docker Compose
  • Docker engine enabled and running

Tip

If unfamiliar with Docker, an easy way to check all three of these boxes at once is to install Docker Desktop, which has a GUI and bunch of nice tools.


Clone the fork, check out the approved commit, and build the local image:

git clone https://github.com/prsmith777/ALPR-Database-Community.git
cd ALPR-Database-Community
git checkout <approved-commit>
docker build --tag alpr-dashboard:local .

Copy .env.example to .env, fill in both passwords, and keep that file private. Then start the stack with docker compose up -d. Compose refuses to start while either required password is blank, never pulls the former upstream application image, and keeps PostgreSQL bound to 127.0.0.1 by default.

For this owner's staging and production process, including PostgreSQL 17 upgrade and rollback requirements, follow docs/personal-deployment.md.



βš™οΈ Setup

Get Your API Key

To start sending data, log in to the application and navigate to settings -> security in the bottom left hand corner. At the bottom of the page you should see an API key. Click the eye to reveal the key and copy it down for use in Blue Iris.

API key settings


Set up an alert action within Blue Iris:

ALPR recognitions are sent to the /api/plate-reads endpoint. Integration routes under /api/plate-reads and /api/plates require the API key in either of these headers:

x-api-key: YOUR_API_KEY
Authorization: Bearer YOUR_API_KEY

Do not place an API key in the URL. Query-string credentials such as ?api_key=... are rejected. Other application API routes use the signed-in browser session instead of the integration API key.

We can make use of the built-in macros to dynamically get the alert data and send it as our payload. It should look like this:

{ "ai_dump":&JSON, "Image":"&ALERT_JPEG", "camera":"&CAM", "ALERT_PATH":"&ALERT_PATH", "ALERT_CLIP":"&ALERT_CLIP", "timestamp":"&ALERT_TIME", "trigger_type":"&TYPE" }

Blue Iris may label this JSON alert body as text/plain. The integration accepts that default for compatibility and validates the body itself as JSON; no additional Content-Type header is required.

For primary direction without a cloned camera, configure the motion sensor with both explicit ordered crossings (for example A>B,B>A) rather than the bidirectional shorthand A-B. Blue Iris then sends MOTION_A>B or MOTION_B>A in &TYPE. Map those two values to the camera's semantic direction labels under Settings > Vehicle Setup > Cameras and enable the mapping only after live validation in both directions. New mapped reads use Blue Iris as the displayed and notification direction source; missing or unmapped crossings fall back to Vehicle ReID. Monochrome nighttime captures are not classified and display Unavailable nighttime. Existing historical reads are not rewritten.

Each alert attempt is assigned an x-request-id and emits safe arrival status metadata. Authenticated alerts also leave a bounded, metadata-only ingress receipt; rejected authentication attempts leave a receipt without reading the request body. This makes rejected requests and a missing or blank &TYPE visible to operators without retaining the plate value, image, AI dump, request body, or Blue Iris path in operational logs. File-log rotation, request-size limits, receipt preview policy, hot-audit policy, and PostgreSQL container-log bounds can be tuned with the ALPR_* logging settings documented in .env.example. Administrators can review growth, preserve a bounded incident package, and run an exact preview-confirmed retention batch from System Logs > Retention & incidents. Retention execution is never scheduled automatically.

Set your API key with the x-api-key header as seen below. Notification settings

Browser sessions use HttpOnly, SameSite=Lax cookies. Cookies are non-Secure by default so direct-LAN HTTP Docker deployments continue to work. Set SESSION_COOKIE_SECURE=true when the application is served over HTTPS. Cookie security is never inferred from X-Forwarded-Proto or other request headers.

See docs/security-baseline.md for the complete authentication and failure-handling policy.

Maintainers of this fork should follow the streamlined staging-to-production process in docs/personal-deployment.md.

Thats it! You're now collecting and storing your ALPR data.


πŸ“· Screenshots

Live Viewer Live View Dashboard TPMS Plate Database Insights

⚠️ Disclaimer

This is meant to be a helpful project and is still a work-in-progress. There's a good amount of spaghetti vibe coding in here and random things left over from the initial release. Not to be relied on for anything critical.

About

Fully-Featured Automated License Plate Recognition Database Platform for Blue Iris + CodeProject AI Server 🚘

Resources

Security policy

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages