Давайте знакомиться
Наша команда занимается разработкой интеллектуального ПО для систем IP-видеонаблюдения. За 9 лет существования мы создали десятки функций и модулей видеоанализа, столкнулись с сотней проблем и одержали неменьше побед. В своем блоге Macroscop мы расскажем о части из них, поделимся своим видением процесса разработки и раскроем некоторые свои технологии.
«Ближе к делу»
Несколько лет назад мы определили низкую популярность одной из наших функций — функции интерактивного поиска,- по тому, что пользователи не обращались в компанию с вопросами или проблема в работе с ней. Когда телефон техподдержки молчит – это дурной знак для разработчиков.
C модулем подсчета посетителей было все наоборот. Пользователи не просто покупали и устанавливали его, они им реально пользовались! И поэтому регулярно звонили с вопросами в техподдержку, писали свои пожелания, рассказывали о нестандартных способах использования и, конечно, делились сложностями в работе. Точность подсчета была высока (более 92%), но достичь ее можно было при корректной установке камеры, обеспечении хороших условий съемки (отсутствии засветки, бликов и т.п.) и кропотливой настройке.
![](https://habrastorage.org/webt/th/ca/ra/thcaraxs_jwq4qwq_lcr37wm8z0.jpeg)
кадр из м/ф «Козленок, который считал до десяти»
По нашей оценке, при работе с интеллектуальными модулями во главу угла пользователи ставят точность и простоту управления функцией. Когда два года назад мы приняли концепцию развития продукта Macroscop через его упрощение, одной из локальных вех этого упрощения стала переработка популярного подсчета посетителей.
Но обо всем по порядку…
Традиционно людей по видео считают с помощью технологии трекинга или метода оптического потока.
Трекинг строит траектории перемещения движущихся объектов, а подсчет фиксирует направление пересечения виртуальной линии входа/выхода. Траектории можно строить несколькими способами:
1. С помощью анализа последовательности кадров, на которой присутствуют движущиеся объекты. В общем случае в одном кадре может присутствовать несколько движущихся объектов, поэтому программе необходимо не только построить траектории, но и различить объекты и их перемещения. Когда движущиеся объекты пересекают линию входа/выхода по одному, никакой сложности с подсчетом нет: задача сводится к определению направления пересечения линии.
С этой задачей может справиться метод подсчета, основанный на наиболее простой реализации трекинга, анализирующий объекты переднего плана (движущиеся объекты) на двух последовательных кадрах. Сначала выделяются области движения, отличающиеся от фонового изображения, на текущем и предыдущем кадре, далее, анализируя скорость, направление движения объектов, а также их размеры, вычисляются вероятности перехода объектов из одной точки траектории предыдущего кадра в другую точку текущего. Наиболее вероятные перемещения каждого объекта складываются в траекторию.
2. В общем случае люди в кадре могут перемещаться по-разному: их траектории могут пересекаться или перекрываться, а зоны движения, соответствующие объектам, — объединяться в одну область. В таком случае программе нужно выявить каждый объект, разделить группы объектов и корректно посчитать людей, пересекающих виртуальную линию в том или ином направлении.
В этих случаях задача построения точной траектории отдельных объектов усложняется, тогда метод построения траектории по двум кадрам, не подходит, он дает высокую погрешность. Используется анализ последовательности кадров и непрерывной постобработки полученных результатов: программа строит графы — анализирует переходы объектов из одного состояния (положения) в другое; анализирует скорости и направления движения, положения, цветовые характеристики. В качестве результата выдается набор наиболее вероятных перемещений объекта, образующий траекторию.
Для повышения точности подсчета также применяются методы разделения людей в группах. Это можно сделать с помощью оценки площадей групп или детектируя и подсчитывая головы людей.
Подсчет по трекингу предоставляет наилучшую точность работы, когда люди в кадре минимально перекрываются. И в реальных системах этого зачастую можно добиться, только устанавливая камеру над ограниченным проходом (узкая входная дверь, эскалатор и т.п.).
Подсчет посетителей на основе анализа оптического потока
Если подсчет на базе трекинга находит объект в видеопотоке и следит за его перемещениями, то этот метод наблюдает за виртуальной линией входа/выхода и анализирует движение цветовых пикселей через нее. Метод следит за перемещением области определенной яркости и определенного цвета через линию, вычисляет характеристики особенностей изображения (края, углы, особые точки, информацию о текстуре и т.д.) При этом метод лишь фиксирует факт перемещения какого-то объекта через линию, но не определяет, что это за объект, сколько людей перемещаются в данном объекте. Для определения числа людей, пересекших линию, также используются методы детектирования голов и анализа площади движущегося объекта.
Этот метод применим для плотного потока людей, когда традиционные методы трекинга непригодны. Наиболее точный результат достигается, когда плотность потока людей приблизительно однородна
Мы реализовали в своем подсчете и первый, и второй способы. В зависимости от условий, при которых происходит подсчет, пользователь может выбрать наиболее подходящий режим работы. Если условия съемки близки к идеальным (с точки зрения подсчета), настройка не потребует много сил и времени, но, если это не так, администратору придется озадачиться.
В итоге подсчет посетителей для сложных сцен наблюдения работал по пропорции: чем больше сил потратит пользователь на настройку модуля, тем точнее он будет работать. Что в нашу общую концепцию не укладывалось.
Мы озадачились поиском новых решений для подсчета посетителей.
Новый модуль 3D-подсчета посетителей
Новый модуль реализован принципиально иначе. Если раньше подсчет использовал данные двух измерений, то в новом введено третье – глубина (расстояние от видеокамеры до человека). Теперь подсчет – это не просто модуль, это программно-аппаратный комплекс из специального устройства – датчика глубины,- и программного модуля обработки данных. Датчик вычисляет расстояние от устройства до объектов, излучая и принимая ИК – сигналы, строит матрицу глубины, с которой уже работает программа.
![](https://habrastorage.org/webt/dt/qr/z3/dtqrz30dv7lkwciigcmakpzng_i.png)
Глубина дает информацию о высоте того, кто пересекает линию входа-выхода, и позволяет отличать людей от прочих объектов. Пользователю необходимо задать в настройках минимальный рост посетителя, и все люди этого роста и выше будут подсчитываться системой.
Для пользователя 3D-подсчет посетителей предельно прост: надо задать всего две настройки- рост и линию входа.
Его результаты практически не зависят от условий, в которых производится подсчет (разве что вы считаете в каких-то очень сложных рельефах).
Он сверхточный – 98.5% в реальных условиях у реальных пользователей (а не в «тепличных» лабораторных, как часто любят тестировать программисты). Высочайшая точность обусловлена тем, что модуль работает не с картинкой, а с трехмерной картой. В дополнение мы реализовали несколько технологий, чтобы решать ряд ключевых задач при подсчете:
- Задача разделения людей. Когда люди находятся близко друг к другу, их контуры на заданной высоте могут соединиться в один. Чтобы избежать «потери» человека мы «режем» карту глубины на слои и получаем многослойные контуры объектов. Контур без вложений соответствует макушке человека. Считаем макушки.
- Задача определения траекторий перемещения людей. Для этого используется трекинг, но абсолютно новый, который учитывает особенности получаемых данных о глубине.
- Задача обработки карты глубины. Данные о глубине мы получаем, оценивая отраженные от поверхностей ИК – сигналы излучающего устройства. Но лучи по-разному отражаются от разных поверхностей, поэтому в ряде случаев карта получается с «дырами». Мы создали алгоритм, который достраивает карту на основе значений в известных областях.
- Задача компенсации угла. Для того чтобы максимально разгрузить установщиков видеосистем, мы реализовали алгоритм, который учитывает отклонение устройства подсчета посетителей от горизонтали и соответствующим образом корректирует значения глубины.
- Задача автоматического определения расстояния до пола. Ее решение исключает необходимость точно измерять высоту и задавать ее в настройках модуля. Это также направлено на повышения удобства работы с подсчетом.
«Будь проще и люди к тебе потянутся…»
Новый 3D-подсчет посетителей намного проще традиционного модуля. Проще и с точки зрения реализованных в нем технологий, и с точки зрения пользовательской работы. При этом он существенно более точный и менее «прихотливый» к условиям съемки.
Когда мы пришли с новым 3D-подсчетом к пользователям на реальные объекты, самое сильное впечатление на них оказала даже не высочайшая точность (98,5% в реальных условиях), а как раз эта самая простота и практически полное отсутствие каких-либо настроек. Это еще раз уверяет нас в своем стремлении разрабатывать, балансируя простоту и функциональность, опровергая стереотип, что крутой продукт должен быть навороченным и сложным.