Спутник для двора: как мы превратили 12 камер в панораму ЖК и научили её искать парковку
Всем привет! Меня зовут Александр Неварко, я выпускник МФТИ и Сколтеха, специалист по компьютерному зрению. Сейчас я – генеральный директор и сооснователь компании НКБТех, мы разрабатываем ИИ-решения с компьютерным зрением для бизнеса. Но этот проект я делал ещё как соло-разработчик в девелоперской компании «Самолет».
Этим рассказом я хочу открыть цикл статей о реальных кейсах. Сегодня о том, как мы создали «спутник» для жилого комплекса, чтобы решить проблему с парковкой.
Проблема: NPS и транспортный коллапс
Когда строительство ЖК завершено, его передают управляющей компании (УК). И вот тут начинается новая жизнь, где главный KPI – это удовлетворённость жителей (NPS). Практически в любом крупном комплексе есть три вечные головной боли: поиск свободного места для парковки, качество уборки снега и проезд для экстренных служб.
В одном из ЖК «Самолёта» случился настоящий транспортный коллапс. Машины стояли хаотично, жители тратили по 20 минут на поиск места, а УК не понимала, что происходит. Нужно было решение.
Идея: взгляд с высоты птичьего полёта
Мы хотели дать жителям и УК инструмент мониторинга. Самый логичный способ – повесить камеры и накрутить видеоаналитику. Но здесь возникает проблема масштабирования: чем больше камер, тем больше дорогих вычислительных ресурсов и затрат на прокладку коммуникаций.
Гуляя по сети, я наткнулся на кейсы Bird-Eye-View (вид сверху). Обычно это делают с помощью дронов или столбов. Но дроны не могут висеть вечно, а столбы – это дорого и некрасиво.
Тогда родилась идея: повесить камеры под крыши домов. С высоты 100 метров каждая камера охватывает огромную площадь. А если снимки с камер «склеить» в единую панораму, мы получим аналог спутникового снимка, но в высоком разрешении и обновляемый в реальном времени.
Для пилота взяли три дома. Повесили по 4 камеры на торцы (всего 12 штук) и покрыли почти 7 гектаров территории. Как показала практика, можно было обойтись и восемью – учтём на будущее.
Технические детали: как мы это сделали
Путь от «кучи камер» до «полезного бота» оказался нетривиальным. Вот основные шаги.
1. Калибровка и «выпрямление»
Камеры под крышей дают сильный эффект «рыбьего глаза» (дисторсию). Чтобы склеить их в плоскую картинку, нужно убрать искажения. Для этого мы снимали калибровочное видео с шахматной доской. Важный нюанс: камера должна прогреться до рабочей температуры, иначе на пиксельном уровне будут ошибки.
2. Репроекция (перспектива)
Теперь нужно было «переложить» картинку с каждой камеры на плоскость земли. Эта задача давно решена в системах кругового обзора для автобусов и фур. Мы задали соответствие между точками на фото (углы зданий, столбы, дорожная разметка) и их реальными координатами из строительного плана. Алгоритм посчитал матрицу репроекции – и картинки стали похожи на снимок с дрона.
3. Склейка в панораму
После калибровки мы «сшили» 12 картинок в одну бесшовную панораму всего двора. Первым инсайтом стал недельный таймлапс: оказалось, что большинство машин вообще не двигаются. Так мы нашли «автохлам» –машины, занявшие места навсегда. Это дало пищу для размышлений и УК, и проектировщикам.
Мониторинг парковок: первая версия
Имея панораму, мы решили подсвечивать для жителей свободные места. Сначала пошли по простому пути: нарисовали на картинке прямоугольники парковочных мест и обучили нейросеть-классификатор (ResNet14) определять, занято место или нет.
Натренировав модель на кропах с недельного таймлапса, мы получили точность 98%. В проде это давало 1–2 ошибки на каждые 280 мест – приемлемо.
Но тут мы столкнулись с «любимой» категорией водителей – «не такие как все». Машины, припаркованные по диагонали, поперёк разметки или вообще в неположенном месте. Статичная разметка против них была бессильна.
Вторая версия: YOLO и Oriented Bounding Boxes
Мы решили пойти другим путём. Вместо фиксированных прямоугольников – детектировать сами машины и уже в реальном времени вычислять, есть ли между ними место.
Взяли YOLOv8 с поддержкой Oriented Bounding Boxes (OBB). Это позволяет выделять машины повёрнутыми прямоугольниками, точно по контуру. Но своих данных для обучения было мало. На помощь пришёл открытый датасет EVD4UAV – 10 тысяч снимков с дронов, 245 тысяч размеченных машин. Мы докинули всего 30 своих фотографий, и модель подтянулась до Precision 0.95 и Recall 0.92.
Алгоритм по детектированным машинам внутри полигона парковки начал искать свободное пространство. Получилось элегантно и гибко.
Ночная проблема и итоговое решение
Ночью детекторная модель оказалась слабее: тёмные машины на тёмном асфальте она пропускала. Классификатор из первой версии работал лучше, так как цеплялся за блики фар и фонарей. Поэтому мы оставили обе версии, решив, что точность для пользователя важнее «красоты» алгоритма.
Интеграция и результат
Всё было упаковано в Docker-контейнер с двумя сервисами:
1. Генератор снимков – раз в 30 секунд склеивает панораму, прогоняет через модель и сохраняет готовую картинку.
2. Телеграм-бот – мгновенно отдаёт пользователю актуальную карту двора с подсветкой свободных мест.
Бот получил положительный фидбэк от жителей, а УК – новый инструмент контроля. Экономия времени на поиск парковки – до 15 минут в день.
Что дальше?
Этот проект стал базой. Теперь у нас есть уникальный «глаз сверху», который можно использовать для других задач:
- контроль уборки снега и качества выполнения ЖКХ услуг;
- отслеживание перекрытий движению для экстренных служб;
- сигнализация о нештатных ситуациях;
- маршрутизация курьеров и робокурьеров;
- сигнализация о парковке в неположенном месте;
- и многое другое)
В следующих статьях я расскажу о других неочевидных применениях компьютерного зрения в реальном секторе.
P.S. Подписывайтесь на наш телеграм-канал @nkb_tech, там мы показываем больше технических деталей и кейсов.