Самая большая сложность любого проекта, связанного с технологиями компьютерного зрения для обнаружения человека в реальном времени, – это минимизировать ложные срабатывания и добиться высокой точности распознавания. Расскажем о нашем опыте преодоления этих проблем.
Изначально мы использовали простые алгоритмы машинного обучения OpenCV для дифференциации поз – человек идет, лежит или падает. Реализация
скрытых моделей Маркова (Hidden Markov Model, или HMM) позволила нам предсказывать падение на основе предыдущего поведения человека. Система обнаруживала контуры тела, определяла его центр масс и анализировала отклонения от этих данных кадр за кадром. Чем более явными были отклонения, тем выше вероятность падений.
Рабочий на первый взгляд подход оказался неэффективным – система фиксировала падение, когда человек садился или просто наклонялся вперед. Кроме того, обнаружение контуров зависело от освещения: система не могла распознавать людей с помощью компьютерного зрения при слабом освещении. Количество ложных срабатываний было слишком велико, поэтому нам пришлось отказаться от данного подхода, несмотря на его невысокую стоимость и простоту.
Для большей точности в распознавании человеческого тела мы решили построить нейронные сети на основе биометрических параметров и биомеханических данных. Для обучения моделей мы сгенерировали синтетические наборы данных с помощью сервисов моделирования.
Unity,
Gazebo и другие платформы симуляторов предоставляют тестовые среды, которые упрощают и ускоряют процесс обучения.
В закрытых помещениях обнаружить человека с помощью компьютерного зрения сложнее, чем на открытом пространстве. Находящиеся в доме предметы мебели могут помешать камере захватить все тело, и, следовательно, система не получит полные биометрические данные. Попробовав разные подходы, мы объединили нейронные сети с деревьями решений – классическими алгоритмами машинного обучения, входящими в инструменты обнаружения движения библиотеки OpenCV. Эти алгоритмы обладают существенными преимуществами: они быстрые и простые, могут обучаться на небольших объемах данных или неполных данных.