Задача: создать систему «умного» видеонаблюдения для медицинских учреждений за счет анализа фиксируемых изображений и событий.
Подзадача: уменьшить нагрузку на серверное оборудование, на которое передается с камер поток событий для анализа.
Решение: обеспечить постоянный анализ событий и фильтрацию видеопотока на уровне камер при помощи нейросетей.
Необходимо было наладить непрерывный анализ изображений и событий, фиксируемых камерами, чтобы в режиме реального времени автоматически пропускать незначительные события, эффективно анализировать примечательные и своевременно реагировать на события, требующие вмешательства. (К примеру, видеоанализ позволяет системе мониторинга определить, что в том или ином помещении находится постороннее лицо и нужно уведомить службу безопасности, или что одному из пациентов стало плохо и необходимо известить дежурную медсестру.)
Для этого нужно было при помощи инструментов машинного обучения научить нейросети распознавать образы, фиксировать движение и определять направление, сверять распознаваемые образы по базам данных и анализировать полученную информацию.
Наша команда обеспечила в данном проекте всё, кроме создания нейросетей. Для фильтрации потока событий с камер, поступающих на сервер, мы, в зависимости от технических характеристик установленных видеокамер, использовали один из трех подходов:
а) Каждая видеокамера напрямую подключается к серверному оборудованию и отправляет на него нефильтрованный видеопоток.
б) Каждая группа камер подключается к локальному серверу-медиатору с установленной на него нейросетью, которая анализирует видеопотоки с нескольких камер, отсекая незначительные события, прежде чем передать данные на центральный сервер. Видеопоток при этом передается целиком, но фильтруется поток событий, которые приходится обрабатывать центральному серверу.
в) Каждая видеокамера оснащается собственной нейросетью с кастомным кодом. Нейросеть анализирует входящий видеопоток в соответствии с динамически получаемыми правилами и отфильтровывает незначительные события, отправляя на сервер сокращенный поток данных.
При помощи алгоритмов машинного обучения мы написали для нейросетей задачи по фильтрации потока событий, построили ML-конвейер для обучения нейросетей и отдельный конвейер — для их переобучения. Специально для данной задачи мы также разработали кастомный инференс, способный работать на АРМ-процессорах малого размера — таких, как процессор видеокамеры.
Созданные с нашим участием системы видеоанализа сегодня успешно применяются в целом ряде медучреждений в разных странах.
Использованный техстек: Python, Go, C++, CUDA, Tensorflow, PyTorch, TensorRT