Распознавание номеров автомобилей linux

Saved searches

Use saved searches to filter your results more quickly

You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.

Script that can make detection of a car number-plate and recognize it

AlexandrVP/Car-number-plate-detection-and-recognition

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

README.md

Скрипт выполняющий детектирование и распознование автомобильного номера

В качестве детектора обучена использована модель ssd_inception_v2 из tensorflow object detection model zoo.
Данные для обучения датасет с номерами РФ. Обучающая выборка — около 3000 изображений.
Также использованы вспомогательные функции входящие в состав tensorfow Object detection API (визуализация детектирования и тд).
В качестве OCR — tesseract

  • m — режим работы: 0 — режим детектирования на изображении; 1 — режим видео-детектирования.
  • i — путь к изображению для детектирования, для режима детектирования на изображении.

В случае режима детектирования на изображении — изображение с bbox’ом вокруг детектированного номера,
список со строками распознанных номеров.
В случае детектирования на видео — окно с детектированием в реальном времени, вывод списка строк с распознанными номерами.

Настройка окружения для запуска скрипта:

Скрипт для своей работы использует несколько вспомогательных инструментов, а именно:

  • tensorflow object detection API — для работы с нейросетевой моделью SSD_inception_v2 переобученную для обнаружения номеров автомобилей;
  • tesseract — в качестве open source OCR движка;
  • а также сопутсвующие и вспомогательные Python библиотеки и фреймворки;
Читайте также:  Linux iso fedora 32 bit

Для запуска скрипта необходимо выполнить следующие действия:

  1. Выполнить установку tensorflow object detection API
    • клонировать репозиторий tf models в любую удобную для себя директорию;
    • добавить в переменную PYTHONPATH (или PATH на выбор) следующие пути (для Linux слэши в другую сторону — / ):
      [ директория tensorflow models ]\research;
      [ директория tensorflow models ]\research\slim;
      [ директория tensorflow models ]\research\nets;
      [ директория tensorflow models ]\research\object_detection;
      [ директория tensorflow models ]\research\object_detection\utils;
  2. Выполнить установку tesseract tesseract для Windows (не забыть при установки выбрать русский язык), tesseract для Linux или для Linux можно использовать команду:
