IT рекрутинг

Закупились LED-лентами, внедрили AI в процессы и создали систему навигации по парковке. Прямо как в NFS Underground

/users_files/VladSavin/c85d4f71-aede-5732-9e8e-8ad71e3e39ef.png

Вдохновились NFS Underground и реализовали проект умного паркинга

Заказчик пришёл за целой стратегией цифровизации жилого комплекса в Москве. Мы работали над серией проектов, где умный паркинг — лишь малая часть. Но об остальном расскажу чуть позже.

Первое, что мы решили сделать — решить вопрос навигации. Проблема подземных парковок в том, что по ним очень тяжело ориентироваться из-за нескончаемого количества этажей и поворотов.

Когда мы сели думать, как решить эту боль, я сразу же вспомнил свою первую компьютерную игру — NFS Underground. Это игра в жанре аркадных автогонок, в которой путь машине игрока указывают неоновые стрелки.

Мы с командой сошлись во мнении, что это штука вообще-то гениальна, и пошли думать как всё это дело реализовать.

/users_files/VladSavin/08eb51ec-ac73-5bf1-b4d8-317ac1d4d02e.png

Организовали офис прямо на парковке и приступили к работе

Мы не из тех ребят, которые просят заказчика всё самостоятельно организовать и обеспечить стабильный приход данных, а только потом приступают к задачам.

На проектах мы часто используем алгоритмы CV для обработки и анализа данных. Нам важно делать всё своими руками — устанавливать девайсы, тестировать решения и ошибаться.

На -1 этаже этого ЖК мы выделили зону, для тестов. А в кладовке организовали серверную часть.

Использовали готовое решение для детекции машин

Тут ничего нового выдумывать не пришлось — люди давно научились распознавать номера и лица.

Подобрали сервис, который устроил и нас по функционалу, и клиента по бюджету.

Перед тем, как навигировать машины, нужно разобраться как их трекать

Собрали hardware device из четырех камер, колонок и звуковых датчиков.

Камеры направили по четырем плоскостям: две из них контролировали сам проезд и трекали машины, а ещё две — соседние парковочные места.

Установили Raspberry Pi и поставили отдельный сервер с GPU, чтобы считывать и стримить видеопоток с камер. А всю функциональность оркестрировал бэкенд.

Так как у Raspberry Pi четыре USB-разъема, мы решили, что подключить к нему все наши камеры, чтобы считывать видеопотоки — отличная идея.

Это решение оказалось главной ошибкой на проекте.

/users_files/VladSavin/65e259bf-0cb5-52f6-be0f-4c1aa5925498.png

Мы не учли потенциальные проблемы с сетевыми коммуникациями и специфику работы с Hardware

Нужно было создать систему, которая сможет качественно и без перебоев стримить все видеопотоки на сервер. Но уже на этапе тестов возникли проблемы.

Главная проблема была в USB-камерах — они отправляли на сервер не сжатые кадры. Из-за этого файлы не влезали в стандартный Ethernet.

Чтобы решить эту проблему, нам приходилось уменьшать frame rate и разрешение видео.

Ещё одна проблема была в том, что серверная часть находилась в 100 метрах от самого девайса.

И несмотря на то, что рядом с устройствами стоял коммутатор, расстояние не обрабатывалось и сигнал не проходил. Также помехи могли создавать силовые кабели вокруг парковки.

Как только мы переносили оборудование к устройствам — всё начинало работать.

Так, спустя несколько итераций, мы стали таскать с собой раскладные стулья и стол, чтобы прямо там сидеть и прогать.

Дружеский совет — заменяйте USB-камеры на сетевые, чтобы уменьшить лаги и нагрузку на сеть.

Как мы разработали алгоритм навигации?

Идея была в том, что по LED-ленте будет бежать жучок и сопровождать машину до назначенного ей места.

Одна машина — один жучок, который гаснет на той части пути, которую водитель уже преодолел.

Превратили парковку в футбольное поле

Чтобы трекать машину на уровне пикселей, мы разделили всё пространство на небольшие сектора — квадраты 3х3 со своим уникальным ID.

