# Система за разпознаване на автомобилни номера от видеокамера

## Въведение

Настоящата документация описва системата за разпознаване на автомобилни номера от видеокамера, разработена на PHP и MySQL. Системата предоставя възможност за добавяне на нови камери и видео потоци, създаване на бял и черен списък, оповестяване при засичане на автомобил от черния списък, управление на потребители, експорт на разпознати регистрационни номера в PDF и Excel формат, както и възможност за търсене в базата данни.

## Архитектура на системата

Системата е разработена на модулен принцип, като всеки модул отговаря за определена функционалност:

1. **CameraManager** - управление на камери и видео потоци
2. **ListManager** - управление на бял и черен списък
3. **UserManager** - управление на потребители и права
4. **NotificationManager** - управление на известия
5. **SearchManager** - търсене и филтриране на разпознати номера
6. **ExportManager** - експорт на данни в PDF и Excel формат

## Структура на базата данни

Базата данни се състои от следните основни таблици:

- **cameras** - информация за камерите
- **streams** - информация за видео потоците
- **whitelist** - бял списък с регистрационни номера
- **blacklist** - черен списък с регистрационни номера
- **users** - потребители на системата
- **roles** - роли в системата
- **user_roles** - връзка между потребители и роли
- **permissions** - права в системата
- **role_permissions** - връзка между роли и права
- **recognitions** - разпознати регистрационни номера
- **notifications** - известия
- **user_notifications** - връзка между потребители и известия
- **notification_settings** - настройки за известяване
- **system_log** - системен лог

Детайлна структура на базата данни е описана в файла `database_structure.sql`.

## Основни функционалности

### 1. Управление на камери и видео потоци

Модулът `CameraManager` предоставя следните функционалности:

- Добавяне на нова камера
- Редактиране на съществуваща камера
- Изтриване на камера
- Вземане на информация за камера
- Вземане на списък с камери
- Добавяне на нов видео поток към камера
- Редактиране на съществуващ видео поток
- Изтриване на видео поток
- Вземане на информация за видео поток
- Вземане на списък с потоци за дадена камера
- Вземане на всички активни потоци за обработка

### 2. Управление на бял и черен списък

Модулът `ListManager` предоставя следните функционалности:

- Добавяне на номер в белия списък
- Обновяване на запис в белия списък
- Премахване на номер от белия списък
- Проверка дали номер е в белия списък
- Вземане на запис от белия списък
- Вземане на списък с номера от белия списък
- Импортиране на номера в белия списък от CSV файл
- Добавяне на номер в черния списък
- Обновяване на запис в черния списък
- Премахване на номер от черния списък
- Проверка дали номер е в черния списък
- Вземане на запис от черния списък
- Вземане на списък с номера от черния списък
- Импортиране на номера в черния списък от CSV файл

### 3. Управление на потребители и права

Модулът `UserManager` предоставя следните функционалности:

- Добавяне на нов потребител
- Редактиране на съществуващ потребител
- Изтриване на потребител
- Вземане на информация за потребител
- Вземане на списък с потребители
- Проверка на потребителски данни за вход
- Промяна на парола на потребител
- Възстановяване на забравена парола
- Вземане на всички роли
- Вземане на ролите на потребител
- Задаване на роля на потребител
- Премахване на роля от потребител
- Обновяване на ролите на потребител
- Проверка дали потребител има определена роля
- Проверка дали потребител има определено право
- Създаване на настройки за известяване за потребител
- Обновяване на настройки за известяване за потребител
- Вземане на настройки за известяване за потребител
- Записване на действие в системния лог
- Вземане на лог за потребител

### 4. Управление на известия

Модулът `NotificationManager` предоставя следните функционалности:

- Създаване на ново известие
- Създаване на известие за засичане на номер от черния списък
- Маркиране на известие като прочетено за потребител
- Маркиране на всички известия като прочетени за потребител
- Изтриване на известие
- Вземане на известие по ID
- Вземане на известия за потребител
- Вземане на брой непрочетени известия за потребител
- Вземане на общия брой известия за потребител според филтри
- Изпращане на имейл известие
- Изпращане на SMS известие

### 5. Търсене и филтриране на разпознати номера

Модулът `SearchManager` предоставя следните функционалности:

- Търсене на разпознати регистрационни номера по различни критерии
- Броене на разпознати регистрационни номера по различни критерии
- Вземане на детайли за разпознат регистрационен номер
- Вземане на история на засичанията за конкретен регистрационен номер
- Вземане на статистика за разпознавания по камери
- Вземане на статистика за разпознавания по дни
- Вземане на статистика за разпознавания по часове
- Коригиране на грешно разпознат регистрационен номер

### 6. Експорт на данни в PDF и Excel формат

Модулът `ExportManager` предоставя следните функционалности:

- Експорт на разпознати регистрационни номера в PDF формат
- Експорт на разпознати регистрационни номера в Excel формат
- Експорт на бял списък в PDF формат
- Експорт на черен списък в PDF формат
- Експорт на статистика за разпознавания по камери в PDF формат

## Интеграция на модул за разпознаване на регистрационни номера

Системата поддържа интеграция с различни библиотеки и услуги за разпознаване на регистрационни номера. Подробна информация за интеграцията е описана в файла `license_plate_recognition_module.md`.

## Примерни сценарии за интеграция

Файлът `integration_examples.php` съдържа примерни сценарии за интеграция и използване на системата, включително:

1. Инициализация на системата и създаване на връзка с базата данни
2. Управление на камери и видео потоци
3. Управление на бял и черен списък
4. Управление на потребители и права
5. Управление на известия
6. Търсене и филтриране на разпознати номера
7. Експорт на данни в PDF и Excel формат
8. Интегриран сценарий - Обработка на разпознат номер

## Инсталация и настройка

### Системни изисквания

- PHP 7.4 или по-нова версия
- MySQL 5.7 или по-нова версия
- Разширения за PHP: PDO, PDO_MySQL, GD, mbstring
- Библиотеки за експорт: FPDF, PhpSpreadsheet

### Стъпки за инсталация

1. Създайте база данни и импортирайте структурата от файла `database_structure.sql`
2. Конфигурирайте връзката с базата данни в конфигурационния файл
3. Инсталирайте необходимите библиотеки чрез Composer:
   ```
   composer require fpdf/fpdf
   composer require phpoffice/phpspreadsheet
   ```
4. Конфигурирайте директориите за съхранение на изображения и експортирани файлове
5. Настройте правата за достъп до директориите
6. Създайте първоначален администраторски акаунт

## Сигурност

Системата включва следните мерки за сигурност:

- Хеширане на пароли с използване на PHP функцията `password_hash()`
- Защита срещу SQL инжекции чрез използване на подготвени заявки (prepared statements)
- Система за роли и права за контрол на достъпа
- Логване на всички действия в системния лог
- Валидация на входните данни

## Оптимизация

За оптимална производителност на системата се препоръчва:

- Индексиране на ключови полета в базата данни
- Кеширане на често използвани заявки
- Оптимизиране на обработката на видео потоци
- Периодично архивиране на стари данни
- Мониторинг на производителността на системата

## Заключение

Системата за разпознаване на автомобилни номера от видеокамера предоставя пълен набор от функционалности за управление на камери, видео потоци, бял и черен списък, потребители, известия, търсене и експорт на данни. Модулната архитектура позволява лесно разширяване и адаптиране на системата според конкретните нужди.

За допълнителна информация и примери за използване, моля, вижте файловете с примерен код и документация.
