Гриша не молодец

Создал домашнюю систему видеонаблюдения с распознаванием номеров

Всем привет!


INTRO
Статья о том, когда It-шнику становится любопытно. Как я решил при помощи простой ip-камеры создать сервис регистрации проезжающих автомобилей с блек-джеком и шлю… распознаванием номера и определением владельца.

Заранее напоминаю о том, что я пишу непосредственно о системе. Легитимность установки камеры и съемки зависит от конкретных случаев и в некоторых из них запрещена законом.


Часть первая. Зарождение идеи.
Начну рассказ с текущей ситуации. Примерно год назад, очередной раз бродя по интернету я попал в цепкие лапы акций магазинов бытовой техники и зачем-то купил себе камеру "Xiaomi Mi Home Security Camera 1080p Magnetic". С учетом всех скидок, акций и бонусов камера обошлась примерно в 1тыс. рублей.

Камера mi camera magnetic (фото из интернета)

Задача для камеры была поставлена быстро — "наблюдать за происходящим во дворе". Меня интересовала парковка.
Интересный факт, камера лично мне не пригодилась ни разу, но несколько раз меня с утра будили незнакомые люди звонком в дверь и интересовались "моя ли это камера" и "пишет ли она" т.к у них что-то случалось во дворе.

Пример дневной съемки во дворе

Пример ночной съемки во дворе

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

Я решил поставить и настроить вторую камеру так — что бы она снимала конкретный небольшой участок дороги с проезжающими машинами.
Если у меня будут номера, можно создавать базу номеров машин. Зачем? Потому что могу!
Только на этом моя фантазия не остановилась. Номер у меня есть, почему бы не получить по нему информацию?(Марка, модель и.т.д). И как это обычно бывает — на ровном месте я придумал себе хобби-проект.


Часть вторая. Формируем ТЗ.
Идея понятна. Хочу фиксировать все проезжающие машины параллельно распознавая их номера и по возможности получать дополнительную информацию по автомобилю.

Что дальше? Дальше агрегируем требования и формируем задачу.
— Доступ к данным должен быть простым. Писать приложения под каждую платформу(вин, андроид, ios и.т.д.) мне очень не хотелось. Решено, это будет web-приложение с адаптивным под мобильные устройства дизайном.
Доступ из интернета.
— Авторизация — система должна иметь функционал авторизации по логину и паролю.
Регистрация.
Данные должны хранится в БД для возможности быстрого доступа к информации и построения различных отчетов ( сколько раз за день а/м с номером появлялся в поле камеры, самая частая машина за неделю, количество машин в день/неделю/месяц )
— Простота разработки — я бы не хотел писать полностью весь код, т.к я не супер крутой программист. Честно говоря я вообще не считаю себя программистом. Соответственно приоритет будет отдан готовым библиотекам, сервисам — которым можно отдать часть работы на аутсорс.
— Простая масштабируемость — возможно, то, что я сделаю будет полезно кому-то еще. В таком случае, не стоит создавать систему из непонятных инструментов и костылей. Использовать популярные фреймворки.
— Писать код и разрабатывать функционал с учетом использования несколькими пользователями.
— Стоимость — аренда сервера, покупка домена и подключение к сторонним api могут вылиться в копеечку. Мне постоянно стоит напоминать себе что это домашний хобби-проект. Стоит тщательно контролировать расходы.
— Данные по госномеру — очень хотелось бы помимо номера так-же получать подробные данные по госномеру.

И так, основные требования сформулированы. Можно начинать делать? Нет!
Не хочется городить велосипед ( совсем немного конечно хочется, все-таки будет свой родной, из костылей :-) ). Следующим делом стоит изучить рынок, понять что вообще предлагается в сфере видеонаблюдения конечному потребителю.


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

Полный размерзапрос популярен, статей и предложений на рынке достаточно

Полностью готовые решения.
После радости сразу пришло разочарование. Я начал переходить по ссылкам, знакомиться с продуктами и что самое неприятное, их стоимостью. Не буду здесь приводить примеры конкретных продуктов и говорить почему они мне не подошли. В целом, претензии ко всем продуктам были идентичны.
— юзабилити продающего сайта. Да, это ужас. Словно подключился к интернету 2005 года. Подавляющее большинство сайтов были прямиком от туда. Данный факт не имеет прямой корреляции с качеством продукта. Но я был удивлен что в век цифровизации, компании которые продают системы видеонаблюдения или ПО к ним, совсем не думают о важности пользования сайтом.
— дизайн ПО. Примерно тоже самое что и сайт. Добавить особо нечего. ПО как и сайт написано в 2005 и с тех пор директора всех этих фирм запрещают обновлять интерфейс)) .
— закрытость рынка. Получить демку какого-то ПО это отдельная эпопея, нужно обязательно позвонить, написать в мессенджер, оставить заявку на сайте, написать на почту, станцевать танец и сделать жертвоприношение. В общем это лучшая практика чтобы вам никто не звонил и не писал. Отчасти я понимаю что данные системы нацелены на коммерческий сектор, а там высокая клиент-ориентированность не нужна. Торги выиграли и вперед монтировать камеры!

Тем не менее полезные выводы сделаны:
— ознакомившись с интерфейсом подобных программ начал вырисовываться и интерфейс моей системы. Определены основные блоки сайта.


