В тестовой версии заработал онлайн сервис, который показывает текущую скорость интересуемых нас объектов (автомобилей и других средств передвижения) по записям с видеокамер на перекрестках.
С проблемой визуализации дистанции при движении автомобиля и его текущей скорости сталкиваются как ученики в автошколах, так и достаточно опытные водители.
Но есть решение — анализ этих данных по записанным ранее видеокадрам и их обработка в разных платных и бесплатных, доступных и закрытых сервисах.
Об одном таком недавно появившемся сервисе и пойдет далее речь.
Данная публикация написана на Хабре с его разрешения.
На данный момент сервис работает не в автоматическом режиме, каждую видеозапись сначала нужно подготовить для обработки вручную оператором сервиса (сейчас это автор в одном лице или новый пользователь, инструкция по работе с сервисом в конце публикации).
Этапы обработки видеокадров:
— на первом этапе компенсируются оптические искажения от видеокамеры, то есть все прямые линии реального мира должны быть прямыми и на обрабатываемом сервисом видео (коррекция искажений от камеры уже работает в автоматическом режиме в сервисе);
— на втором этапе осуществляется локационная привязка к плоскости дороги, для этого оператору необходимо отметить на кадре прямоугольник как в реальном мире и ввести два (и более) отрезка с измеренными ранее длинами (обычно это: ширина дороги, ширина отдельной полосы между линиями разметки, расстояние между проезжими частями или знаками, колесная база автомобилей);
— на третьем этапе оператору сервиса на каждом кадре необходимо установить точку, где находится интересуемый объект (отметить его траекторию движения), а в итоге сервис покажет нам текущую скорость объекта и ее изменение в процессе движения.
В плеере сервиса есть инструмент «Линейка», с помощью которого можено измерить расстояния на видео:
Точность работы сервиса достаточно сильно зависит от качества и параметров видеозаписи.
Сейчас сервис работает только с видеокадрами, полученными с помощью неподвижных (статичных) видеокамер, база этих записей дополняется и нарабатывается.
В процессе доработки функционала сервиса автором планируется добавить анализ записей, полученных с помощью видеорегистраторов в двигающихся и останавливающихся автомобилях.
Автор сервиса планирует проанализировать большое количество видеозаписей с ДТП с участием пешеходов и проанализировать статистику данных скоростей транспорта в момент столкновений.
Вот что еще планирует сделать автор для развития данного сервиса:
добавить автоматическое слежение за точками;
добавить геотеги;
внедрить фильтр Калмана для сглаживания ошибок наблюдения;
использовать компьютерное зрение;
добавить функционал вычисления скорости нескольких объектов;
планируется внедрить для сервиса машинное обучение, чтобы минимизировать работу оператора для подготовки видеозаписи.
Очень надеюсь, что данная публикация заинтересует и поможет автору сервиса в его развитии и текущей работе.
Мне удалось связаться с автором этого сервиса Ильей Волковым, пообщаться с ним о функционале сервиса и получить ответы на несколько вопросов по этому проекту специально для Хабра.
Интервью с автором сервиса «Анализ скорости при ДТП по видеозаписи»:
Вопрос: Давно ли возникла идея о реализации такого сервиса?
Ответ Ильи: Месяца четыре назад увидел видео с ДТП и стало интересно, с какой (хотя бы примерно) скоростью двигался один из участников. Интересно стало не только мне — в комментариях к видео было много споров, и назывались самые разные оценки. Тут-то я и подумал, что такой инструмент был бы полезен.
Вопрос: Сколько прошло времени от мысли, что «можно сделать это» до первого рабочего запуска сервиса?
Ответ Ильи: Ну вот четыре месяца и прошло примерно. Но я бы не торопился называть текущую версию рабочей — пока сыровата :)
Вопрос: Какие языки и платформы Вы используются в сервисе и какие планируете использовать далее?
Ответ Ильи: Проект хостится на Firebase, это отличная штука для быстрого старта практически любого проекта. Авторизация, хостинг, база данных, файловое хранилище — всё «из коробки». Удобный API, полная бесплатность на первых порах.
Фронтенд — Vue.js, тоже несложный для освоения с нуля инструмент. Отрисовка на канве с помощью Konva.js, за искажения оптики отвечают шейдеры.
Практически весь код (за исключением шейдеров) написан на JavaScript. Особых претензий к стеку нет, буду продолжать работать с ним.
Вопрос: Когда можно будет обычным пользователям загружать свое видео и работать с сервисом?
Ответ Ильи: В принципе, это можно сделать уже сейчас, я написал инструкцию, как это сделать.
Вопрос: Вы один занимаетесь проектом или есть команда программистов?
Ответ Ильи: Команда пока небольшая — я да мой товарищ, у которого есть компетенции во фронтенд-разработке.
Вопрос: Планируете Вы продолжать развитие сервиса и ждете ли помощи от коллегфорумчан по этому проекту?
Ответ Ильи: Развитие сервиса однозначно планируется, поскольку прототип выглядит очень даже любопытно. Идей по развитию полно, желание также присутствует.
Помощь всегда приветствуется — особенно советы.
Вопрос: Это будет бесплатный сервис или монетизация тоже в планах есть?
Ответ Ильи: Перспективы монетизации пока довольно туманные. Возможно, они прояснятся в дальнейшем.
Вопрос: Появились ли организации или сообщества, которые заинтересовались сервисом? Например, мотоклубы или обучающие вождению школы?
Ответ Ильи: Сообщества мне не писали, но некоторых автоэкспертов проект заинтересовал.
Вопрос: Какая сейчас точность определения скорости с помощью сервиса? Насколько эти данные будут разниться, если нужные параметры введены по измерению рулеткой с реальной дороги или используя геосервисы, в которых ширина проезжей части измерена встроенной линейкой?
Ответ Ильи: На видео очень хорошего качества и без искажений оптики точность неплохая, тесты на открытом датасете показывают погрешность до 3%. Точность уменьшается с ухудшением качества видео и нестабильной частотой кадров.
Насчет измерений рулеткой и с помощью геосервисов — рулетка, конечно же, надёжнее. Данным от геосервиса нельзя слепо верить, но их можно и нужно перепроверять.
Вообще, у меня есть большое желание отказаться от привязки местности по ориентирам и привязываться на основе колесных баз автомобилей и других точно известных расстояний.
Вопрос: Будет ли возможность выбирать единицы измерения (кмч, мс, мильчас) и сохранять данные скоростной телеметрии в отдельный лог-файл?
Ответ Ильи: Да, благо это не так сложно сделать. Но когда это будет реализовано — не могу сказать.
Вопрос: Видеозаписи в зимние время ведь сложнее будет в Вашем сервисе обрабатывать из-за снежного покрова на дороге?
Ответ Ильи: Да, снег добавляет трудностей — некоторые ориентиры становится не видно, иногда изменяется даже геометрия дороги. Но в принципе, скорость вычисляется и на «снежных» видео.
Вопрос: Планируется в сервисе использовать нейросети?
Ответ Ильи: Это точно не перспектива ближайшего времени, но тема однозначно очень интересная. Было бы круто обучить нейросеть подбирать коэффициенты искажения камеры. Много идей по использованию готовых нейросетей. Но пока и без них много чего делать :)
Вопрос: Сейчас сервис хостится на Firebase, ищите ли вы альтернативу?
Ответ Ильи: Единственное, что не очень нравится в Firebase — это цены. Например, цена 1 ГБ трафика из файлового хранилища составляет около 7 рублей, в то время как у Яндекс.Облака — всего лишь рубль. Пока это не очень большая проблема, но в дальнейшем я буду искать пути для оптимизации. Сейчас же я проектирую архитектуру таким образом, чтобы не сильно привязываться к поставщику услуг.
Большое спасибо Илье за интересные и развернутые ответы!
Автор по возможности добавляет в сервис новые ролики:
1. Для создания своего проекта необходимо залогиниться. Пока доступна авторизация через аккаунты Google и Facebook. После авторизации у вас будет доступна кнопка «Создать проект».
2. Нажимаем кнопку «Создать проект», появляется страница создания нового проекта, на которой предлагается загрузить видеофайл. Пока максимальный размер видеофайла — 3 мегабайта. Обрезать видео можно с помощью этого видеосервиса.
3. Загружаем файл, после успешной загрузки автоматически откроется страница проекта.
4. Для начала убираем искажения оптики камеры: с помощью ползунков k3, k4, Scale регулируем искажения таким образом, чтобы все прямые линии реального мира были прямыми и на картинке.
5. Перемещаем четырёхугольник так, чтобы он соответствовал прямоугольнику реального мира и указываем 2 расстояния (отрезки не должны быть параллельными).
6. Для поиска расстояний можно воспользоваться Яндекс.Картами.
7. Так как расстояния на Яндекс.Картах могут быть не совсем точными, нам необходимо убедиться в адекватности полученной привязки с помощью линейки. Обычно мы знаем колесные базы автомобилей. Например, у ВАЗ-2114 база составляет 2,46 метра, у нас получается 2,45.
8. Длина трамвая получилась около 16 метров, что тоже недалеко от истинной длины.
9. Теперь мы готовы заняться непосредственно вычислением скорости авто. Переходим в режим редактирования точек объекта и отмечаем точку объекта на каждом кадре. Отмечать точки вручную на каждом кадре может быть утомительно, поэтому существует инструмент интерполяции: отмечаем точку на одном кадре, затем отмечаем точку через 5-15 кадров, выделяем промежуток между кадрами на таймлайне и жмём кнопку «I»: Теперь точка между кадрами движется равномерно прямолинейно.