Skip to content

timkazy/ClassificationPose

Repository files navigation

Система прокторинга: классификация деятельности по положению головы

Описание проекта

Проект представляет собой систему компьютерного зрения для анализа аудитории в режиме реального времени. Система обрабатывает видеопоток, автоматически детектирует и отслеживает людей, классифицирует их деятельность на основе положения головы на три класса:

  • 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. Система обеспечивает высокую точность классификации и работает в режиме, близком к реальному времени.

About

Real-time proctoring system: head pose classification & face identification. Stack: Python, OpenCV, InsightFace, Scikit-learn. 99% accuracy, 30 FPS.

Topics

Resources

License

Stars

Watchers

Forks

Contributors

Languages