Разметили их футбольными конусами, просто потому что удобно.

/users_files/VladSavin/859448bf-b0a8-5d6f-8510-d460ec0f5fe6.png/users_files/VladSavin/96af9eda-3882-5add-8046-1a05de9bbf67.png

Тут появился ещё один вопрос — а как навигировать машину так, чтобы она добралась до места, даже если водитель сбился с маршрута?

Связали LED-ленты с секторами парковки

Сама лента тоже состоит из секторов. Мы связали определенные участки ленты с квадратами, чтобы понимать, какие отрезки ленты зажигать. А когда водитель сбивается с маршрута — отрабатывает алгоритм детекции.

Если машина должна находиться в другом секторе — автоматически отправляется сигнал на микроконтроллер, который включает другие светодиоды и перестраивает маршрут.

Тестировали точность и обучали модели ИИ на размеченных секторах.

Этим же алгоритмом закрыли вопрос определения местоположения автомобиля

И смогли определять, когда машина заняла часть соседнего квадрата, а значит — чужое место или участок дороги.

/users_files/VladSavin/e91432d8-f5f0-5bc4-9499-06736f102d7e.png

Разработали алгоритм определения корректности парковки

Никаких готовых решений этой задачи мы не нашли, поэтому стали думать как это реализовать самостоятельно.

Мы сразу учли, что в ЖК часто паркуются машины S-класса, которые могут не помещаться на своё место из-за длины машины. И трекали автомобили только относительно боковых границ парковки.

/users_files/VladSavin/ebe6e460-8f74-5cbf-8aa6-f2686a9b7386.png

Нашли несколько Open source моделей, которые могли бы нам подойти

Сначала задаётся проекция машины на плоскость, затем модели нейросетей прогнозируют маску этой проекции.

Проекцию автомобиля получают с помощью машины с видеорегистратором, который отслеживает движение других автомобилей, чтобы проверить, выходит ли проекция за пределы допустимой линии.

Мы поняли, что если пойдём этим путём, то точно прогорим, потому что такой алгоритм не устойчив к высоте и углу, на котором будет расположена камера.

К тому же, большинство готовых датасетов заточены только под сами дороги, и их пришлось бы серьёзно дорабатывать.

Задумались, а как люди в реальной жизни понимают, что машина припарковалась неправильно?

Мы видим, что контур автомобиля выходит за пределы места. Это и стало ключом к решению нашей задачи. Зафиксировали эту мысль и на её основе разработали свой алгоритм.

/users_files/VladSavin/ae6fa190-2cf0-56f8-b9dd-40fe23f7031c.png

Как мы это провернули?

Мы создали проекцию боковых линий машины на землю, чтобы проверять пересечения с границами парковочного места.

/users_files/VladSavin/551d270f-72a9-52c3-9c27-0217d48549a1.png

Чтобы построить эти линии, мы использовали алгоритм, который включает аппроксимацию по ключевым точкам и линейную регрессию.

При построении линий мы учли разные размеры машин и немного расширили границы линий, чтобы добавиться максимальной точности.

/users_files/VladSavin/50bea932-b407-5546-bf73-94d5aa9e54a5.png

А что дальше?

MVP-версия проекта удалась, и получилась даже лучше, чем мы предполагали. Проект всё ещё требует доработок, но основной функционал готов к реализации и использованию.

/users_files/VladSavin/69f6f79a-2c6a-5b79-90ca-99ce43155d1f.png

Логика решения

/users_files/VladSavin/de5fb0c3-3ffd-54df-9cb7-adc353e460a0.png

Команда

  • 1x Project Manager
  • 2x Hardware / Network Engineers
  • 2x Data Scientist
  • 1x Data science Lead
  • 1x Back end Developer

Стоимость

Общая стоимость проекта составила ~50k USD.

FIN!

B подписывайтесь на наш телеграм. Там не будет новостей о новом ChatGPT и ответов на вопрос «Заменят ли нейросети человека». Будем рассказывать о разработке AI для ентерпрайза.