Фейсконтроль на входе в Пятёрочку
Видео из Телеграм канала: https://t.me/moscowmap/77209
Видео из Телеграм канала: https://t.me/moscowmap/77209
Финансовый университет при Правительстве Российской Федерации, Юридический факультет огорожен колючей проволокой. Нас от них или их от нас?
Чиновники отписались:
Типа они так защищаются. Забора не достаточно? А чего зинитные установки не поставили тогда, а то ненадежная защита какая-то.
Всем привет!
Если вы читали мои статьи 2022 года — вы знаете эту историю. Если нет — краткое содержание: Я IT-шник, у меня случайно появилась ip-камера, думал что с ней сделать, прикрутил к ней распознавание номеров и установил на подоконник следить за парковкой, написал об этом статью "для себя", и неожиданно получил отклик сообщества.
Мои старые статьи:
Первая часть
Вторая часть
Это было приятно. Я не ожидал.
Потом проект тихо умер.
Нет, не из-за какой-то конкретной причины. Просто я сделал что хотел — система работала, номера читала, ворота открывались. Задача выполнена. Развивать дальше не стал. Сначала я отключил из розетки Raspberry PI, потом в дождь зависла камера, отключил и её. Raspberry PI я отформатировал спустя время уже под другой проект. Код лежал где-то на диске, покрывался пылью, и в какой-то момент просто... потерялся.
Даже скриншотов интерфейса не осталось. Нечего плохой код хранить — говорю я себе утешая, когда становится грустно от этого факта. Потому что было бы здорово запустить старую версию рядом с новой и сравнить. ДО и ПОСЛЕ. Но увы.
А люди всё равно писали. Периодически в личку прилетало что-то вроде "а проект ещё живой?". Я честно отвечал: нет, заброшен, RIP. При этом чувствовал лёгкую вину.
Так прошло почти четыре года.
"Попробовать ещё раз" — эта мысль возвращалась регулярно. Но была одна проблема: я не понимал как сделать хорошо. Просто повторить то же самое — смысла нет. Сделать лучше — а что значит лучше? Все-таки это не совсем не мое направление деятельности, я не разбираюсь в видеонаблюдении. Никогда не пользовался подобным софтом, чтобы посмотреть как оно сделано у больших компаний. Мой максимум, связанный с распознаванием номеров - это фото штрафа на госуслугуах с моим авто)))
За четыре года я стал заметно опытнее в IT-инфраструктуре. И в какой-то момент картинка в голове наконец сложилась — я понял что хочу сделать и примерно представлял как.
Так что я сел и написал это заново. С нуля.
Зачем это нужно дома или в небольшом бизнесе
Если вы первый раз слышите о распознавании номеров — давайте разберёмся зачем это вообще нужно дома или в небольшом бизнесе. Когда мне писали с вопросом "жив ли проект" я иногда так-же спрашивал какой вариант использования их интересует. Таким образом, хоть немного появилось понимание того, что нужно сделать.
Сценарии на самом деле очень разные:
Въезд во двор или на парковку. Камера видит машину, читает номер, открывает шлагбаум или ворота. Никаких брелоков, никаких карточек — свои заехали, чужие нет.
Автосервис или автомойка. Машина въезжает — система фиксирует номер и время. Никто ничего не записывает вручную, история въездов всегда под рукой.
"Умное" Видеонаблюдение. Камера на воротах дачи или во дворе — хочется знать какие машины приезжали, когда и сколько раз, без просмотра часов записи.
Звучит как что-то дорогое и корпоративное? В этом и была идея — сделать так, чтобы это мог установить любой человек у себя дома за разумные деньги и без специальных знаний.
Логика работы моей системы простая:
Система состоит из нескольких частей.
Камера — обычная IP-камера с RTSP-потоком. Никакого специального железа, подойдёт любая приличная камера за 3–10 тысяч рублей. Главное — нормальный поток и видимость номерного знака. Место установки играет очень важную роль.
Детектор — локальный сервис, который смотрит в камеру и думает. Для каждой камеры — отдельный детектор. Внутри работает YOLOv8, нейросеть, которая находит автомобили в кадре. Когда машина найдена — в дело вступает распознавание номера. В первой версии 2022 года это делал облачный сервис, сейчас всё работает локально.
База данных — все события, номера и фотографии хранятся у вас. Никуда не отправляется.
Веб-интерфейс — открываете браузер, заходите на локальный адрес, видите ленту событий, историю, настройки. Работает с телефона и компьютера, никакой установки приложений.
Всё это поднимается через Docker Compose одной командой. Установка занимает минуты, не часы. Да, если вы только только освоили смену шрифта в Word - будет сложно.
Лента событий. Главная страница. Каждое событие: фотография машины, распознанный номер, уверенность распознавания в процентах, время, камера. Лента обновляется в реальном времени, новые события появляются сверху без перезагрузки страницы.
История событий. Полная история с фильтрами: по номеру (работает частичный поиск), по дате, по камере, по типу транспорта. Выгружается в CSV — открывается в Excel.
Профили детектора. Это одна из вещей, которой не было в первой версии. Разные сценарии требуют разных настроек — машина едет через шлагбаум со скоростью 5 км/ч и машина на трассе делают 90 км/ч — совсем разные истории. Когда я тестировал детектор на разных видео, то понял: универсального подхода нет. Код обрастал переменными, и я сгруппировал их в готовые профили.
Въезд / Ворота — медленный подъезд, одна машина в кадре.
Парковка — машина может долго стоять, не нужно получать сотни одинаковых событий.
Трасса — быстрое движение, нужна быстрая реакция а требования к распознаванию можно снизить.
Пробка / Перекрёсток — много машин одновременно, едут медленно.
Выбираете профиль под ваш случай — система настраивается автоматически. Хотите покрутить параметры вручную — можно.
Автоматический — детектор непрерывно смотрит в камеру. Увидел машину — проанализировал — сохранил событие. Подходит для въезда, парковки, любого места где нужна непрерывная фиксация.
Ручной — детектор пассивен, держит актуальный снимок с камеры. Событие создаётся только когда оператор нажимает кнопку. Удобно там, где оператор и так видит машину — например на проходной.
Казалось бы, написал детектор — теперь нужно его проверить. Берёшь камеру, смотришь на дорогу, смотришь как система работает. Всё просто.
Только вот камеру я давно отключил. А даже если бы включил — у меня во дворе поток машин такой что за день наберётся материала на пять минут тестирования. Не густо.
Окей, думаю — найду открытые RTSP-потоки с камер наблюдения где-нибудь в интернете. Трафик, парковки, въезды. Такое же есть, правда?
Есть. Но не то.
Нашёл несколько потоков с камер на трассах по всему миру. Машины есть. Но едут где-то на горизонте, номера в кадр не попадают вообще. Нашёл камеры в США — там отдельная история: во многих штатах передний номерной знак не обязателен. Камера стоит удачно, машины едут прямо на неё, угол хороший — а номеров спереди просто нет. У половины машин. Законно.
В итоге я пошёл на YouTube. Скачивал записи с пробками, парковками, хайвэями — и гонял их через детектор как видеофайлы. Это и стало моим полигоном. Немного криво, немного не то — но работало. Все шесть профилей настроек появились именно так, на чужих записях из интернета. Т.к под каждое новое видео мне приходилось постоянно менять множество значений переменных, я просто их сгруппировал и выбирал нужную группу при загрузке каждого отдельного видео.
Вот некоторые примеры того, как я тренировался:
Первое видео — с него начал:
Вариант с неподвижными машинами в кадре:
Пробка — много машин, едут медленно, номер то открывается, то перекрывается:
Проход по парковке:
Я показываю вам честно как оно есть, мой код не идеален. Есть ошибки. Но я еще веду разработку.
Я назвал бесплатную версию Community Edition. Не только потому что так принято, а потому что так понятно. Разработку я начал с полностью облачной версии, где вся система будет расположена на моих серверных мощностях, но пока временно ушел от этой реализации.
CE работает полностью локально. Никакого облака, никаких серверов на моей стороне, никакой подписки. Вы скачиваете, разворачиваете у себя, данные остаются у вас. Всё.
CE будет в открытом доступе (GitHub). Пока я дописываю документацию, провожу тесты и довожу до состояния, которое мне будет не стыдно показать.
Сначала я хотел полностью дописать систему и только потом рассказывать о ней. Но разработка в одиночку — тратит очень много времени и сил. Когда проект будет закончен — не очень понятно. Поэтому решил не ждать и поделиться тем что есть уже сейчас.
Может ваша поддержка пополнит мои запасы энтузиазма. А может выяснится что тема уже никому не интересна — тоже полезно знать.
В следующей части разберём детектор изнутри: как YOLOv8 находит машины в кадре, почему распознавание номера — это отдельная и нетривиальная задача, и как система справляется когда в кадре одновременно пять машин. Будет скучно и много текста)
Еще, очень хочется придумать проекту имя и это неожиданно самая сложная задача.
Если есть вопросы или сценарий который хотите обсудить — пишите в комментарии. Читаю всё.
До встречи!
На одной работе нас заставили пройти корпоративное обучение по информационной безопасности. Обычный такой курс: не передавайте пароль коллегам, не открывайте подозрительные файлы, не оставляйте компьютер разблокированным, если отошли за чаем.
Я сначала отнёсся к этому спокойно. Ну курс и курс. Нажимаешь “далее”, отвечаешь на вопросы, получаешь галочку в системе. Вопросы были примерно такие, чтобы человек почувствовал себя уверенно уже на втором слайде.
Например: “Коллега просит ваш логин и пароль, потому что ему срочно нужно зайти в программу. Что вы сделаете?” И варианты: дать пароль, отправить в чат, записать на бумажке или никому не давать.
Я выбрал правильный ответ и почувствовал себя почти специалистом по информационной безопасности.
Потом ещё был короткий блок по охране труда. Там объясняли, что если из розетки идёт дым, лучше сообщить ответственному, а не делать вид, что так и было.
В конце пришёл сертификат. Красивый такой, с моим именем и датой. Я теперь мог документально подтвердить, что не буду отправлять пароль в общий чат и постараюсь не игнорировать дым из стены.