- Введение
- Проблема
- Анализ области
- Описание предлагаемого решения
- Высокоуровневый план реализации решения
- Описание отдельных шагов плана
- Макет интерфейса приложения
В ресторане "Вега" университета "Сириус" часто образуются длинные очереди в периоды наибольшей посещаемости. Это приводит к серьезным задержкам для посетителей, включая студентов, преподавателей и гостей университета. Такие задержки могут существенно нарушить планы и расписание занятий или встреч, уменьшая доступное время на работу и учебу.
Проблема неэффективного расходования времени в ресторане "Вега" университета "Сириус" обусловлена большим количеством посетителей, особенно в периоды пиковой загруженности, когда число людей в очереди превышает 50 человек. В связи с увеличением потока клиентов, время ожидания в очереди на кассе ресторана может возрасти до 20-30 минут, что вызывает значительный дискомфорт и неприятные эмоции у посетителей. Чтобы обеспечить комфортное и приятное посещение ресторана, необходимо эффективно управлять данной ситуацией.
Критерий | YOLO | SSD | Faster R-CNN | Mask R-CNN |
---|---|---|---|---|
Скорость | Очень высокая | Высокая | Средняя | Низкая |
Точность | Средняя | Средняя | Высокая | Высокая |
Обнаружение | Объекты и их местоположение в одном проходе | Объекты и их местоположение в одном проходе | Обнаружение объектов и их границ | Обнаружение объектов, их границ и сегментация |
Использует | Сверточные нейронные сети (CNN) | Сверточные нейронные сети (CNN) | Сверточные нейронные сети (CNN) | Сверточные нейронные сети (CNN) |
Применение | Реальное время и задачи, где важна скорость обнаружения | Обнаружение в реальном времени и высокая скорость | Основные задачи компьютерного зрения, где важна точность | Сегментация и обнаружение объектов в изображениях |
Также мы проанализировали какой минимальный набор технических средств для системы видеоанализа понадобится и выяснили, что нам понадобится:
1. Камеры наблюдения: Для обработки полученного видеопотока и запуска моделей машинного обучения необходимо наличие серверного оборудования
2. Серверное оборудование: Для обучения и выполнения моделей машинного обучения также требуются вычислительные ресурсы. Это может включать как локальные компьютеры с высокой производительностью, так и облачные вычислительные ресурсы
3. Вычислительные ресурсы: Для обучения и выполнения моделей машинного обучения также требуются вычислительные ресурсы. Это может включать как локальные компьютеры с высокой производительностью, так и облачные вычислительные ресурсы
Мы планируем создать две взаимодополняющие системы, которые существенно улучшат уровень обслуживания клиентов и уменьшат время ожидания на кассе. Первая система будет в режиме реального времени предоставлять актуальную информацию о загруженности заведения, что позволит посетителям рационально планировать свое время и избегать очередей. Вторая система оптимизирует распределение посетителей по очередям. В совокупности, эти системы предоставят посетителям полезную информацию и помогут им сделать более осознанный выбор, сокращая тем самым время ожидания.
Первая система автоматически подсчитывает количество посетителей в ресторане и на этой основе определяет уровень его загруженности. Это крайне важно для потенциальных посетителей заведения, позволяя им оценить текущую заполненность заведения перед принятием решения о посещении. При создании данной системы мы будем использовать видеокамеру, размещенную на входе и выходе ресторана, для непрерывного считывания видеопотока в реальном времени. Это позволит непрерывно отслеживать количество людей, входящих и выходящих из заведения, и определять текущую загруженность ресторана.
Вторая система автоматически отслеживает людей, находящихся в очереди, и вычисляет процент загруженности каждой из очередей. Затем система визуализирует данные, чтобы показать посетителям, какая очередь является наиболее выгодной с точки зрения времени ожидания. Для этой системы мы установим камеры над очередями для записи видеопотока. Система будет использовать маски для выделения областей с очередями на видеокадрах и подсчета людей. Она также определит менее загруженные очереди и предложит посетителям присоединиться к ним.
-
Формирование датасета: Использование общедоступных датасетов (например, COCO). Также возможно создание собственного путем сбора изображений людей и использования инструментов для разметки данных (Roboflow).
-
Обучение модели: Использование архитектуры YOLOv8n для обучения модели обнаружения людей на выбранном датасете
-
Тестирование модели: Запуск обученной модели на видеопотоке для оценки ее производительности и точности
-
Создание алгоритма для первой системы: Алгоритм должен подсчитывать количество посетителей, входящих и выходящих из заведения
-
Создание алгоритма для второй системы: Алгоритм будет отслеживать людей в очередях и определять загруженность каждой из них
Мы планируем использовать Python, потому что это предпочтительный язык программирования для многих нейронных сетей. Python обладает поддержкой TensorFlow, PyTorch и имеет читаемый синтаксис. Также он широко используется в сообществе разработчиков.
Для создания интерфейса мы воспользуемся языком разметки и стилей HTML, CSS, а также языком программирования JavaScript.
Для задач по обучению модели планируется использовать API Ultralytics, которые по умолчанию поставляются с пакетом YOLOv8. API основано на фреймворке PyTorch, который часто используется для создания нейронных сетей.
Для обучения модели для детекции мы использовали 67 тысяч извлечённых изображений с людьми из набора данных COCO2017.
Из них 64 тысячи изображений составили обучающий набор, 3 тысячи - валидационный.
Извлеченные данные были преобразованы в формат, совместимый с архитектурой YOLO, с помощью API Ultralytics. Также были вырезаны все классы, кроме "person".
Общее количество людей в обучающем наборе данных
Обучение модели проводилось на облачной платформе Kaggle в течение 65 эпох. К концу обучения были достигнуты следующие результаты:
- Точность (Precision): 0.82
- Полнота (Recall): 0.65
- Средняя точность (mAP@0.5): 0.76
- Средняя точность (mAP@0.5:0.95): 0.53
Сейчас мы находимся в процессе тестирования обученной модели на видеопотоке с целью оценки её производительности и точности. Наша цель - достичь максимальной скорости работы и точности выявления объектов на видео.
Обученная нами модель | Предобученная YOLOv8n |
---|---|
![]() |
![]() |
Как можно заметить - наша модель лучше детектирует людей при одинаковой скорости работы.
После определения числа людей, которые находятся в ресторане, можно определить процент нагруженности ресторана. Определение процента загруженности ресторана основывается на текущем количестве посетителей. Используемая формула: (текущее количество посетителей / максимальная вместимость ресторана) * 100. Кроме того, мы обновляем данные о загруженности в режиме реального времени , предоставляя гостям информацию о текущей и прогнозируемой загруженности на ближайшее время
Пример работы первой системы:
Наша система анализирует видеопоток с камер над очередями, обнаруживая людей в них и выделяя каждого человека. Мы отслеживаем перемещение объектов и точно определяем количество людей в каждой очереди, а также собираем данные о времени ожидания посетителей. Это позволяет нам анализировать эффективность работы очередей и выявлять очередь с наибольшим временем ожидания. Сравнив загруженность очередей, мы предоставляем пользователю рекомендации о том, в какую очередь лучше встать
Example_.online-video-cutter.com.mp4
Для разработки интерфейса мы будем использовать язык разметки и стилей HTML, CSS а также язык программирования JavaScript
Для создания макета интерфейса мы воспользуемся популярным приложением для создания дизайна - Figma
![Interface](https://private-user-images.githubusercontent.com/104260621/317993678-23de4b4d-715a-46d3-9dfb-ebdc18eddb3c.jpg?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3Mzg5NDM2NTQsIm5iZiI6MTczODk0MzM1NCwicGF0aCI6Ii8xMDQyNjA2MjEvMzE3OTkzNjc4LTIzZGU0YjRkLTcxNWEtNDZkMy05ZGZiLWViZGMxOGVkZGIzYy5qcGc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMjA3JTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDIwN1QxNTQ5MTRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT01NDMxNjdhZTI4NmVmMGM5YWQ0YjY4OWZlYTgwM2IwOTc0NGRkMGFkMjU2MDk4MGYzNmEyZDc4Y2ZmOTUyY2IyJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.4B-7kUJlUy_q0xlTHVHIBtuGJRuvHovGkqMsrIgWqbQ)
В интерфейсе имеется:
-
Количество людей в ресторане
-
Общая нагрузка ресторана в данный момент времени
-
Цветовая визуализация загруженности каждой очереди. При нажатии показывается время ожидания и количество людей, стоящих в ней
-
Пять цветовых тем, включая версии для слабовидящих людей: https://figma.to/d5cc
На первом этапе нашего проекта мы завершили обучение модели по обнаружению людей на изображениях. Для этого мы выбрали архитектуру Yolo8n и воспользовались библиотекой Utralytics
Пример обнаружения людей при помощи нашей модели:
Нами были проанализированы предоставленные видеопотоки, после чего мы обнаружили, что можно находить людей, которые стоят в очередях, при помощи разделения изображения на области в и вне очереди
Теперь нам не нужно дополнительно обучать модель для этого на фотографиях
Для классификации мы предлагаем 3 класса:
- Люди, находящиеся в очереди
- Люди, занимающие места за столами
- Люди, не относящиеся ни к первой, ни ко второй категории
Разработанная нами система разделяет помещение на 2 части: очереди и обеденную зону
После чего она обнаруживает на этих частях людей и определеяет, где стоит этот человек (находящиеся в очереди/занимающие места за столами) Далее, идет вывод информации по количеству людей
Ссылка на демонстрацию работы системы: https://disk.yandex.ru/d/baRq8MeyGvizLQ