Читаем номерной знак с 10 линиями кода на Python
Любое компьютерное зрение не является тривиальной задачей, и обнаружение номерного знака не является исключением.
Если вы подумаете об этом, нам, людям, будет легко классифицировать то, что на изображениях, — но проблема возникает, когда вы хотите автоматизировать этот процесс. Компьютеры не могут «видеть» так, как мы можем, поскольку они могут только понимать числа, и определение правил для массивов чисел — это, в основном, то, к чему сводятся любые задачи компьютерного зрения (в значительной степени упрощенно).
Итак, в сегодняшней статье я быстро продемонстрирую возможности OpenALPR API для следующих действий:
- Читать текст с номера
- Определить марку автомобиля
- Определить цвет автомобиля
Опять же, нам так легко взглянуть на изображение автомобиля, и через секунду у нас будет информация по всем вышеперечисленным пунктам. Для компьютеров эта задача намного сложнее — я позволю себе установить OpenCV и попытаться реализовать логику самостоятельно, если вы не согласны со мной.
Немного установки
Для начала вам понадобится учетная запись OpenALPR, для которой вы можете зарегистрироваться здесь. У меня бесплатный тарифный план, и если я не ошибаюсь, он позволит вам делать 50 запросов в месяц. Этого недостаточно для коммерческих целей, но оно точно подойдет вам для исследования.
Если в какой-то момент вам понадобится больше, вот планы, из которых вы можете выбрать:
Basic: 25 000 запросов в месяц = $ 99 долларов в месяц
Pro: 125 000 запросов / месяц = $ 395 / месяц
Enterprise: 1 000 000 запросов / месяц = $ 1995 / месяц
Это ни в коем случае не дешево, но если у вас есть стоянка, которая обслуживает 1 млн. Автомобилей в месяц, то я предполагаю, что 2 тысячи не так уж много для современной системы считывания номерных знаков.
В любом случае, после регистрации вы получите доступ к своей панели инструментов, и в ней вы можете перейти в раздел API CarCheck, чтобы получить ключ API:
Нам это понадобится позже при отправке запросов, но об этом чуть позже.
Круто, давайте теперь посмотрим на изображение, которое мы будем использовать для тестирования API.
Давайте получим изображение
Я искал в Интернете изображения автомобилей с номерным знаком, которые бесплатны для некоммерческого использования (на самом деле довольно сложно найти то, где номер не размыт). Через некоторое время я нашел довольно приличное изображение приличного автомобиля, и вы можете скачать его по этой ссылке:
Чтение номерных знаков (Читаем номерной знак)
Когда дело доходит до импорта, нам понадобятся только две библиотеки:
base64
requests
Да, вы правильно прочитали. Вам не нужно устанавливать какие-либо библиотеки для использования OpenALPR, что значительно упрощает потенциальное развертывание в будущем.
И теперь приходит та часть, которую мы так долго ждали. Вот шаги, которые мы должны предпринять, чтобы прочитать номерной знак с данного изображения:
- Прочитайте изображение и закодируйте его с помощью base64
- Сделайте POST-запрос к API с данными параметров, являющимися закодированным изображением
- Найдите ответ JSON, чтобы получить значения, которые нам нужны
Это кажется легким, верно? Вот полный код:
В итоге мы получили Цвет, Номер авто, Регион, Брэнд, Год авто, естественно можно было больше указать критериев.
Помните, что я разделил переменную url на две строки, чтобы изображение было более читабельным для вас. Также обратите внимание, как можно указать параметр страны внутри URL-адреса, чтобы получить лучшие результаты, если вы заранее знаете, к какой стране принадлежит номерной знак.
Как видите, с помощью всего лишь нескольких строк кода нам удалось получить столько полезной информации из изображения. Для тех, кто не знаком с компьютерным зрением, для разработки такого решения могут потребоваться месяцы и месяцы работы, и сомнительно, насколько вы были бы удовлетворены результатами в итоге. Читаем номерной знак.
Прежде чем ты уйдешь
И вот, у вас это есть — всего за несколько строк кода нам удалось выполнить современную работу по компьютерному зрению (ну, вроде, мы только что обратились к API).
Бесплатный план подойдет вам для изучения, но подумайте над разработкой полного решения самостоятельно, просто для удовольствия. Может быть, это будет темой для другого времени, так что дайте мне знать, если вас это заинтересует.
А если вам лень кодить то загрузите изображение прям к ним на сайт:
На мой взгляд мы добились неплохих результатов, но если присмотритесь то на номере регистрационного знака автомобиля отсутствует цифра 1, хотя номера просматриваются хорошо. Но это может баг сайта так как точность составила 91.82%.
Но если проанализировать точность распознание номера, то она очень высока, с точность 91.82% система распознала правильный номер.
Возможно будет интересна наша подборка — Лучшие книги по Flask для Python-разработчиков.