# Техническо задание

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

### 1. Въведение

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

### 2. Общо описание на системата

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

### 3. Функционални изисквания

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

- Добавяне на нови камери с информация за локация, описание и технически параметри
- Конфигуриране на видео потоци от камерите (URL, протокол, резолюция, честота на кадрите)
- Редактиране на съществуващи камери и потоци
- Деактивиране/активиране на камери и потоци
- Визуализация на текущия видео поток от избрана камера
- Тестване на връзката с камерата и качеството на видео потока

#### 3.2. Разпознаване на регистрационни номера

- Автоматично разпознаване на регистрационни номера от видео потоци
- Запис на разпознатите номера в база данни с допълнителна информация
- Съхранение на изображение на превозното средство и изрязано изображение на номера
- Възможност за ръчна корекция на неправилно разпознати номера
- Настройка на параметрите за разпознаване (чувствителност, регион, формат на номерата)
- Статистика за успеваемостта на разпознаването по камери

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

- Добавяне на регистрационни номера в бял списък с описание и период на валидност
- Добавяне на регистрационни номера в черен списък с причина и период на валидност
- Редактиране и премахване на номера от списъците
- Импортиране на номера от CSV файл
- Експортиране на списъците в различни формати
- Автоматична проверка на разпознатите номера спрямо списъците

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

- Генериране на известия при засичане на номер от черния списък
- Конфигуриране на методи за известяване (имейл, SMS, уеб нотификации)
- Настройка на правила за известяване (кога и как да се изпращат известия)
- Лог на всички генерирани известия
- Възможност за ръчно потвърждаване на получени известия

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

- Регистрация и управление на потребителски акаунти
- Дефиниране на роли с различни нива на достъп (администратор, оператор, наблюдател)
- Задаване на права за достъп до различни функционалности на системата
- Лог на потребителските действия
- Управление на сесии и автентикация

#### 3.6. Търсене и справки

- Търсене на регистрационни номера в базата данни по различни критерии
- Филтриране по дата, час, камера, списък (бял/черен)
- Преглед на историята на засичанията за конкретен номер
- Генериране на справки за определен период
- Експортиране на справки в PDF и Excel формат

#### 3.7. Интеграция с външни системи

- API за интеграция с други системи
- Възможност за импортиране на данни от външни източници
- Експортиране на данни към външни системи

### 4. Нефункционални изисквания

#### 4.1. Технически изисквания

- Сървърна част: PHP 8.0 или по-нова версия
- База данни: MySQL 8.0 или по-нова версия
- Уеб сървър: Apache или Nginx
- Поддръжка на HTTPS протокол
- Responsive дизайн за достъп от различни устройства
- Съвместимост с основните уеб браузъри (Chrome, Firefox, Safari, Edge)

#### 4.2. Изисквания за производителност

- Обработка на видео потоци в реално време
- Бързо търсене в базата данни
- Оптимизирано съхранение на изображения
- Ефективно използване на системните ресурси
- Възможност за скалиране при увеличаване на броя камери

#### 4.3. Изисквания за сигурност

- Защита на данните чрез криптиране
- Сигурна автентикация на потребителите
- Защита срещу SQL инжекции и XSS атаки
- Регулярно архивиране на базата данни
- Лог на всички системни събития и грешки

#### 4.4. Изисквания за надеждност

- Непрекъсната работа 24/7
- Автоматично възстановяване след срив
- Мониторинг на системните ресурси
- Известяване при проблеми с камерите или видео потоците
- Регулярна проверка на целостта на базата данни

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

#### 5.1. Общ преглед

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

- Модул за управление на камери и видео потоци
- Модул за разпознаване на регистрационни номера
- Модул за управление на бял и черен списък
- Модул за известяване
- Модул за управление на потребители и права
- Модул за търсене и справки
- API модул за интеграция с външни системи

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

За разпознаване на регистрационни номера ще бъде използвана библиотека с отворен код OpenALPR (Automatic License Plate Recognition) или подобна. Модулът ще бъде интегриран чрез PHP обвивка, която ще комуникира с основната библиотека. Алтернативно, може да се използва външна услуга за разпознаване на номера чрез API.

#### 5.3. База данни

Базата данни ще бъде проектирана с използване на MySQL и ще съдържа следните основни таблици:

- Камери (cameras)
- Видео потоци (streams)
- Разпознати номера (recognitions)
- Бял списък (whitelist)
- Черен списък (blacklist)
- Потребители (users)
- Роли и права (roles, permissions)
- Известия (notifications)
- Системен лог (system_log)

#### 5.4. Потребителски интерфейс

Потребителският интерфейс ще бъде разработен с използване на HTML5, CSS3 и JavaScript, като ще се използват съвременни фреймуърки като Bootstrap за responsive дизайн. Интерфейсът ще бъде интуитивен и лесен за използване, с ясна навигация и информативни съобщения.

### 6. Технологичен стек

- Сървърна част: PHP 8.0+, Laravel/Symfony фреймуърк
- База данни: MySQL 8.0+
- Уеб сървър: Apache/Nginx
- Клиентска част: HTML5, CSS3, JavaScript, Bootstrap
- Библиотека за разпознаване на номера: OpenALPR или подобна
- Обработка на изображения: GD/ImageMagick
- Експорт на данни: FPDF/TCPDF (PDF), PhpSpreadsheet (Excel)
- Автентикация: JWT/OAuth

### 7. Етапи на разработка

#### 7.1. Проектиране на базата данни

- Създаване на схема на базата данни
- Дефиниране на таблици, полета и връзки между тях
- Оптимизация на структурата за бързо търсене

#### 7.2. Разработка на основните модули

- Модул за управление на камери и видео потоци
- Модул за разпознаване на регистрационни номера
- Модул за управление на бял и черен списък
- Модул за известяване
- Модул за управление на потребители и права
- Модул за търсене и справки

#### 7.3. Разработка на потребителския интерфейс

- Дизайн на основните екрани
- Имплементация на responsive дизайн
- Разработка на интерактивни елементи

#### 7.4. Интеграция и тестване

- Интеграция на всички модули
- Функционално тестване
- Тестване на производителността
- Тестване на сигурността

#### 7.5. Документация и внедряване

- Изготвяне на потребителска документация
- Изготвяне на техническа документация
- Внедряване на системата
- Обучение на потребителите

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

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