Закупились LED-лентами, внедрили AI в процессы и создали систему навигации по парковке. Прямо как в NFS Underground
Привет! Меня зовут Ярослав Шмулёв, я сооснователь студии R77.AI — интегратора AI в корпорации. К нам обратились за разработкой проекта умного паркинга для ЖК бизнес класса. В статье расскажу, как решали задачи с помощью принципов Data Science, с какими трудностями столкнулись, как их решали, и на что нас вдохновила игра NFS Underground.
Вдохновились NFS Underground и реализовали проект умного паркинга
Заказчик пришёл за целой стратегией цифровизации жилого комплекса в Москве. Мы работали над серией проектов, где умный паркинг — лишь малая часть. Но об остальном расскажу чуть позже.
Первое, что мы решили сделать — решить вопрос навигации. Проблема подземных парковок в том, что по ним очень тяжело ориентироваться из-за нескончаемого количества этажей и поворотов.
Когда мы сели думать, как решить эту боль, я сразу же вспомнил свою первую компьютерную игру — NFS Underground. Это игра в жанре аркадных автогонок, в которой путь машине игрока указывают неоновые стрелки.
Мы с командой сошлись во мнении, что это штука вообще-то гениальна, и пошли думать как всё это дело реализовать.
Организовали офис прямо на парковке и приступили к работе
Мы не из тех ребят, которые просят заказчика всё самостоятельно организовать и обеспечить стабильный приход данных, а только потом приступают к задачам.
На проектах мы часто используем алгоритмы CV для обработки и анализа данных. Нам важно делать всё своими руками — устанавливать девайсы, тестировать решения и ошибаться.
На -1 этаже этого ЖК мы выделили зону, для тестов. А в кладовке организовали серверную часть.
Использовали готовое решение для детекции машин
Тут ничего нового выдумывать не пришлось — люди давно научились распознавать номера и лица.
Подобрали сервис, который устроил и нас по функционалу, и клиента по бюджету.
Перед тем, как навигировать машины, нужно разобраться как их трекать
Собрали hardware device из четырех камер, колонок и звуковых датчиков.
Камеры направили по четырем плоскостям: две из них контролировали сам проезд и трекали машины, а ещё две — соседние парковочные места.
Установили Raspberry Pi и поставили отдельный сервер с GPU, чтобы считывать и стримить видеопоток с камер. А всю функциональность оркестрировал бэкенд.
Так как у Raspberry Pi четыре USB-разъема, мы решили, что подключить к нему все наши камеры, чтобы считывать видеопотоки — отличная идея.
Это решение оказалось главной ошибкой на проекте.
Мы не учли потенциальные проблемы с сетевыми коммуникациями и специфику работы с Hardware
Нужно было создать систему, которая сможет качественно и без перебоев стримить все видеопотоки на сервер. Но уже на этапе тестов возникли проблемы.
Главная проблема была в USB-камерах — они отправляли на сервер не сжатые кадры. Из-за этого файлы не влезали в стандартный Ethernet.
Чтобы решить эту проблему, нам приходилось уменьшать frame rate и разрешение видео.
Ещё одна проблема была в том, что серверная часть находилась в 100 метрах от самого девайса.
И несмотря на то, что рядом с устройствами стоял коммутатор, расстояние не обрабатывалось и сигнал не проходил. Также помехи могли создавать силовые кабели вокруг парковки.
Как только мы переносили оборудование к устройствам — всё начинало работать.
Так, спустя несколько итераций, мы стали таскать с собой раскладные стулья и стол, чтобы прямо там сидеть и прогать.
Дружеский совет — заменяйте USB-камеры на сетевые, чтобы уменьшить лаги и нагрузку на сеть.
Как мы разработали алгоритм навигации?
Идея была в том, что по LED-ленте будет бежать жучок и сопровождать машину до назначенного ей места.
Одна машина — один жучок, который гаснет на той части пути, которую водитель уже преодолел.
Превратили парковку в футбольное поле
Чтобы трекать машину на уровне пикселей, мы разделили всё пространство на небольшие сектора — квадраты 3х3 со своим уникальным ID.
Разметили их футбольными конусами, просто потому что удобно.
Создали цифровую карту парковки, которая по сути представляла математический граф. Так мы смогли строить маршрут от точки А в точку Б.
Тут появился ещё один вопрос — а как навигировать машину так, чтобы она добралась до места, даже если водитель сбился с маршрута?
Связали LED-ленты с секторами парковки
Сама лента тоже состоит из секторов. Мы связали определенные участки ленты с квадратами, чтобы понимать, какие отрезки ленты зажигать. А когда водитель сбивается с маршрута — отрабатывает алгоритм детекции.
Если машина должна находиться в другом секторе — автоматически отправляется сигнал на микроконтроллер, который включает другие светодиоды и перестраивает маршрут.
Тестировали точность и обучали модели ИИ на размеченных секторах.
Этим же алгоритмом закрыли вопрос определения местоположения автомобиля
И смогли определять, когда машина заняла часть соседнего квадрата, а значит — чужое место или участок дороги.
Разработали алгоритм определения корректности парковки
Никаких готовых решений этой задачи мы не нашли, поэтому стали думать как это реализовать самостоятельно.
Мы сразу учли, что в ЖК часто паркуются машины S-класса, которые могут не помещаться на своё место из-за длины машины. И трекали автомобили только относительно боковых границ парковки.
Нашли несколько Open source моделей, которые могли бы нам подойти
Сначала задаётся проекция машины на плоскость, затем модели нейросетей прогнозируют маску этой проекции.
Проекцию автомобиля получают с помощью машины с видеорегистратором, который отслеживает движение других автомобилей, чтобы проверить, выходит ли проекция за пределы допустимой линии.
Мы поняли, что если пойдём этим путём, то точно прогорим, потому что такой алгоритм не устойчив к высоте и углу, на котором будет расположена камера.
К тому же, большинство готовых датасетов заточены только под сами дороги, и их пришлось бы серьёзно дорабатывать.
Задумались, а как люди в реальной жизни понимают, что машина припарковалась неправильно?
Мы видим, что контур автомобиля выходит за пределы места. Это и стало ключом к решению нашей задачи. Зафиксировали эту мысль и на её основе разработали свой алгоритм.
Как мы это провернули?
Мы создали проекцию боковых линий машины на землю, чтобы проверять пересечения с границами парковочного места.
Чтобы построить эти линии, мы использовали алгоритм, который включает аппроксимацию по ключевым точкам и линейную регрессию.
При построении линий мы учли разные размеры машин и немного расширили границы линий, чтобы добавиться максимальной точности.
А что дальше?
MVP-версия проекта удалась, и получилась даже лучше, чем мы предполагали. Проект всё ещё требует доработок, но основной функционал готов к реализации и использованию.
Логика решения
Команда
- 1x Project Manager
- 2x Hardware / Network Engineers
- 2x Data Scientist
- 1x Data science Lead
- 1x Back end Developer
Стоимость
Общая стоимость проекта составила ~50k USD.
FIN!
B подписывайтесь на наш телеграм. Там не будет новостей о новом ChatGPT и ответов на вопрос «Заменят ли нейросети человека». Будем рассказывать о разработке AI для ентерпрайза.
Вот бы нам во двор такое)
и блокировку дверей, чтобы из машины не выпускал, пока нормально не встанет на парковку )))
вспомнил NFS. пошёл искать трек Riders on the storm
мы тоже все саундтреки переслушали пока статью писали)
Вот это вы заморочились. Но получилось круто!
Спасибо)
у вас получилось умное без кавычек решение. респект!