Микросервисы
Теперь стоит посмотреть в сторону open-source решений касающихся распознавания номеров, конечно в первую очередь меня интересовала логика перехвата видеопотока с камеры и анализ картинки, поиск и распознавание российского гос. номера.
Погружаться в нейронные сети и машинное обучение мне не очень хотелось, это сильно замедлит разработку.
Поискав по интернету нашел несколько неплохих по описанию решений. Отфильтровав самые живые в плане комьюнити и апдейтов я решил протестировать Nomeroff Net
Nomeroff Net — это опенсорсный фрейморк написанный на питоне для распознавания номеров автомобилей.
Писать о разворачивании сервера, настройке и установке фреймворка не буду. Статей на эту тему достаточно, для разных уровней пользователей.
По результатам — номер определяется достаточно плохо. Возможно стоит поковырять настройки, но мне этого делать не хотелось т.к на мой взгляд фреймворк из коробки не справился даже с хорошим примером.
На скриншоте вы можете видеть фото с номером, которое я отдал программе и его результат распознавания.

пример распознавания с помощью nomeroff net

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

Часть третья. Обработка видеопотока.
Разобрать номер на изображении это конечно хорошо, но для начала изображение необходимо получить. Первой моей мыслью было напрямую подключаться к камере, каково было мое удивление что ip-камера xiaomi не имеет популярного rtsp протокола для прямого подключения. Что делать? Пришлось прошивать. Кажется бренд xiaomi создан для того, чтобы после покупки его еще приходилось дорабатывать.
Прошивка установлена! Что дальше? Дальше настраиваем подключение к камере и понимаем что качество камеры не позволит нам разбирать номера автомобилей. Почему я не задался этим вопросом раньше? Я держал этот риск в голове изначально. Поэтому в первую очередь меня интересовала логика взаимодействия между узлами системы.
Таким образом первый тестовый стенд распознавания номером выглядел следующим образом:
Ip-камера стоит на столе и направленна на монитор пк где открыты найденные в интернете фотографии различных автомобилей с российскими номерами.

тестовый стенд распознавания номеров

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

Примерную логику работы системы я отобразил на схеме:

ИТОГИ
Идея приобрела формализованный статус и перешла в небольшой хобби-проект. Я понял примерный объем работ. Проведены первые тестовые испытания.
Напишите в комментариях если к данному проекту у вас будет интерес. В следующей части я напишу о том какие изменения я решил внести в логику системы и почему. Опишу как проходила разработка дизайна и подбор оборудования.
p/s на текущий момент система мной написана функционирует в бета режиме.

Менеджеры в армии

Интуитивно понятно

Разработчик: Это просто, пользователи разберутся.


Пользователи: …

Android developer moment

Как обменять год жизни на первый релиз в Google Play

Поделюсь долгожданной радостью. Недавно на Google Play вышла моя первая игра. Небольшой учебный соло-проект игры в стиле hack'n slash с процедурно генерируемыми уровнями, который перерос в полноценную взрослую инди игру, даром что на мобилках. Don't you guy have phones, штоле?

Разработка внезапно затянулась больше, чем на год. Еще летом 21 года, я думал, что выйду максимум месяца через три. Ну а что там сложного? Геймплей простой и понятный - бегай, скелетов тыкай, качай персонажа и фарми лут. Мобилка же. Пыщ-пыщ и в релиз.

Ща, вот только интерфейс красивый нарисую. Ну и вот мобов разных побольше. И чанков окружения. А еще по генератору уровней пара идей есть. И заодно ИИ подтяну. Добавлю мобам абилки. Испытания, кстати, тема. И больших боссов с механиками и фазами а-ля Варкрафт. И чтобы перед ними кат-сцены. О, еще второго игрового персонажа бы и горы лута...

Стало очевидно, что даже к Новому году я не успеваю... Идеи сыпались как из рога изобилия, руки за ними не поспевали.

Ближе к весне 2022, придумывая название для очередной 426-й по счету волшебной кочерги, я понял, что пора бы уже остановиться. Оставить за бортом кучу нереализованных идей и отполировать существующие механики, иначе подобным темпом я вообще никогда не выйду.

Так как все делал сам, пришлось прокачаться в совершенно различных сферах. Геймдизайн, кодинг, работа со звуком и светом, анимации, просчет баланса и прокачки (к слову, раз пять полностью переделывал), постановка кат сцен, дизайн интерфейса - все в одну каску.

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

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

И вот я в релизе. Это было долгое путешествие длиной в год. Стоило ли оно того? Я решил для себя, что стоило. С нуля изучил новый для себя мир разработки мобильный игр. Реализовался как творец. Одни красят солдатиков, другие вяжут кофты. А кто-то просчитывает урон от абилки-рыганины босса в мили и ему норм :)

Поиск меня еще толком не индексирует (а может и санкции -.-), если интересно посмотреть итоговый результат, можно пройти по ссылке https://play.google.com/store/apps/details?id=com.nimuGAMES.... или забить в поиске целиком "dark plane dungeon crawler".


Спасибо за внимание.

п.с. семь сто кота выступали несменным тестером и мотиватором процесса :3  ↓

Два года разработки, тест геймплея!

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

Проект делаем на Unreal Engine 4. На пятый пока еще не перешли, многое написано на плюсах.

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

Оружие разнообразное, гранатомет, лазер ган, пулеметы, ударная волна, щиты и т.п.

Моды тоже разные, даже есть режим арена на выживание, где нужно крушить роботов и соперников. Видео выложим чуть позже:).

Буду рад услышать любую критику, чтобы сделать проект еще лучше)


P.S. кому нравится такой жанр будем рады если поддержите добавлением в вишлист на Стим и подпиской в наш дискорд.

Админам отдельная благодарность, надеюь не забанят).

Спасибо, друзья!

Дизайнеры против покупателей

Shadows of steel moons

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

Возможны баяны!

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

Контакты

© Fastler v 2.0.2, 2022


Мы в социальных сетях: