Обучили модель компьютерного зрения читать данные с лидара и вычислять человекопоток возле билбордов. Анализируем эффективность офлайн-рекламы — так, чтобы ни заказчика, ни его клиентов не оштрафовали на миллионы евро за нарушение закона о персональных данных.
Всем привет! Я директор питерской студии разработки Unistory. Специализируемся на нестандартных штуках: отказываемся от проектов вроде «сайт на Битриксе» или «обложка для Chat GPT». В своем Telegram-канале рассказываю о наших проектах с ML и web3 интеграциями — подписывайтесь :)
Сегодня расскажу вам об одном из продуктов, который мы создали. Это устройство, вычисляющее человекопоток возле рекламных билбордов.
Для тех, кто любит видео
Я выступал с этим материалом на Datafest 2024 в секции Компьютерного зрения. Вот видео, если хотите посмотреть, как я рассказываю все это вживую и с дополнительной порцией мемов.
Как все начиналось
К нам пришел заказчик, который занимается созданием цифровых инструментов для маркетологов. Его идея была в том, чтобы создать независимый инструмент, который будет давать информацию об эффективности рекламных билбордов.
Есть только два вида билбордов: эффективный и неэффективный. Возле первого проходят сотни людей в минуту, второй не видит никто.
Легко отличить один от другого, если маркетолог, который заказывает рекламу out-of-home, хорошо знает город. Но если он живет в Мадриде, а рекламу размещает в Стокгольме? Именно для таких ситуаций и нужен независимый инструмент оценки человекопотока возле билборда.
Почему мы не могли использовать обычные камеры
Технически наша задача решалась просто: устанавливаем камеру, подключаем AI-модель компьютерного зрения, она считает людей. Однако решение должно было работать на европейском рынке, а в Европе действует GDPR, закон о защите персональных данных.
Снимать людей на улицах в маркетинговых целях запрещено законом. Наше решение должно было фиксировать информацию только о количестве людей. Поэтому обычная камера не подошла.
Почему мы решили использовать лидары
Чтобы решить проблему, рассматривали два варианта на замену обычной камеры: лидары и тепловизоры. Оба этих устройства способны зафиксировать количество людей, при этом не получая никакую информацию об их личности.
Лидары оказались более надежной технологией, так что в хищников из фильма со Шварцем поиграть нам не удалось.
Перешли к расчетам: какой лидар нам нужен, с каким углом обзора, в каком положении его установить возле билборда.
Высота, на которой заказчик планировал устанавливать наши устройства, около 3-4 метров.
Поэтому наш разработчик прямо на бумажке рассчитал, как лучше установить лидар, чтобы он получил всю нужную информацию. Оказалось, идеальный вариант, с минимальным числом слепых зон — установить лидар линзой вниз.
Какой лидар мы выбрали для наших задач
Оптимальной моделью оказалась MID-360. Компактная, высокое качество сборки, большое разрешение, а главное — 10 кадров в секунду.
Как научить нейросеть «видеть» координаты?
Лидар передает данные в виде набора координат. Это текстовый файл, с которым не сможет работать ни одна из моделей компьютерного зрения.
Было два варианта, что делать:
Первый вариант — визуализировать данные координат. Превратить табличку с числами в картинку, на которой модель компьютерного зрения сможет разглядеть фигуры людей.
Второй вариант — обучить какую-то нейросеть читать координаты и понимать, где человек а где нет. Обучать такую нейросеть было бы долго и дорого, поэтому мы решили пойти по первому пути и визуализировать данные.
В итоге разработали специальный софт, который превращал огромное количество цифр в картинку. У каждой точки были свои координаты, и наш софт расставил эти точки так, чтобы получилось изображение.
В табличках с координатами четыре параметра: x, y, z, Intensity. Сначала наш софт не учитывал Intensity, поэтому картинка получилась не слишком красивой. Как только добавили Intensity — изображения с лидара сразу стали намного симпатичнее.
На таких изображениях невозможно рассмотреть лицо человека — фиксация данных на лидар не является нарушением GDPR.
Скомпоновали изображения, сделали видео — в целях демонстрации:
Какие еще «детали» нам понадобились
Чтобы собирать данные и передавать их на сервер, мы:
Подключили лидар к Raspberry Pi
Подключили 4G модем к Raspberry Pi
Написали сценарии на Ansible, чтобы одновременно запускать устройства, даже если они раскиданы по всему миру
Подготовка датасета и обучение нейросети
Теперь вопрос, какую нейросеть использовать, чтобы считать людей на таких картинках с лидара? Мы решили использовать YOLO8, потому что она не требовательна к мощностям и есть много открытых библиотек.
При этом нам все равно пришлось обучить нейросеть, ведь до этого ей не приходилось выполнять именно такую задачу — считать фигуры людей на пиксельных изображениях, где можно различить только силуэт.
В нашем случае датасетом стали фигуры людей. Мы сделали 8000 фотографий с лидара, разметили людей и на этом материале обучили нейросеть. Вот как выглядят размеченные изображения, на которых мы учили YOLO8.
Как это работает: саммари
Готовый сервис работает следующим образом:
Ansible запускает съемку на устройствах возле разных билбордов
Лидар несколько минут фиксирует фигуры прохожих
Ansible выключает съемку на всех устройствах
Наш софт превращает координаты с лидара в изображения
YOLO8 считает людей, которые прошли мимо билборда за время съемки
Raspberry Pi отправляет на сервер информацию о человекопотоке
Маркетологи используют данные для анализа эффективности билборда
Как мы все это тестировали
Итак! Нейросеть обучена, софт готов, лидар подключен к компьютеру и модему. Выходим на осеннюю питерскую улицу — тестировать.
Было холодно, лидар нужно было держать высоко над головой, мы устали, но вернулись с очень радостным чувством — наше изобретение заработало.
Теперь у нашего заказчика есть инструмент, который позволяет маркетологам узнать, какие точки наружной рекламы — самые эффективные, а на какие не стоит тратить деньги.
Наши следующие шаги
Конечно, проект еще не закончен — есть над чем поработать. Самое главное — нужно собрать все детали нашего устройства в одну красивую стильную коробку, которая не будет бояться ни жары, ни холода, ни дождя.
А еще нужно дообучить нейросеть, чтобы она понимала, в какую сторону идет человек и видит ли билборд. Это важно, так как большинство билбордов двусторонние, и на разных сторонах обычно разная реклама.
Если интересуетесь нестандартным подходом к разработке и необычными проектами — подписывайтесь на мой Телеграм-канал. Здесь я рассказываю, как мы беремся за идеи, которые на старте кажутся невозможными, и доводим их до продакшна. Proof of concept за день, рабочий проект — за три месяца ?
whyyousee
А научить нейронку читать координаты было слабо? Зачем здесь вообще компьютерное зрение?
unistory Автор
У нас была стратегия и мы ее придерживались. А вернее — был и тот путь, о котором вы говорите. Но мы выбрали другой :)