Skip to content

igornevertired/LPR-WebAI

Repository files navigation

License Plate Recognition Web Service

Веб-сервис для распознавания номерных знаков на основе ML-модели, интегрированный в высоконагруженную продуктивную систему.

Описание функционирования сервиса

Основное назначение

Сервис представляет собой REST API для обработки данных о распознавании номерных знаков с камер видеонаблюдения. Он принимает данные от камер и нейронной сети, обрабатывает их через ML-модель и возвращает предсказания с оценкой уверенности.

Архитектура и особенности реализации

1. FastAPI Framework

  • Выбран для высокой производительности и асинхронной обработки
  • Автоматическая генерация OpenAPI документации
  • Встроенная валидация данных через Pydantic
  • Поддержка асинхронных операций для высокой пропускной способности

2. Оптимизация для высоких нагрузок

  • GZip сжатие для экономии трафика
  • CORS middleware для кросс-доменных запросов
  • Асинхронная обработка запросов
  • Пакетная обработка до 1000 запросов за раз
  • Кэширование модели для избежания повторной загрузки

3. ML-модель интеграция

  • Использование CatBoost классификатора (micromodel.cbm)
  • Функция pick_regno из оригинального ML-скрипта
  • Автоматическая проверка доступности модели при запуске
  • Обработка ошибок загрузки модели

4. Валидация и безопасность

  • Строгая валидация входных данных
  • Проверка диапазонов значений (scores, direction)
  • Обработка ошибок с детальными сообщениями
  • Логирование всех операций

5. Мониторинг и диагностика

  • Endpoint /health для проверки состояния
  • Endpoint /model/info для информации о модели
  • Детальное логирование времени обработки
  • Метрики успешности пакетной обработки

API Endpoints

Основные эндпоинты

  • GET / - Информация о сервисе
  • GET /health - Проверка состояния сервиса
  • GET /model/info - Информация о загруженной ML-модели
  • POST /predict - Обработка одиночного запроса
  • POST /batch-predict - Пакетная обработка до 1000 запросов
  • POST /test-data - Тестирование с данными из CSV файла

Структура запроса

{
  "camera_regno": "А123БВ77",
  "nn_regno": "А123БВ77", 
  "camera_score": 85.5,
  "nn_score": 0.92,
  "nn_sym_scores": "[0.9,0.8,0.95,0.87,0.91,0.89]",
  "nn_len_scores": "[0.88,0.92]",
  "camera_type": "LPR",
  "camera_class": "HIGHWAY",
  "time_check": "2024-01-15 14:30:00",
  "direction": 1
}

Структура ответа

{
  "prediction": [0.1, 0.2, 0.7],
  "confidence": 0.7,
  "processing_time_ms": 45.2
}

Установка и запуск

Предварительные требования

  • Python 3.10+
  • Poetry (менеджер зависимостей)

Установка зависимостей

# Установка Poetry (если не установлен)
pip install poetry

Запуск сервиса

# Активация виртуального окружения
poetry shell

# Установка зависимостей проекта
poetry install --sync

# Запуск сервиса
python src/main.py

Сервис будет доступен по адресу: http://localhost:8000

Альтернативный запуск через uvicorn

poetry run uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload

Тестирование

Автоматические тесты

# Запуск всех тестов
poetry run pytest


### Ручное тестирование

1. **Проверка состояния сервиса:**
   ```bash
   curl http://localhost:8000/health
  1. Тестирование с тестовыми данными:

    curl -X POST http://localhost:8000/test-data
  2. Одиночный запрос:

    curl -X POST http://localhost:8000/predict \
      -H "Content-Type: application/json" \
      -d '{
        "camera_regno": "А123БВ77",
        "nn_regno": "А123БВ77",
        "camera_score": 85.5,
        "nn_score": 0.92,
        "nn_sym_scores": "[0.9,0.8,0.95,0.87,0.91,0.89]",
        "nn_len_scores": "[0.88,0.92]",
        "camera_type": "LPR",
        "camera_class": "HIGHWAY",
        "time_check": "2024-01-15 14:30:00",
        "direction": 1
      }'

Swagger документация

После запуска сервиса доступна интерактивная документация:

  • Swagger UI: http://localhost:8000/docs
  • ReDoc: http://localhost:8000/redoc

Производительность

Ожидаемые характеристики

  • Пропускная способность: 500+ запросов в секунду
  • Время отклика: < 100ms для одиночных запросов
  • Пакетная обработка: до 1000 запросов за раз
  • Память: ~500MB (включая ML-модель)

Оптимизации

  • Асинхронная обработка запросов
  • Кэширование ML-модели в памяти
  • GZip сжатие ответов
  • Валидация данных на уровне Pydantic
  • Эффективная обработка пакетных запросов

Структура проекта

LPR-WebAI/
├── src/
│   ├── main.py              # Основной FastAPI сервис
│   ├── models/
│   │   └── models.py        # Pydantic модели данных
│   ├── ml_scripts/
│   │   └── pick_regno.py    # ML-скрипт с функцией pick_regno
│   └── data/
│       ├── micromodel.cbm   # ML-модель CatBoost
│       └── test_data.csv    # Тестовые данные
├── tests/                   # Тесты
├── pyproject.toml          # Зависимости Poetry
└── README.md               # Документация

Мониторинг и логирование

Логирование

  • Уровень: INFO
  • Формат: timestamp - name - level - message
  • Логирование времени обработки каждого запроса
  • Отслеживание ошибок и исключений

Метрики

  • Время обработки запросов
  • Количество успешных/неуспешных запросов
  • Статус загрузки ML-модели
  • Общее время обработки пакетных запросов

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages