Распознавание номера авто python
Как можно прочитать номерной знак с 10 линиями кода на питоне (Python)
Самое быстрое руководство по извлечению текста из номерного знака, но и многое другое
Любое компьютерное зрение не является тривиальной задачей, и обнаружение номерного знака не является исключением.
Если вы подумаете об этом, нам, людям, будет легко классифицировать то, что на изображениях, — но проблема возникает, когда вы хотите автоматизировать этот процесс. Компьютеры не могут «видеть» так, как мы можем, поскольку они могут только понимать числа, и определение правил для массивов чисел — это, в основном, то, к чему сводятся любые задачи компьютерного зрения (в значительной степени упрощенно).
Итак, в сегодняшней статье я быстро продемонстрирую возможности OpenALPR API для следующих действий:
Опять же, нам так легко взглянуть на изображение автомобиля, и через секунду у нас будет информация по всем вышеперечисленным пунктам. Для компьютеров эта задача намного сложнее — я позволю себе установить OpenCV и попытаться реализовать логику самостоятельно, если вы не согласны со мной.
Немного установки
Для начала вам понадобится учетная запись OpenALPR, для которой вы можете зарегистрироваться здесь. У меня бесплатный тарифный план, и если я не ошибаюсь, он позволит вам делать 50 запросов в месяц. Этого недостаточно для коммерческих целей, но оно точно подойдет вам для исследования.
Если в какой-то момент вам понадобится больше, вот планы, из которых вы можете выбрать:
Это ни в коем случае не дешево, но если у вас есть стоянка, которая обслуживает 1 млн. Автомобилей в месяц, то я предполагаю, что 2 тысячи не так уж много для современной системы считывания номерных знаков.
В любом случае, после регистрации вы получите доступ к своей панели инструментов, и в ней вы можете перейти в раздел API CarCheck, чтобы получить ключ API:
Нам это понадобится позже при отправке запросов, но об этом чуть позже.
Круто, давайте теперь посмотрим на изображение, которое мы будем использовать для тестирования API.
Давайте получим изображение
Я искал в Интернете изображения автомобилей с номерным знаком, которые бесплатны для некоммерческого использования (на самом деле довольно сложно найти то, где номер не размыт). Через некоторое время я нашел довольно приличное изображение приличного автомобиля, и вы можете скачать его по этой ссылке:
Хорошо, теперь у нас есть аккаунт и изображение. Мы закончили подготовку. Давайте перейдем к хорошим вещам.
Чтение номерных знаков
Когда дело доходит до импорта, нам понадобятся только две библиотеки:
Да, вы правильно прочитали. Вам не нужно устанавливать какие-либо библиотеки для использования OpenALPR, что значительно упрощает потенциальное развертывание в будущем.
Теперь мы объявим две переменные, одна из которых содержит путь к изображению вашего автомобиля, а вторая — секретный ключ, полученный хорошими людьми из OpenALPR:
И теперь приходит та часть, которую мы так долго ждали. Вот шаги, которые мы должны предпринять, чтобы прочитать номерной знак с данного изображения:
В итоге мы получили Цвет, Номер авто, Регион, Брэнд, Год авто, естественно можно было больше указать критериев.
Помните, что я разделил переменную url на две строки, чтобы изображение было более читабельным для вас. Также обратите внимание, как можно указать параметр страны внутри URL-адреса, чтобы получить лучшие результаты, если вы заранее знаете, к какой стране принадлежит номерной знак.
Как видите, с помощью всего лишь нескольких строк кода нам удалось получить столько полезной информации из изображения. Для тех, кто не знаком с компьютерным зрением, для разработки такого решения могут потребоваться месяцы и месяцы работы, и сомнительно, насколько вы были бы удовлетворены результатами в итоге.
Прежде чем ты уйдешь
И вот, у вас это есть — всего за несколько строк кода нам удалось выполнить современную работу по компьютерному зрению (ну, вроде, мы только что обратились к API).
Бесплатный план подойдет вам для изучения, но подумайте над разработкой полного решения самостоятельно, просто для удовольствия. Может быть, это будет темой для другого времени, так что дайте мне знать, если вас это заинтересует.
А если вам лень кодить то загрузите изображение прям к ним на сайт:
На мой взгляд мы добились неплохих результатов, но если присмотритесь то на номере регистрационного знака автомобиля отсутствует цифра 1, хотя номера просматриваются хорошо. Но это может баг сайта так как точность составила 91.82%.
Но если проанализировать точность распознание номера, то она очень высока, с точность 91.82% система распознала правильный номер.
Распознавание номеров. Практическое пособие. Часть 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, свежие примеры смотрите здесь:
Все, можно распознавать:
Онлайн демка
Набросали простенькую демку для тех кому не хочется все это ставить и запускать у себя :). Будьте снисходительны и терпеливы к скорости работы скрипта.
Если нужны примеры украинских номеров (для проверки работы алгоритмов коррекции), возьмите пример из этой папки.
Что дальше
Я понимаю, что тема очень нишевая и вряд ли вызовет большой интерес у широкого круга программистов, кроме того, код и модели еще достаточно «сыроваты» в плане качества распознавания, быстродействия, потребления памяти и пр. Но все же есть надежда, что найдутся энтузиасты, которым будет интересно натренировать модели под свои нужды, свою страну, которые помогут и подскажут, где есть проблемы и вместе с нами сделают проект не хуже, чем коммерческие аналоги.
Известные проблемы
Анонс
Если это будет кому-то интересно, во второй части собираемся рассказать о том как и чем размечать свой датасет и как тренировать свои модели, которые могут работать лучше для вашего контента (вашей страны, вашего размера фото). Также поговорим о том как создать свой классификатор, который, например, поможет определять не зарисован ли номер на фото.
Распознавание номера авто python
Script that can make detection of a car number-plate and recognize it
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Скрипт выполняющий детектирование и распознование автомобильного номера
Настройка окружения для запуска скрипта:
Скрипт для своей работы использует несколько вспомогательных инструментов, а именно:
Для запуска скрипта необходимо выполнить следующие действия:
Выполнить установку tensorflow object detection API
Выполнить установку tesseract tesseract для Windows (не забыть при установки выбрать русский язык), tesseract для Linux или для Linux можно использовать команду:
Установить пакеты для Python:
Cython, Numpy, Opencv, Matplotlib, path.py
необходимо выполнить установку protobuf compiler’а 3-ей версии:
После чего выполнить:
для Windows
скачать Nuget по ссылке
добавить папку с nuget.exe в переменную среды PATH
загрузить Google.Protobuf.Tools с помощью команды:
добавить в переменную среды PATH путь к protoc.exe например D:\Nuget\Google.Protobuf.Tools.3.4.0\tools\windows_x64
Готово! Можно запускать!
В командной строке либо терминале ввести:
Для изображений:
Возможные варианты улучшения:
Иные возможные пути решения задачи:
About
Script that can make detection of a car number-plate and recognize it
Читаем номерной знак с 10 линиями кода на Python
Любое компьютерное зрение не является тривиальной задачей, и обнаружение номерного знака не является исключением.
Если вы подумаете об этом, нам, людям, будет легко классифицировать то, что на изображениях, — но проблема возникает, когда вы хотите автоматизировать этот процесс. Компьютеры не могут «видеть» так, как мы можем, поскольку они могут только понимать числа, и определение правил для массивов чисел — это, в основном, то, к чему сводятся любые задачи компьютерного зрения (в значительной степени упрощенно).
Итак, в сегодняшней статье я быстро продемонстрирую возможности OpenALPR API для следующих действий:
Опять же, нам так легко взглянуть на изображение автомобиля, и через секунду у нас будет информация по всем вышеперечисленным пунктам. Для компьютеров эта задача намного сложнее — я позволю себе установить OpenCV и попытаться реализовать логику самостоятельно, если вы не согласны со мной.
Немного установки
Для начала вам понадобится учетная запись OpenALPR, для которой вы можете зарегистрироваться здесь. У меня бесплатный тарифный план, и если я не ошибаюсь, он позволит вам делать 50 запросов в месяц. Этого недостаточно для коммерческих целей, но оно точно подойдет вам для исследования.
Если в какой-то момент вам понадобится больше, вот планы, из которых вы можете выбрать:
Это ни в коем случае не дешево, но если у вас есть стоянка, которая обслуживает 1 млн. Автомобилей в месяц, то я предполагаю, что 2 тысячи не так уж много для современной системы считывания номерных знаков.
В любом случае, после регистрации вы получите доступ к своей панели инструментов, и в ней вы можете перейти в раздел API CarCheck, чтобы получить ключ API:
Нам это понадобится позже при отправке запросов, но об этом чуть позже.
Круто, давайте теперь посмотрим на изображение, которое мы будем использовать для тестирования API.
Давайте получим изображение
Я искал в Интернете изображения автомобилей с номерным знаком, которые бесплатны для некоммерческого использования (на самом деле довольно сложно найти то, где номер не размыт). Через некоторое время я нашел довольно приличное изображение приличного автомобиля, и вы можете скачать его по этой ссылке:
Чтение номерных знаков (Читаем номерной знак)
Когда дело доходит до импорта, нам понадобятся только две библиотеки:
Да, вы правильно прочитали. Вам не нужно устанавливать какие-либо библиотеки для использования OpenALPR, что значительно упрощает потенциальное развертывание в будущем.
И теперь приходит та часть, которую мы так долго ждали. Вот шаги, которые мы должны предпринять, чтобы прочитать номерной знак с данного изображения:
В итоге мы получили Цвет, Номер авто, Регион, Брэнд, Год авто, естественно можно было больше указать критериев.
Помните, что я разделил переменную url на две строки, чтобы изображение было более читабельным для вас. Также обратите внимание, как можно указать параметр страны внутри URL-адреса, чтобы получить лучшие результаты, если вы заранее знаете, к какой стране принадлежит номерной знак.
Как видите, с помощью всего лишь нескольких строк кода нам удалось получить столько полезной информации из изображения. Для тех, кто не знаком с компьютерным зрением, для разработки такого решения могут потребоваться месяцы и месяцы работы, и сомнительно, насколько вы были бы удовлетворены результатами в итоге. Читаем номерной знак.
Прежде чем ты уйдешь
И вот, у вас это есть — всего за несколько строк кода нам удалось выполнить современную работу по компьютерному зрению (ну, вроде, мы только что обратились к API).
Бесплатный план подойдет вам для изучения, но подумайте над разработкой полного решения самостоятельно, просто для удовольствия. Может быть, это будет темой для другого времени, так что дайте мне знать, если вас это заинтересует.
А если вам лень кодить то загрузите изображение прям к ним на сайт:
На мой взгляд мы добились неплохих результатов, но если присмотритесь то на номере регистрационного знака автомобиля отсутствует цифра 1, хотя номера просматриваются хорошо. Но это может баг сайта так как точность составила 91.82%.
Но если проанализировать точность распознание номера, то она очень высока, с точность 91.82% система распознала правильный номер.
Автоматическое распознавание автомобильных номеров на 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, вы можете построить систему из нескольких веб-камер, взаимодействующих с общим сервером, обращаясь к отдельным камерам только в случае нестандартных ситуаций, когда номер оказался не распознан.