apt-get install tesseract-ocr-rus 
  • pycocotools — необходим для tensorflow models
    • для Windows
      Важно: вы должны иметь Visual C++ 2015 build tools в переменной PATH.
      Если у вас его нет, установите по сслылке
      Выполните команду:
    pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI 
    pip install cython numpy matplotlib opencv-python path.py pycocotools 
    sudo curl -OL https://github.com/google/protobuf/releases/download/v3.6.1/protoc-3.6.1-linux-x86_64.zip unzip protoc-3.6.1-linux-x86_64.zip -d protoc3 mv protoc3/bin/* /usr/local/bin/ mv protoc3/include/* /usr/local/include/ 
    cd tensorflow/models/research && protoc object_detection/protos/*.proto --python_out=. 

    для Windows

    • скачать Nugetпо ссылке
    • добавить папку с nuget.exe в переменную среды PATH
    • загрузить Google.Protobuf.Tools с помощью команды:
    nuget.exe install Google.Protobuf.Tools 
    cd tensorflow/models/research protoc object_detection/protos/*.proto --python_out=. 

    Готово! Можно запускать!

    В командной строке либо терминале ввести:
    Для изображений:

    python car_number_detector_ssd.py -m 0 -i image_to_detection.jpg 
    python car_number_detector_ssd.py -m 1 

    Возможные варианты улучшения:

    • улучшение OCR функции — на данный момент используется tesseract;
    • улучшение предобработки изображения перед OCR;
    • выравнивание номера перед подачей на OCR, удаление искажений.

    Иные возможные пути решения задачи:

    • Использовать детектор граней из opencv для нахождения прямоугольной рамки номеров (распространенное решение в сети), но если на номерахблики или грязь то работать не будет.
    • Использовать каскады Хаара для детектирования номеров — каскады шумят (много ложных детекций).
    • Использование кастомного OCR решения.

    About

    Script that can make detection of a car number-plate and recognize it

    Источник

    Написать скрипт Opencv для распознования гос.номеров автомобилей

    Требуется написать скрипт (ниже набросок функциональности) Первый вариант. Распознования госномеров автомобилей используя opencv. Скрипт на входе принимает изображение, на выходе формирует массив: распознанный номер, вероятность.

    Второй вариант. Подавать на вход живой video4linux поток. Скрипт должен возвращать массив: распознанный номер, вероятность, метка времени, имя потока.

    Постановка задачи общая, точной оценки времени и сроков не жду.

    Опыт работы над аналогичными задачами есть?

    Опыт работы над аналогичными задачами есть?

    Были бы компитенции, сам написал бы! или я не понял о чем Вы?

    всё зависит от требований к «вероятность»

    всё зависит от требований к «вероятность»

    А вероятность зависит от качества метериала переданного на вход.

    Не проще взять готовое решение, коих куча?

    Не проще взять готовое решение, коих куча?

    Предложите кучу вариантов под Linux

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

    проблема не в самом распознавании знаков, а в том, как на снимке определить область, где они находятся.

    Один из алгоритмов поиск прямоугольника

    . к тому же, номер может быть грязный и т.д. в целом,

    Грязный номер и есть грязный номер.

    задача выходит довольно сложная.

    petav ★★★★★ ( 12.08.15 12:48:28 MSK )
    Последнее исправление: petav 12.08.15 12:48:44 MSK (всего исправлений: 1)

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

    Вообще, задача действительно очень сложная. Я работал в фирме, где реализовывалось свое решение, код там был ну очень сложный. Еще из узких мест — скорость обработки. Наша распознавалка успевала 24 кадра в секунду (780*512), а вот сторонние редко могли 15 обработать.

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

    С Вашей кучей все понятно!

    Если учесть, что область узкоспециализирована, то даже 5 уже куча.

    Наша распознавалка успевала 24 кадра в секунду (780*512), а вот сторонние редко могли 15 обработать.

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

    Если учесть, что область узкоспециализирована, то даже 5 уже куча.

    Закончите свою мысль, конкретными 5 наименованиями софта, пожалуйста.

    Железом выступал обычный комп, заточки под него не было. На наших железках скорость была и того больше (успевало обрабатывать поток видео 2 мегапикселя).

    вот и я о том же. мы на прошлой работе делали распознавание номеров банкнот в банковских сортировщиках. там тоже номер может быть запачкан, повреждён или искажён, так или иначе. задачка та ещё. правда, мы делали всё на чистом С, ибо была нужна высокая скорость (у нас было требование по скорости не менее 20 банкнот в секунду). и, кроме всего прочего, с распознаванием проблем было довольно много.

    petav ★★★★★ ( 12.08.15 13:24:53 MSK )
    Последнее исправление: petav 12.08.15 13:34:50 MSK (всего исправлений: 1)

    Если мне не изменяет память, вот годнота http://vit.ua

    Угу. Одним скриптом, как пишет ТС, явно не отделаешься. Да и с самим распознаванием не так всё просто. У меня есть некий относительный опыт программирования для систем машинного распознавания изображений, очень небольшой и скорей экспериментальный. Не считаю себя докой в вопросе, но столкнуться пришлось с кучей подводных камней.

    Сорри, я так понял, что решить задачу предложено вам, но вы не знаете, сколько может стоить работа))

    Deleted ( 12.08.15 15:16:41 MSK )
    Последнее исправление: rht 12.08.15 15:17:31 MSK (всего исправлений: 1)

    Сорри, я так понял, что решить задачу предложено вам, но вы не знаете, сколько может стоить работа))

    И тем не менее, для одного и того же видеоматериала две разные системы покажут разную «вероятность». Насколько разную от уровня простой демки из OpenCV надо показать экспоненциально будет зависеть цена системы.

    Три раза перечитал, кроме того, что чем лучше система будет работать, тем дороже она будет стоить не увидел другого посыла. Что само собой разумеется. Надо сказать, что ценность здесь в алгоритмах, которые будут использоваться, в том числе применение машинного обучения. Вы это имели ввиду? Естественно подразумеваются, что необходимы самые эффективные алгоритмы распознавания номеров, с учетом особенностей задачи. Система либо работает, либо не работает. Чуть работает мало кого может устроить.

    В итоге самое сложное здесь алгоритм, а не реализация.

    А чего читать? Надо указать «вероятность» в ТТХ что бы цену системы оценить. Хотя бы по отношению к «вероятности» распознавания «в рукопашную».

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

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

    PS Интересно имеющие доступ к инсталляциям этих системам бизнес не открыли, по разработке «искажения номеров в пределах ПДД» (то есть на взгляд человека «проблем нет») делающих невозможным распознавание номера конкретной системой? 🙂

    Источник

Оцените статью
Adblock
detector