#истории #opencv #хакатон
Как однажды я в CV 👁🗨 хакатоне участвовал
Весной я с коллегой (кстати, он тоже не разработчик) решили поучаствовать в хакатоне по компьютерному зрению iVision 2021. У меня опыта в этой сфере не было, поэтому я готовился изучать что-то новое на предстоящем мероприятии 💫
В нашей категории была дана задача на распознавание свободных парковочных мест 🚗 Организаторы дали видеопотоки нескольких камер и нужно было показывать свободные места в live-режиме 🖥
На втором этапе, на который мы прошли и это было уже достижение, мы дорабатывали раннее созданное нечто 😂 Теперь надо было стать фронтенд-разработчиком и создать веб-приложение в виде карты 🗺, на которой можно наглядно увидеть свободные места, а также бота 🤖 для Telegram, оповещающего о наличии свободного места на конкретной парковке.
Начали думать и искать хотя бы какие-то зацепки, что и как делать. Что-то находилось, но оно не совсем то и не работало в нашем случае 👀 Посмотрели как работает пример с Хабра — работал он откровенно криво и долго.
Затем попробовали библиотеку ImageAI, которая давала уже хоть какие-то результаты по распознаванию автомобилей, но даже она с какой-то большой погрешностью еле-еле могла различить автомобиль 🚗 на некоторых камерах из-за угла наклона. Количество автомобилей сложно было даже глазами посчитать, особенно вдалеке.
Исходя из этого было решено дообучать модель под наши условия 🚴♂️
Следующий этап выборки и разметки данных занимал от 6 до 12 часов и проделывался дважды из-за размеров картинок, влияющих на скорость обработки.
Получилась на время работающая модель с плюс-минус хорошим результатом 🎯
И ещё это дело куда-то задеплоить надо было, тут пришлось стать девопсом 🧙♂️
Я перепробовал 3 сервиса для деплоя: Heroku, Google App Engine и DigitalOcean.
С Heroku было сложно разобраться из-за внутреннего движка и непонятных ошибок, хотя там есть отдельный план для AI/ML приложений, но он платный разумеется.
Google App Engine отказался обрабатывать долгие запросы, такое он увы не поддерживает 🤷♂️
Спасибо DigitalOcean, что не тупил и всё поднял с первого раза 👌 Но ресурсов это съедало много.
Но вскоре нас поджидал главный подвох 🗿
На финальном этапе наша модель поплыла 🚣♀️, потому что растаял мартовский снег, а дело было в апреле уже.
По сути цель задания осталась та же, просто надо было всё красиво оформить в виде веб-странички с картой, на которой видны парковки и свободные места. А с помощью телеграм бота оповещать 📣 о наличии свободного места на определённой парковке.
Надо было что-то быстро создать, поэтому всё было написано в HTML файле, юзая jQuery, и даже ни капли не стыдно, зато что-то работало и удалось разобраться с Google Maps 📈
Telegram бот на Python вполне свои функции выполнял: подписался на парковку, получил уведомление, побежал парковать машину 👍
Только вот с точностью была проблема, модель подвела 🤔
Но несмотря на сложности, это был интересный челлендж 🙌 Мне понравилось пробовать разные решения с их плюсами и минусами, тестировать работу сервиса и получать наглядный результат. Разбивать задачи на подзадачи 🧩 Демонстрировать ход решения в Jupyter Notebook 📝 Вспоминать Python и JavaScript 😊
Извлёк некоторые уроки для себя на будущее, что надо больше изучать и понимать работу алгоритмов, в каких случаях лучше применять. И улучшать работу с фронтенд фреймворками 📚
Post #44
264
- 🔥 3