{"id":31893836,"url":"https://github.com/mlapaglia/openalprwebhookprocessor","last_synced_at":"2025-10-13T09:25:42.274Z","repository":{"id":42428263,"uuid":"325864324","full_name":"mlapaglia/OpenAlprWebhookProcessor","owner":"mlapaglia","description":"An OpenALPR Webhook Processor for IP Camera Overlays","archived":false,"fork":false,"pushed_at":"2025-10-06T01:40:56.000Z","size":6505,"stargazers_count":24,"open_issues_count":10,"forks_count":8,"subscribers_count":3,"default_branch":"develop","last_synced_at":"2025-10-12T13:44:57.183Z","etag":null,"topics":["angular","angular-material","asp-net-core","docker","license-plate-recognition","machine-learning"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mlapaglia.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":null,"code_of_conduct":null,"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":"mlapaglia","custom":["https://www.paypal.com/donate/?business=JS5FUA7KHHX74\u0026no_recurring=0\u0026currency_code=USD"]}},"created_at":"2020-12-31T19:50:04.000Z","updated_at":"2025-09-24T11:46:39.000Z","dependencies_parsed_at":"2022-09-21T19:23:31.107Z","dependency_job_id":"674eb0fe-207d-4d6c-b836-0329903318b1","html_url":"https://github.com/mlapaglia/OpenAlprWebhookProcessor","commit_stats":null,"previous_names":[],"tags_count":409,"template":false,"template_full_name":null,"purl":"pkg:github/mlapaglia/OpenAlprWebhookProcessor","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlapaglia%2FOpenAlprWebhookProcessor","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlapaglia%2FOpenAlprWebhookProcessor/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlapaglia%2FOpenAlprWebhookProcessor/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlapaglia%2FOpenAlprWebhookProcessor/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mlapaglia","download_url":"https://codeload.github.com/mlapaglia/OpenAlprWebhookProcessor/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mlapaglia%2FOpenAlprWebhookProcessor/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279014518,"owners_count":26085535,"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-10-13T02:00:06.723Z","response_time":61,"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":["angular","angular-material","asp-net-core","docker","license-plate-recognition","machine-learning"],"created_at":"2025-10-13T09:25:39.497Z","updated_at":"2025-10-13T09:25:42.266Z","avatar_url":"https://github.com/mlapaglia.png","language":"C#","readme":"# OpenALPR Webhook Processor\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=alert_status)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Bugs](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=bugs)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Code Smells](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=code_smells)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Coverage](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=coverage)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Duplicated Lines (%)](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=duplicated_lines_density)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Lines of Code](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=ncloc)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Reliability Rating](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=reliability_rating)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Security Rating](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=security_rating)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Technical Debt](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=sqale_index)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Maintainability Rating](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=sqale_rating)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=mlapaglia_OpenAlprWebhookProcessor\u0026metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=mlapaglia_OpenAlprWebhookProcessor)\n\nA comprehensive license plate recognition management system that processes webhooks from OpenALPR web servers, manages IP cameras, and provides intelligent alerting capabilities.\n\u003cimg width=\"1672\" height=\"1061\" alt=\"Untitled\" src=\"https://github.com/user-attachments/assets/073f4ac9-d63d-452d-a80c-b9dcbd12bb29\" /\u003e\n## 🎯 Core Features\n\n### License Plate Processing\n- **Real-time Processing**: Receives and processes license plate webhooks from OpenALPR web servers\n- **Data Storage**: Stores plate numbers, vehicle descriptions, timestamps, and confidence scores\n- **Image Management**: Handles full vehicle images and cropped license plate images\n- **Statistics**: Tracks plate frequency and visit patterns\n\n### Camera Management\n- **Multi-Camera Support**: Manage multiple IP cameras with individual configurations\n- **Manufacturer Support**: Compatible with Hikvision and Dahua camera systems\n- **Live Overlay Updates**: Display detected license plates directly on camera video feeds\n- **Automatic Day/Night Mode**: Schedule sunrise/sunset camera mode switching\n- **Focus Control**: Automatic zoom and focus adjustments based on time of day\n- **Camera Masking**: Define detection areas to improve accuracy\n\n### Intelligent Alerting\n- **Custom Alert Rules**: Set up alerts for specific license plates or patterns  \n- **Multiple Notification Channels**: Push notifications, Pushover integration, and webhook forwarding\n- **Real-time Notifications**: Instant alerts when monitored plates are detected\n\n### Machine Learning Predictions\n- **Visit Prediction**: Predict when specific license plates will next appear\n- **Pattern Recognition**: Analyze historical data to identify visiting patterns\n- **Batch Processing**: Handle multiple prediction requests simultaneously\n- **Model Training**: Automatic background model retraining with latest data\n\n## 📊 Management Interface\n\n### Dashboard \u0026 Monitoring\n- **Live Feed**: Real-time license plate detection updates\n- **Search \u0026 Filter**: Find specific plates by number, date, or camera\n- **Statistics View**: Plate frequency analysis and visit patterns\n- **System Logs**: Monitor application activity and troubleshoot issues\n\n### Configuration Management\n- **User Management**: Multi-user support\n- **Camera Configuration**: Set up overlay text, day/night schedules, and focus settings\n- **Alert Configuration**: Configure notification preferences and alert rules\n- **Ignore Lists**: Define plates to exclude from processing or alerts\n- **Webhook Forwarding**: Send processed data to external systems\n\n### Advanced Features\n- **Two-Factor Authentication**: Enhanced security for user accounts\n- **Data Enrichment**: Enhance plate data with additional information sources\n- **Real-time Updates**: Live system status and connection monitoring\n- **Debug Tools**: System diagnostics and scheduled job monitoring\n\n## 🚀 Quick Start\n\n### Command Line\n```bash\ndotnet ./OpenAlprWebhookProcessor.dll\n```\n\n### Docker\n```bash\ndocker run -d \\\n  --name=openalprwebhookprocessor \\\n  --net=bridge \\\n  -v /host/path/:/app/config/ \\\n  -p 3859:80 \\\n  mlapaglia/openalprwebhookprocessor\n```\n\n## 📸 Screenshots\n\n### License Plates Dashboard\n\u003cimg width=\"1299\" height=\"1080\" alt=\"image\" src=\"https://github.com/user-attachments/assets/d33508f8-e249-411b-b756-ade35ff04841\" /\u003e\n\n### Camera Configuration\n\u003cimg width=\"1876\" height=\"1078\" alt=\"image\" src=\"https://github.com/user-attachments/assets/a48fadb6-0c6d-4d6d-8fef-cc9d4ba7976f\" /\u003e\n\n### Agent Settings\n\u003cimg width=\"1544\" height=\"1192\" alt=\"image\" src=\"https://github.com/user-attachments/assets/cd29300e-9610-4328-a158-f96ea9660f11\" /\u003e\n\n## 🎥 Demo Video\n[![IMAGE ALT TEXT HERE](https://img.youtube.com/vi/GqafBPlDC7Q/0.jpg)](https://www.youtube.com/watch?v=GqafBPlDC7Q)\n\n## 📦 Docker Hub\nAvailable at: [mlapaglia/openalprwebhookprocessor](https://hub.docker.com/repository/docker/mlapaglia/openalprwebhookprocessor)\n\n## 💾 Data Storage\nThe application requires persistent storage for:\n- License plate database\n- User settings and configurations  \n- Machine learning models\n- Camera snapshots and images\n\nMount a volume to `/app/config/` to persist data between container restarts.\n\n## 🛠️ Development\n\n### Prerequisites\n- [.NET 9 SDK](https://dotnet.microsoft.com/download/dotnet/9.0)\n- [Node.js 24+](https://nodejs.org/) and npm\n- [Angular CLI](https://angular.io/cli): `npm install -g @angular/cli`\n\n### Getting Started\n\n#### Backend (ASP.NET Core)\n1. Navigate to the server project directory:\n   ```cmd\n   cd OpenAlprWebhookProcessor.Server\n   ```\n\n2. Restore dependencies:\n   ```cmd\n   dotnet restore\n   ```\n\n3. Start the backend server:\n   ```cmd\n   dotnet run\n   ```\n   \n   The backend will start at `https://localhost:5001`\n\n#### Frontend (Angular)\n1. Navigate to the client project directory:\n   ```cmd\n   cd openalprwebhookprocessor.client\n   ```\n\n2. Install dependencies:\n   ```cmd\n   npm install\n   ```\n\n3. Start the development server:\n   ```cmd\n   npm start\n   ```\n   \n   The frontend will start at `https://localhost:4200` and automatically proxy API requests to the backend.\n\n### Running Both Together\nFor the best development experience, run both the backend and frontend simultaneously:\n\n1. **Terminal 1** - Start the backend:\n   ```cmd\n   cd OpenAlprWebhookProcessor.Server\n   dotnet run\n   ```\n\n2. **Terminal 2** - Start the frontend:\n   ```cmd\n   cd openalprwebhookprocessor.client\n   npm start\n   ```\n\n3. Open your browser to `https://localhost:4200`\n\n### Running Tests\n- **Backend Tests**: `dotnet test` (from the solution root)\n- **Frontend Tests**: `npm test` (from the client directory)\n","funding_links":["https://github.com/sponsors/mlapaglia","https://www.paypal.com/donate/?business=JS5FUA7KHHX74\u0026no_recurring=0\u0026currency_code=USD"],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlapaglia%2Fopenalprwebhookprocessor","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmlapaglia%2Fopenalprwebhookprocessor","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmlapaglia%2Fopenalprwebhookprocessor/lists"}