10552
Читаем номерной знак с 10 линиями кода на Python
Читаем номерной знак с 10 линиями кода на Python

Читаем номерной знак с 10 линиями кода на Python

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

Если вы подумаете об этом, нам, людям, будет легко классифицировать то, что на изображениях, — но проблема возникает, когда вы хотите автоматизировать этот процесс. Компьютеры не могут «видеть» так, как мы можем, поскольку они могут только понимать числа, и определение правил для массивов чисел — это, в основном, то, к чему сводятся любые задачи компьютерного зрения (в значительной степени упрощенно).

Итак, в сегодняшней статье я быстро продемонстрирую возможности OpenALPR API для следующих действий:

  1. Читать текст с номера
  2. Определить марку автомобиля
  3. Определить цвет автомобиля

Опять же, нам так легко взглянуть на изображение автомобиля, и через секунду у нас будет информация по всем вышеперечисленным пунктам. Для компьютеров эта задача намного сложнее — я позволю себе установить 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, что значительно упрощает потенциальное развертывание в будущем.

Читаем номерной знак с 10 линиями кода на Python

Теперь мы объявим две переменные, одна из которых содержит путь к изображению вашего автомобиля, а вторая — секретный ключ, полученный хорошими людьми из OpenALPR:
Читаем номерной знак с 10 линиями кода на Python

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

  1. Прочитайте изображение и закодируйте его с помощью base64
  2. Сделайте POST-запрос к API с данными параметров, являющимися закодированным изображением
  3. Найдите ответ JSON, чтобы получить значения, которые нам нужны
    Это кажется легким, верно? Вот полный код:

Читаем номерной знак с 10 линиями кода на Python

В итоге мы получили ЦветНомер авто, РегионБрэндГод авто, естественно можно было больше указать критериев.

Помните, что я разделил переменную url на две строки, чтобы изображение было более читабельным для вас. Также обратите внимание, как можно указать параметр страны внутри URL-адреса, чтобы получить лучшие результаты, если вы заранее знаете, к какой стране принадлежит номерной знак.
Как видите, с помощью всего лишь нескольких строк кода нам удалось получить столько полезной информации из изображения. Для тех, кто не знаком с компьютерным зрением, для разработки такого решения могут потребоваться месяцы и месяцы работы, и сомнительно, насколько вы были бы удовлетворены результатами в итоге. Читаем номерной знак.

Прежде чем ты уйдешь

И вот, у вас это есть — всего за несколько строк кода нам удалось выполнить современную работу по компьютерному зрению (ну, вроде, мы только что обратились к API).
Бесплатный план подойдет вам для изучения, но подумайте над разработкой полного решения самостоятельно, просто для удовольствия. Может быть, это будет темой для другого времени, так что дайте мне знать, если вас это заинтересует.
А если вам лень кодить то загрузите изображение прям к ним на сайт:

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

Но если проанализировать точность распознание номера, то она очень высока, с точность 91.82% система распознала правильный номер.

Возможно будет интересна наша подборка — Лучшие книги по Flask для Python-разработчиков.

источник