Веб-сервис для распознавания номерных знаков на основе ML-модели, интегрированный в высоконагруженную продуктивную систему.
Сервис представляет собой REST API для обработки данных о распознавании номерных знаков с камер видеонаблюдения. Он принимает данные от камер и нейронной сети, обрабатывает их через ML-модель и возвращает предсказания с оценкой уверенности.
- Выбран для высокой производительности и асинхронной обработки
- Автоматическая генерация OpenAPI документации
- Встроенная валидация данных через Pydantic
- Поддержка асинхронных операций для высокой пропускной способности
- GZip сжатие для экономии трафика
- CORS middleware для кросс-доменных запросов
- Асинхронная обработка запросов
- Пакетная обработка до 1000 запросов за раз
- Кэширование модели для избежания повторной загрузки
- Использование CatBoost классификатора (
micromodel.cbm) - Функция
pick_regnoиз оригинального ML-скрипта - Автоматическая проверка доступности модели при запуске
- Обработка ошибок загрузки модели
- Строгая валидация входных данных
- Проверка диапазонов значений (scores, direction)
- Обработка ошибок с детальными сообщениями
- Логирование всех операций
- Endpoint
/healthдля проверки состояния - Endpoint
/model/infoдля информации о модели - Детальное логирование времени обработки
- Метрики успешности пакетной обработки
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
poetry run uvicorn src.main:app --host 0.0.0.0 --port 8000 --reload# Запуск всех тестов
poetry run pytest
### Ручное тестирование
1. **Проверка состояния сервиса:**
```bash
curl http://localhost:8000/health-
Тестирование с тестовыми данными:
curl -X POST http://localhost:8000/test-data
-
Одиночный запрос:
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 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-модели
- Общее время обработки пакетных запросов