ru:https://highload.today/blogs/smart-parking-project/ ua:https://highload.today/uk/blogs/smart-parking-project/
logo
Machine Learning      04/11/2021

Студенты во Львове сделали приложение для поиска парковки с помощью компьютерного зрения: как оно работает

Богдан Борисей BLOG

Студент в IT Step University

Как давно вы пытались припарковаться в центральной части города или даже в собственном жилом комплексе? Думаю, вы понимаете, о чем я! Меня зовут Богдан Борисей, я — студент в IT Step University и один из авторов проекта Smart Parking. Наша разработка анализирует наличие свободных мест для парковки по видеопотоку IP-камер. Одну или несколько камер можно установить на открытой площадке, а ML-модели будут обрабатывать видеопоток и анализировать, где остались свободные места для парковки.

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

Компьютерное зрение и наш механизм обработки изображений

Для всех кто впервые слышит о компьютерном зрении, ловите определение из Википедии:

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

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

Мы не стали придумывать велосипед и тоже решили использовать этот подход, о чем ни разу не пожалели.

Так выглядит магия (CNR Park)

Так выглядит «магия» (CNR Park)

Первым делом нам нужно было как-то получить картинку с камеры. Для этой цели мы использовали VideoCapture из пакета OpenCV. Дальше пару шагов препроцесинга — и картинки готовы к использованию в модели. На этом моменте мы уперлись в стену.

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

Для стабильного перформанса модели в реальном мире нужно собрать изображения с нескольких парковок, при разном освещении, с разной погодой и временем года.

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

Онлайн-курс Бізнес-аналіз. Basic Level від Ithillel.
В ході курсу студенти навчаться техніці збору і аналізу вимог, документуванню та управлінню документацією, управлінню ризиками та змінами, а також навчаться моделювати процеси і прототипуванню.
Приєднатися

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

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

Архитектура и подключение

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

Сервер: что под капотом

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

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

Технологии

За основу мы взяли базу данных PostgreSQL. Сам сервер, так называемый Core, работал на Python 3 вместе с веб-фреймворком Django 3.

REST API использовалось в основном для того, чтобы добавлять новые парковки, настраивать там парковочные места, а также и для видеопроцессора (работа которого мы описали в разделе о компьютерном зрении), чтобы он мог отправлять нам все, что распознал.

Выстраивание связей

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

Эта библиотека позволила управлять сокетами между нашими сервисами так, что это было похоже на обыкновенную почту: сервисы подписывались на рассылку (а в нашем случае — рассылались данные с парковки), а сервер отправлял по готовности свои условные письма.

Курс UX/UI дизайнер сайтів і застосунків з Alice K.
Курс від практикуючої UI/UX дизайнерки, після якого ви знатимете все про UI/UX дизайн .
Реєстрація на курс

Сервисы

Идея с Visual Board

Visual Board представляет собой экран, расположенный на въезде на парковку. Основная функция борда — упрощение процесса парковки для водителей за счет использования простой и понятной визуализации, которая показывает план парковки и все доступные места.

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

Визуализация экрана

Визуализация экрана

Разработка веб-приложения

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

Было решено создать SPA-приложение (Single Page Application) с помощью набирающего популярность концепта PWA (Progressive Web Application).

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

Приключения с выбором карты

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

  • Во-первых, тулза очень большая, и на слабых смартфонах были проблемы с оптимизацией (долгая загрузка, лаги при перемещении и т.п.).
  • Во-вторых, даже после хоть какой то оптимизации коробки оставался открытый вопрос, как проложить путь от пользователя до заветной парковки. И как оказалось, библиотека, которая работает с прокладыванием путей в MapBox, не могла даже установиться! Мы нашли открытый код на GitHub, но ковыряться в нем оказалось себе дороже. После такого рода извращений, мы решили полностью заменить карту на старую добрую альтернативу от дядюшки Google. Да, она платная, но на процесс разработки нам с головой хватило трайала GCP. После установки Google Maps от проблем с оптимизацией и прокладыванием путей не осталось и следа.

Интеграция с сервисами

Естественно, сырая карта никому не нужна, так что настало время подключить другие сервисы. С помощью сервера мы получаем данные о парковках, точнее — о расположении парковок на карте, а также количестве свободных/занятых мест. Также для внутреннего просмотра парковки был внедрен описанный выше Visual Board — с его помощью пользователь всегда сможет посмотреть, где именно находятся свободные места.

Курс English For Tech course від Enlgish4IT.
Лише 7 тижнів по 20-30 хвилин щоденного навчання допоможуть вам подолати комунікативні бар'єри. Отримайте знижку 10% за промокодом ITCENG.
Дійзнайтеся більше

Бороться с теми, кто не платит

PLPD (Parking Lot Payment Detection) — сервис, который поможет нам бороться с людьми, которые не хотят платить за парковку. Сервис использует библиотеку zeromq, для того чтобы проверять паркоместа только тогда, когда на них кто-то заезжает. Когда это происходит, PLPD ставит таймер на 15 минут для оплаты парковки, а по истечении времени отправляет оповещение.

Вместо итогов

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

Как команда разноплановых разработчиков, можно создавать проекты которые объединяют, казалось бы, разные сферы IT: компьютерное зрение и фронтенд, «железо» и облачные технологии. Истина — в коммуникации между людьми.

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

Курс Job Interview Crash Course від Enlgish4IT.
Отримайте 6 шаблонів відповідей на співбесіді, які ви зможете використовувати для структурування своїх відповідей. Отримайте знижку 10% за промокодом ITCENG.
Приєднатися

Этот материал – не редакционный, это – личное мнение его автора. Редакция может не разделять это мнение.

Топ-5 самых популярных блогеров марта

PHP Developer в ScrumLaunch
Всего просмотровВсего просмотров
1898
#1
Всего просмотровВсего просмотров
1898
Founder at Shallwe, Python Software Engineer (Django/React)
Всего просмотровВсего просмотров
111
#2
Всего просмотровВсего просмотров
111
Career Consultant в GoIT
Всего просмотровВсего просмотров
93
#3
Всего просмотровВсего просмотров
93
CEO & Founder в Trustee
Всего просмотровВсего просмотров
92
#4
Всего просмотровВсего просмотров
92
Рейтинг блогеров

Ваша жалоба отправлена модератору

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: