Распознавание номеров автомобилей для шлагбаума своими руками
Управления шлагбаумом с помощью модуля AutoTRASSIR
Функционально существует 2 основные реализации управлением шлагбаумом с помощью модуля AutoTRASSIR:
1. Первый вариант управления шлагбаумом, где TRASSIR распознаёт номера и подаёт сигналы шлагбауму на открытие и закрытие.
Подготовка и условия:
— В модуле AutoTRASSIR должны быть заполнены внутренние и \ или внешние списки номеров.
— Активирован и настроен скрипт Auto Universal
— В TRASSIR подключено исполнительное IP-устройство c активированными выходами GPIO или подключен сторонний СКУД позволяющий управлять его исполнительными устройствами.
В самом TRASSIR, в качестве исполнительного IP-устройства могут выступать как видеокамера так и регистратор с выходами GPIO или отдельное устройство UniPing.
Отдельные модели регистраторов на TRASSIR OS оснащены собственными GPIO выходами.
Если используются две камеры (отдельно на въезд и на выезд), то для управлением шлагбаумом достаточно одного GPIO выхода. Например, если решено использовать в качестве исполнительного устройства тревожный выход камеры, то достаточно подключить к шлагбауму только один выход любой из камер.
Варианты реализации тревожных выходов могут отличаться (сухие контакты, открытый коллектор и др.). Как правило, у контроллеров шлагбаума, для подачи управляющего сигнала, необходимо физически замкнуть два выхода (нажатие физической кнопки), поэтому внимательно изучите, какой вариант выхода используется в исполнительном устройстве и какую схему необходимо реализовать для имитации нажатия кнопки.
Логика работы:
1. Модуль AutoTRASSIR распознаёт номер или получает уже распознанный номер от камеры (AutoTRASSIR HW) и записывает его в базу данных с советующими атрибутами (номер, направление движения, принадлежность к спискам)
2. Скрипт Auto Universal, по полученному событию, проверяет распознанный номер и, при совпадении заданных условий, подает управляющий сигнал на требуемый выход GPIO или исполнительное устройство СКУД.
3. Закрытие, как правило, происходит автоматически по датчикам самого шлагбаума. Настройки скрипта позволяют реализовать различные сценарии, в том числе и ручное открытие / закрытие по горячей клавише.
2. Второй вариант реализации управления шлагбаумом через СКУД.
Логика работы:
1. Модуль AutoTRASSIR распознаёт номер или получает уже распознанный номер от камеры (AutoTRASSIR HW) и записывает его в базу данных с советующими атрибутами (номер, направление движения, принадлежность к спискам)
2. СКУД запрашивает информацию о распознанном номере у TRASSIR и на основании собственных списков номеров и настроек самостоятельно принимает решение о открытии / закрытии шлагбаума.
К примеру, СКУД Sigur подключается к ПО TRASSIR, получает номера в реальном времени, производит их анализ и выполняет заданные действия:
Такие интеграции производились со стороны разработчиков СКУД и по всем вопросам настройки СКУД необходимо обращаться в компанию-производителя СКУД.
Системы распознавания номеров на практике
Наверняка каждый сталкивался с историями – «Здравствуйте, мне надо проехать в компанию, которая у вас на территории находится», получая в ответ, что «пропуск не заказан», «нельзя» или и вовсе глухие ворота высотой метра 4. Притом сам въезд как правило охраняется очень разным контингентом – от не совсем трезвого дяди Васи со стаей собак до реальных профи на важных объектах.
Как это может быть?
Как обычно устроен въезд?
На въезде на территорию обычно стоит контрольно-пропускной пункт (КПП). Чаще всего это строение для размещения в нем сотрудника охраны или службы безопасности, плюс разные сочетания противоподкатных препятствий или столбов (боллардов), ворот с автоматическим приводом, «падающих деревьев» (именно так дословно переводится der Schlagbaum с немецкого языка), брелков и пультов для управления этими штуками, считывателей различных идентификаторов.
Вот так выглядит типовой КПП на стандартных объектах (фото с Яндекс.Карт)
Например, тут есть и будка КПП небольших размеров, и ограждающие ширину проезда бетонные блоки, и шлагбаум и даже противоподкатные шипы. В данном случае управление всеми техническими средствами исключительно ручное: брелок на открытие шлагбаума у дежурного в расчет не идет.
Проезд машин на таком КПП чаще всего осуществляется по бумажным спискам. Списки составляются по звонку или, в лучшем случае, по письму от руководителей отделов. Здесь человеческий фактор налицо, а возможность восстановить картину событий даже через день весьма посредственная. Если понадобится провести какое-то расследование, то оно будет основываться исключительно на показаниях людей. Возможно, его ещё можно будет дополнить кадрами из архива системы видеонаблюдения, в котором еще придется выискивать нужную информацию, так как тегов с маркой или номером машины там никто не проставляет в реальном времени. Результат — низкая достоверность отчетной информации и огромные временные затраты на составление прокотола.
Три стадии КПП
Понятно, что первая категория не требует больших денежных вложений. Защита объекта и возможность достоверно восстановить картину событий отсутствуют. «Зарегистрированные» пользователи проезжают, предъявляя выставленный под лобовым стеклом кусок картона или лист бумаги с напечатанным «пропуском», остальные идут к вахтёру и объясняют цель визита, далее их либо пропускают под их честное слово, либо сверяют с бумажным списком.
Пример оснащения въезда автоматическим шлагбаумом
Вторая категория потребует некоторых денежных вложений на приобретение и установку технических средств. Однако по-прежнему уровень защиты является посредственным – человеческий фактор в качестве возможного ложного допуска сыграет свою роль, ведение логов событий отсутствует. Доступ чаще всего осуществляется с помощью радиобрелков. Эта категория хороша лишь тем, что позволяет «зарегистрированным» пользователям (например, сотрудникам компании ) заезжать на территорию с большим комфортом, остальных будут пропускать, как и в случае №1.
Пример КПП 3-й категории
Третья категория КПП с персональными идентификаторами уже обладает «интеллектом». Для начала — появляется возможность вести и сохранять протоколы событий проезда.
Правда, тут тоже есть нюансы: например, если нужно опускать стекло и тянуться картой-пропуском к считывателю, это не очень удобно. Можно использовать считыватели и идентификаторы на базе радиосигнала с хорошим радиусом действия — это добавит комфорт при проезде для зарегистрированных пользователей. Правда, и тут не обойдется без человеческого фактора, так как проезд чужой машины по заявке, даже если она формируется в электронном виде и сохраняется в системе, все равно осуществляется путем нажатия кнопки на пульте управления преграждающего устройства (его тип и исполнение в данном случае не важны). Получается, что данный тип оснащения все равно оставляет русскому изобретательному уму лазейки для получения собственной выгоды.
Когда несколько месяцев назад наши безопасники осознали этот простой и печальный факт, мы начали искать решение, которое можно будет применять и у нас, и на объектах заказчиков.
Решение на практике
Вводная: есть офисный центр, у которого есть два въезда и один выезд. На территории — многоярусная стоянка для автомобилей сотрудников и гостей. Исходно въезд и выезд на территорию оснащены контрольно-пропускным пунктом с системой контроля и управления доступом (СКУД), включающей в себя автоматические шлагбаумы, которые управляются СКУД, а СКУД, в свою очередь, использует уникальные персональные идентификаторы для принятия решения о доступе. Сначала работали с RFID-метками, которые располагались в машинах и выдавались сотрудникам.
Условием для получения RFID-метки служило предоставление информации о машине – марки и госномера. С момента внедрения системы данная информация стала персональной, т.е. начала попадать под действие закона о защите персональных данных (это отдельный вопрос). Задача по проезду гостей решалась через электронную заявку на разовый пропуск с указанием данных о машине. Таким образом, в рассматриваемой системе сохранялась точная информация о проездах сотрудников с привязкой к точке и времени проезда и информация о дате посещения компании гостем на определенной машине.
Со временем сотрудники меняли машины, и лишь самые сознательные сообщали актуальную информацию. RFID-метка легко переносилась в другую машину: в результате начался зарождаться бардак: это привело к потере актуальной информации о стоящей на автостоянке машине. Когда на одном из уровней мы нашли ржавую девятку, то прошерстили базу машин и поняли, что сотрудники научились подолгу хранить неиспользуемые машины на стоянке, пользуясь тем, что привязки автомобиль-водитель нет. Это, конечно, не конец света, но сигнал о проблеме — отсутствии актуальной информации у службы безопасности. Как следствие — невозможность быстро найти владельца машины в случае действительно серьезных инцидентов. Так и возникла задача отслеживания проезда конкретного сотрудника на конкретной машине.
Был вариант оснащения автомобилей различными стационарными метками, которые крепятся на кузове машины, но это оказалось не очень целесообразным при расчётах: если такую машину угоняют или меняют, затраты слишком велики. Плюс пришлось бы получать разрешение каждого сотрудника на прикручивание непонятного предмета к кузову (как правило, в пространстве под бампером).
В итоге решили остановиться на использовании системы видеоаналитики номеров машин. При этом нужно было подключить распознавание к текущей СКУД, чтобы была связка человек-машина. Идеальным решением стало новое голландское решение, которое показывали на выставке MIPS 2012. Что приятно, голландцы сразу разрабатывали свою систему распознавания с учётом особенностей российского рынка и рынка восточной Европы, в частности, с точной подстройкой по особенностям номеров и шрифтов.
В отличие от других решений, интеграция прошла дешевле (примерно в два раза дешевле существующих тогда на рынке вариантов) и намного проще. Дело в том, что железка больше напоминает «чёрный ящик» — по сути, только отдаёт число, уникально соответствующее госномеру автомобиля. Её интерфейс стандартный, поэтому достаточно просто воткнуть новое устройство вместо старого идентификатора радиометок – и вся система после минимальных настроек работает на ура.
Устройство
Штука называется ANPR – Automatic Number Plate Recognition. Состоит из модуля с телекамерой и светодиодной подсветкой со встроенным контроллером, на котором «крутится» вся аналитика по распознаванию номера, и модуля-конвертора для подключения этой системы в систему контроля доступа как внешнего считывателя. Итого у нас всего две коробочки, которые для СКУД являются обычным считывателем, передающим уникальный идентификатор. Идентификатором является госномер машины, который по специальному алгоритму преобразуется в цифровой код, понятный СКУД. Общая схема работы системы — картинка вверху топика.
Система может работать и напрямую с любым исполнительным преграждающим устройством. В этом случае потребуется только модуль ANPR без модуля-конвертора, так как у ANPR есть релейный выход для управления внешними устройствами. Понятно, что при таком подключении теряется важная часть сохранения событий проезда в СКУД, остается только протокол событий на самом устройстве. Одним словом, на любой запрос и любую задачу возможна нужная конфигурация системы без лишних затрат.
Производитель дает четкие инструкции по высоте и дальности установки системы от линии, на которой должно выполняться распознавание. Обоим устройствам необходимо питание с постоянным напряжением 24 В, для конфигурирования модулей и удаленного управления они оснащены портами LAN. На модуле ANPR есть web-интерфейс и встроенный FTP-сервер.
Все параметры настроек понятны и легко изменяются, а через FTP-соединение можно скачать кадры, сделанные при проезде автомобилей. Есть настройки размера, качества картинки. Параметры записи по событиям позволяют хранить кадры без перезаписи в течение месяца или же настроить автоматическое сохранение кадров на внешнем FTP-сервере.
Настройки параметров обработки изображения позволяют ограничить область для распознавания, чтобы исключить попадание сразу двух госномеров, или задать параметры считывания номера для ускорения передачи информации о нем в СКУД.
Вот так выглядит законченная установка системы на выезде с территории
Модуль с телекамерой и подсветкой работает в любых режимах, независимо от времени суток и погодных условий, а для системы распознавания важно получение контрастной картинки. Из этого сразу становятся понятны ответы на возможные вопросы – «А как это работает, если номер грязный?», «А что, если номер испорчен?». Ответ заключается в понимании степени загрязненности или испорченности номера.
Примеры
Ниже – примеры распознаваемых номеров (в том числе с нестандартным размещением, в плохую погоду и т.д.), а также пара картинок с номерами, которые распознать не удается.
Обратите внимание, что в левом верхнем углу кадра размещается информация о распознанном госномере, дате, времени и количестве распознаваний за время перемещения машины в поле зрения телекамеры.
Информация непосредственно на записываемом кадре
А на внутреннюю карту памяти записывается файл с теми же данными, в итоге при необходимости быстро найти данные в архиве по конкретной машине можно просто поискать файл по госномеру. Выглядит имя файла вот так:
2012-08-17_09-21-41-842_CAR_H714MY71-RUS_4
Установка госномера выше, чем у обычных легковых автомобилей. Распознаётся.
А это любитель совсем нештатного места установки. Распознаётся.
Работа системы в дождь. Номер чистый. Распознаётся.
Первая цифра и первая буква значительно размыты. Не распознается!
Один из нескольких погнутых номеров. Распознается с ошибкой: T 954 KP 19RUS.
Резюме
Система себя оправдывает для любых организаций и предприятий, с любым количеством своих и чужих автомобилей, где важно значительно снизить человеческий фактор, повысить актуальность информации о проезжающих автомобилях и всегда иметь возможность выполнить быстрый анализ и получить отчет.
Опыт тестовой эксплуатации в течение месяца позволил значительно поднять уровень актуальности данных об эксплуатируемых автомобилях, так как у сотрудников появился стимул сообщить эти данные, ведь новая система позволяла проезжать быстрее, не отвлекаясь на нажатие кнопки на RFID-метке.
И под занавес, предвосхищая вопросы и предложения по способам обмана системы, хочу напомнить, что эта система предназначена для санкционированного доступа, поэтому с точки зрения безопасности важнее не пропустить автомобиль со «странным» госномером, чем наоборот. Для безнадежно испорченных номеров всегда остается вариант проезда по RFID-метке, однако таких машин совсем мало, и теперь охрана точно знает их владельца в лицо, а машину по характерному номеру. Любители специально проверить граничные условия работоспособности системы распознавания вольны выбирать – спокойно заехать на охраняемую парковку или искать место на улице с известным риском вернуться после работы к поцарапанной или битой машине (такие случаи, увы, уже были).
Автоматическое распознавание автомобильных номеров на Raspberry Pi
Leo Matyushkin
Рассмотрим задачу создания собственной системы автоматического детектирования и распознавания автомобильных номеров на основе открытой библиотеки OpenALPR. Такие системы применяются не только в карательных целях, чтобы штрафовать водителей, превышающих разрешенную скорость. Так, установленная на контрольном пункте система распознавания сокращает время ожидания водителей перед шлагбаумом и снижает нагрузку постового. Программа сверяет распознанный номер с базой, разрешая или запрещая въезд транспорта. Другое применение – оптимизация городского или локального трафика через трекинг передвижения автомобилей и общественного транспорта по камерам наружного наблюдения. Мы будем рады, если вы поделитесь своими идеями применения таких систем в комментариях.
Что мы хотим сделать?
Итак, когда в кадре видеонаблюдения оказывается автомобиль, система должна обнаружить знак и распознавать его в виде строки, состоящей из набора символов. Нахождение объектов в видеопотоке – задача из области компьютерного зрения. При беглом поиске в интернете можно найти множество публикаций, посвященных распознаванию номеров, но. чаще всего на одном единственном примере. Такие решения, конечно, не универсальны. Автомобильные номера в поле зрения камеры оказываются под разными углами, в меняющихся условиях освещения, могут иметь загрязнения и повреждения. Кроме того, в кадре может одновременно находиться несколько автомобилей.
Универсальные системы требуют обучения на сотнях тысяч предварительно распознанных примеров. Для этого, кроме предообработки изображений, используется глубокое обучение на основе нейросетей. Процесс их тренировки требует наличия мощных видеокарт или распределенных вычислительных систем. В то же время результат в виде предобученной нейросети для распознавания символов вполне может работать и на одноплатных компьютерах, например, Raspberry Pi. Это снижает издержки внедрения и использования технологии.
Таким образом, кроме самой платы, понадобятся следующие инструменты:
OpenALPR – это библиотека для автоматического распознавания табличек с буквенно-численными символами, написанная на C++ с интерфейсом для Node.js, Python, Java, Go и C#. Под аббревиатурой OpenALPR скрывается Automatic License Plate Recognition (автоматическое распознавание автомобильных номеров). Пакет предоставляет как открытую библиотеку для разработки собственных приложений, так и платный агент (при желании использовать готовое решение). Библиотека работает как со статичными изображениями, так и с видеопотоком. Документация проекта.
Ниже мы подробно рассмотрим установку OpenALPR на примере Raspberry Pi третьей модели с учетом нюансов. Обратите внимание: при установке важно учитывать зависимости и конкретные версии библиотек.
1. Выполняем update и upgrade ОС
По умолчанию мы предполагаем, что на плате стоит наиболее популярная операционная система для рассматриваемой платы – Raspbian. Все шаги выполняются на правах администратора (root). Начать нужно с двух стандартных команд, обновляющих операционную систему:
2. Устанавливаем необходимые пакеты
Перед установкой OpenALPR необходимо разобраться со всеми необходимыми зависимостями:
То же можно выполнить в виде однострочной команды:
Tesseract использует библиотеку leptonica версии 1.71, поэтому предварительно ее установим:
3. Устанавливаем основные библиотеки нужных версий
Как было сказано выше, в основе OpenALPR лежат две библиотеки:
Чтобы предупредить возможные трудности, опишем процесс установки подробнее.
3.1. Tesseract OCR
Скачиваем (клонируем) пакет с git:
Если все прошло успешно, вы получите сообщение:
После того как мы настроили библиотеку, запустим компиляцию:
На Raspberry процесс занимает много времени. Поэтому запускаем команду с опцией j2 (в два потока). В случае если это вызовет проблемы, запускайте команду make без дополнительных параметров. Устанавливаем скомпилированное:
Проверяем результат компиляции:
Видим номер версии, библиотека установлена.
3.2. OpenCV
Если всё закончится хорошо, мы получим следующее сообщение:
В первый раз процесс может закончиться следующей ошибкой:
Это может быть вызвано нехваткой памяти. Срабатывает следующий набор действий:
Чтобы увеличить файл подкачки, выполняем следующую последовательность:
После того как удастся успешно скомпилировать OpenCV, производим установку:
4. Устанавливаем OpenALPR
Наконец, мы можем установить саму OpenALPR. Клонируем репозиторий и проверяем версию:
Если после запуска make выводится ошибка, аналогичная случаю с установкой OpenCV, выполняем вышеописанную последовательность действий для OpenCV. Если обнаруживаются ошибки, связанные с отсутствием библиотек:
Протестируем полученный результат:
Всё работает. Слева — распознанный номер, справа — вероятность его соответствия реальному номеру на изображении.
Чтобы настроить связку библиотеки с С/С++Java, C#, Java или Python, ознакомьтесь с соответствующим разделом официальной документации. Например, использов связку с Python, вы можете построить систему из нескольких веб-камер, взаимодействующих с общим сервером, обращаясь к отдельным камерам только в случае нестандартных ситуаций, когда номер оказался не распознан.
Распознавание номеров. Практическое пособие. Часть 1
Все начиналось банально — моя компания уже год платила ежемесячно плату за сервис, который умел находить регион с номерными знаками на фото. Эта функция применяется для автоматической зарисовки номера у некоторых клиентов.
И в один прекрасный день МВД Украины открыло доступ к реестру транспортных средств. Теперь по номерному знаку стало возможным проверять некоторую информацию про автомобиль (марку, модель, год выпуска, цвет и т.д. )! Скучная рутина линейного программирования померкла перед новой свехзадачей — считывать номера по всей базе фото и валидировать эти данные с теми, что указывал пользователь. Сами знаете как это бывает «глаза загорелись» — вызов принят, все остальные задачи на время стали скучны и монотонны… Мы принялись за работу и получили неплохие результаты, чем, собственно и решили поделиться с сообществом.
Для справки: на сайт AUTO.RIA.com, в день добавляется около 100 000 фото.
Кто еще распознает
Год назад я изучил этот рынок и оказалось, что работать с номерами стран exUSSR умеет не так уж много сервисов и ПО. Ниже представлен список компаний с которыми мы работали:
Automatic License Plate Recognition
Recognitor
Какие инструменты нужны для распознавания номеров
Нахождение объектов на изображении или в видео-потоке это задача из области компьютерного зрения, которая решается разными подходами, но чаще всего с помощью, так-называемых, сверточных нейронных сетей. Нам нужно найти не просто область на фото в которой встречается искомый объект, но и отделить все его точки от других объектов или фона. Эта разновидность задач называется «Instance Segmentation». На иллюстрации ниже визуализированы разные типы задач компьютерного зрения.
Я не буду сейчас писать много теории о том как работает сверточная сеть, этой информации достаточно в сети и докладов на youtube.
Из современных архитектур сверточных серей для задач сегментации часто используют: U-Net или Mask R-CNN. Мы выбрали Mask R-CNN.
Второй инструмент, который нам понадобится — это библиотека по распознаванию текстов, которая бы могла работать с разными языками и которую можно легко настраивать под специфику текстов, которые мы будем распознавать. Тут выбор не так уж велик, самой продвинутой является tesseract от Google.
Так же есть ряд менее «глобальных» инструментов, с помощью которых нам нужно будет нормализовать область с номерным знаком (привести его в такой вид, при котором распознавание текста будет возможным). Обычно для таких преобразований используют opencv.
Так же, можно будет попробовать определить страну и тип, к которой относится найденный номерной знак, чтоб в постобработке применить уточняющий шаблон, характерный для этой страны и этого типа номера. Например, украинский номерной знак, начиная с 2015 года оформлен в сине-желтом оформлении состоит из шаблона «две буквы черыре цифры две буквы».
Кроме того, имея статистику частоты «встречания» в номерных знаках того или иного сочетания букв или цифр можно улучшить качество постобработки в «спорных» ситуациях. «
Nomeroff Net
Все материалы для нашего проекта: размеченные датасеты и натренированные модели, мы выложили в открытый доступ с разрешения RIA.com под лицензией Creative Commons CC BY 4.0
Что нам понадобится
Для того, чтобы ускорить установку планируем создать dockerfile — ожидайте в ближайших апдейтах проекта.
Nomeroff Net «Hello world»
Давайте уже что-то попробуем распознать. Клонируем с github-а репозиторий с кодом. Качаем в папку models, натренированные модели для поиска и классификации номеров, немного подправим под себя переменные с расположением папок.
UPD: Этот код является устаревшим, он будет работать только в ветке 0.1.0, свежие примеры смотрите здесь:
Все, можно распознавать:
Онлайн демка
Набросали простенькую демку для тех кому не хочется все это ставить и запускать у себя :). Будьте снисходительны и терпеливы к скорости работы скрипта.
Если нужны примеры украинских номеров (для проверки работы алгоритмов коррекции), возьмите пример из этой папки.
Что дальше
Я понимаю, что тема очень нишевая и вряд ли вызовет большой интерес у широкого круга программистов, кроме того, код и модели еще достаточно «сыроваты» в плане качества распознавания, быстродействия, потребления памяти и пр. Но все же есть надежда, что найдутся энтузиасты, которым будет интересно натренировать модели под свои нужды, свою страну, которые помогут и подскажут, где есть проблемы и вместе с нами сделают проект не хуже, чем коммерческие аналоги.
Известные проблемы
Анонс
Если это будет кому-то интересно, во второй части собираемся рассказать о том как и чем размечать свой датасет и как тренировать свои модели, которые могут работать лучше для вашего контента (вашей страны, вашего размера фото). Также поговорим о том как создать свой классификатор, который, например, поможет определять не зарисован ли номер на фото.