Занятость парковки по камере: синтетика проверяет идею, реальные кадры дают точность
Лаборатория

Занятость парковки по камере: синтетика проверяет идею, реальные кадры дают точность

Самая дорогая часть компьютерного зрения появляется до модели

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

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

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

0
кадров размечено вручную на этапе проверки идеи
~5
рабочих дней на отбор и разметку реальных кадров

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

Трёхмерная сцена сама знает, где стоит машина

Парковочные площадки и автомобили не моделировали с нуля. Готовые 3D-объекты взяли из платных наборов, собрали в Blender и управляли ими Python-скриптом. Генератор расставлял машины, менял условия и рендерил кадр за кадром.

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

Свет и время суток
День, пасмурная погода, утро, вечер и ночь с искусственным освещением.
Заполненность
Несколько уровней от пустой площадки до почти полной.
Положение камеры
Разные точки и углы под реальные варианты монтажа.
Погода
Случайные мокрое покрытие и туман, чтобы проверить устойчивость идеи.

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

Синтетический набор можно было получить за день и сразу отправить в обучение. Если первый вариант сцены оказывался неудачным, параметры менялись и кадры создавались заново без новой съёмки и ручной переразметки. Такая скорость позволяла проверять устройство эксперимента, а не беречь каждый ранний набор как невосполнимый актив.

Первая модель доказала идею, но не заменила реальную камеру

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

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

Отбор был частью работы, а не техническим копированием всего архива. Нужны были кадры, которые добавляют модели реальные условия и не повторяют друг друга тысячами почти одинаковых изображений. После этого автомобили размечались уже вручную: открытая фотография не содержит знания о положении объекта так, как сцена Blender.

На реальных изображениях модель дообучили, то есть выполнили fine-tune. За несколько месяцев экспериментов её довели до рабочего состояния. После дообучения автомобили на настоящих снимках распознавались заметно точнее, чем универсальной моделью без адаптации к задаче.

Синтетика здесь сэкономила не всю будущую работу, а самый рискованный первый вклад. Реальные данные всё равно понадобились, но к их разметке перешли уже после подтверждения подхода.

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

Один кадр превращается в статусы мест и поток машин

В рабочем контуре используется YOLO - детектор объектов, который находит автомобили в кадре. Система получает видеопоток, ведёт обнаруженные машины между кадрами и сопоставляет их с заранее размеченными парковочными местами.

Автомобили в кадре
YOLO находит и сопровождает машины на видеопотоке.
Статус места
Пересечение автомобиля с размеченной зоной даёт состояние "занято" или "свободно".
Въезды и выезды
Пересечение условной линии используется для подсчёта потока на территории.
Количество и длительность
Система считает машины на площадке и время стоянки каждой из них.

Общие возможности YOLO шире. На его основе можно оценивать скорость, строить траектории и тепловые карты активности. В этом проекте такие функции не реализовывались: задача ограничена детекцией автомобилей, занятостью мест, потоком и продолжительностью стоянки.

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

Новая камера начинается со стоп-кадра

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

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

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

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

Эксперименты версионировали, синтетику решили перегенерировать

Обучение модели легко превратить в процесс, где никто не помнит, какие параметры дали текущий результат. Для экспериментов использовали MLflow: каждый запуск, настройки и полученная версия модели фиксируются. Версии можно сравнить и повторить удачную конфигурацию.

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

Это не общее правило против версионирования данных. Когда появляется ценная рабочая модель и несколько реальных наборов, возможность точно восстановить обучение становится важнее. И даже в исследовательской фазе воспроизводимость никуда не делась: сценарий генерации оставался источником синтетики, а MLflow хранил параметры и результат обучения. Мы убрали слой, который не окупался, а не возможность понять, как была получена модель.

Что фиксировали Решение Причина
Запуски обучения MLflow Сравнить параметры и версии модели
Реальные размеченные данные Сохранять как рабочий набор Разметка потребовала ручного отбора и её дорого повторять
Ранние синтетические наборы Перегенерировать по сценарию Генератор создаёт их быстрее, чем окупается тяжёлое версионирование

Граница проходит там, где начинается настоящая камера

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

Тонкой настройки потребовали обе стороны. Генератор сцен в Blender нужно калибровать, чтобы разнообразие условий оставалось осмысленным. Fine-tune на реальных данных тоже не выполняется одной кнопкой: необходимо подбирать набор, параметры и сравнивать эксперименты.

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

Парковка показывает подход, а не предел применения

Связка "камера, детектор, зоны" подходит и для других задач, где объект можно увидеть и посчитать. В логистике это техника и занятые площадки, на дороге - поток на улице или перекрёстке, в производственном сценарии - количество объектов в зоне или выполненных действий.

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

Этот собственный проект не выдаётся за клиентское внедрение. Его ценность в пройденном процессе: дешёвая синтетическая проверка, переход к реальным данным, настройка детектора, отслеживание экспериментов и понимание предела изображения. Те же решения о данных и проверке гипотез приходится принимать в коммерческих проектах компьютерного зрения, даже когда объект в кадре уже другой.

Александр

Александр

Fullstack-разработчик с 8+ годами опыта - от промышленной автоматизации и работы с оборудованием до электронного документооборота и чат-ботов. Сейчас фокус на прикладном ИИ - от RAG-платформ для диалоговых ботов до компьютерного зрения.

Наш собственный проект

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