Проект представляет собой систему компьютерного зрения для анализа аудитории в режиме реального времени. Система обрабатывает видеопоток, автоматически детектирует и отслеживает людей, классифицирует их деятельность на основе положения головы на три класса:
- listening — сидит и слушает (лицо направлено прямо)
- talking — разговаривает с собеседником (голова повёрнута вбок)
- phone — смотрит в телефон (голова имеет наклон вперёд)
Дополнительно реализована функция идентификации личности через сравнение с предварительно собранной базой лиц.
- Высокая скорость обработки (близкая к 30 FPS)
- Стабильное отслеживание (tracking) — присвоение уникального ID каждому человеку и поддержание его между кадрами
- Классификация деятельности с использованием машинного обучения на основе ключевых точек лица
- Идентификация личности через базу лиц
- Интерактивный интерфейс с возможностью калибровки и управления в реальном времени
opencv-python— обработка видеопотокаnumpy— численные вычисленияscikit-learn— машинное обучениеmatplotlib— визуализация результатовinsightface— детектирование лиц, извлечение ключевых точек и эмбеддингов
Сравнены 7 алгоритмов классификации:
| Метод | Точность | F1-score |
|---|---|---|
| Random Forest | 0.9936 | 0.9936 |
| Gradient Boosting | 0.9928 | 0.9928 |
| K-Nearest Neighbors | 0.9617 | 0.9618 |
| Neural Network (MLP) | 0.9617 | 0.9617 |
| AdaBoost | 0.9354 | 0.9354 |
| Decision Tree | 0.9313 | 0.9312 |
| Support Vector Machine | 0.9258 | 0.9261 |
Random Forest выбран основным методом благодаря оптимальному балансу между скоростью предсказания, точностью и устойчивостью к переобучению.
Входное видео
↓
Детектирование лиц (InsightFace)
├→ Ключевые точки лица (5 точек)
├→ Эмбеддинги (512-мерный вектор)
↓
Расчёт геометрических признаков (19 признаков)
├→ Нормализованные координаты точек
├→ Углы поворота головы (yaw, pitch, roll)
└→ Относительные расстояния между точками
↓
├─────────────┐
↓ ↓
Классификация Идентификация
позы (Random личности
Forest) (косинусное сходство)
↓ ↓
└──────┬──────┘
↓
Визуализация результатов
- Режим калибровки — сбор данных для обучения под конкретный ракурс камеры
- Автоматический режим — классификация в реальном времени
- Идентификация лиц — распознавание по базе фотографий с порогом сходства 0.6
- Автоматическое добавление эмбеддингов — улучшение распознавания при сходстве вблизи пороговой зоны
- Трекинг — сохранение ID между кадрами даже при временных пропажах детекции
- Визуализация — окно с видеоаннотациями и информационная панель со статистикой
Система показывает высокую точность при различных условиях:
- Освещение: от 0.86 (низкое) до 0.98 (контрастный свет)
- Дальность: от 0.86 (далеко) до 0.99 (близко)
- Угол обзора: от 0.89 (частичное перекрытие) до 0.97 (фронтальный)
- Движения головы: от 0.77 (резкий поворот) до 0.97 (без движений)
ClassificationPose/
├── latest/
│ ├── InsightFace.py # Основной скрипт: детектирование, трекинг, классификация
│ ├── tren.py # Обучение и сравнение методов классификации
│ ├── raw_calibration_data.pkl # Данные калибровки
│ ├── trained_data.pkl # Обученная модель
│ ├── faces_database/ # База лиц для идентификации
│ ├── identified_faces/ # Распознанные лица
│ └── video/ # Демонстрационное видео
├── outdated/ # Устаревшие версии скриптов
├── report.txt # Отчёт по проекту
└── requirements.txt # Зависимости
# Установка зависимостей
pip install -r requirements.txt
# Запуск системы
cd latest
python InsightFace.py| Клавиша | Действие |
|---|---|
c |
Переключение режима калибровка/автоматический |
r |
Очистка данных калибровки |
a |
Добавить лицо в базу |
d |
Показать базу лиц |
q |
Выход |
Разработано в рамках проекта:
- База данных лиц
- Трекинг лиц
- Идентификация в реальном времени
- Классификация активности
- Калибровка и обучение
- Графический интерфейс
- Управление системой в реальном времени
- Оптимизация производительности
Использовано из библиотек:
- Детектирование лиц (InsightFace)
- Определение bounding box
- Извлечение ключевых точек (5 точек лица)
- Генерация эмбеддингов (512-мерный вектор)
В ходе реализации проекта создан прототип системы прокторинга, представляющий собой конвейер обработки видеопотока с использованием нейросетевых технологий и инструментов Python, OpenCV, scikit-learn. Система обеспечивает высокую точность классификации и работает в режиме, близком к реальному времени.