Как распознать лицензию транспортного средства / номерной знак (ANPR) по изображению?[закрыто]

StackOverflow https://stackoverflow.com/questions/981378

Вопрос

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

Размытие не является проблемой, но есть ли библиотека или компонент (предпочтительно с открытым исходным кодом), который поможет найти лицензию на фотографии?

Предостережения;

  1. Я знаю, что ничто не идеально, и распознавание изображений такого типа приведет к ложноположительным результатам и негативам.
  2. Я ценю, что мы могли бы попросить пользователя выбрать область для размытия, и мы также сделаем это, но вопрос конкретно заключается в программном поиске этих данных;поэтому такие ответы, как "попросите человека проверить каждое изображение", бесполезны.
  3. В Великобритании этот программный метод называется "Автоматическое распознавание номерных знаков", но я не вижу никаких его реализаций в виде библиотек.
  4. Хотя любой язык хорош .Предпочтительнее использовать Net.
Это было полезно?

Решение

Я закодировал версию C # на основе JAVA ANPR, но я изменил функции библиотеки awt с помощью OpenCV.Вы можете проверить это по адресу http://anprmx.codeplex.com

Другие советы

Редактировать:Я написал Скрипт на Python для этого.

Поскольку ваша цель - размытие изображения (для защиты конфиденциальности), вам в основном нужен высокий вспомнить детектор в качестве первого шага.Вот как это сделать.Включенные подсказки по коду используют OpenCV с Python.

  1. Преобразовать в оттенки серого.
  2. Примените размытие по Гауссу.

    img = cv2.imread('input.jpg',1)
    img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
    img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)  
    

Пусть входное изображение будет следующим.

enter image description here

  1. Примените фильтр Собеля для обнаружения вертикальных краев.
  2. Пороговое значение результирующего изображения с использованием строгого порога или бинаризации OTSU.

    cv2.Sobel(image, -1, 1, 0)
    cv2.threshold() 
    
  3. Примените операцию морфологического закрытия, используя подходящий структурирующий элемент.(Я использовал 16x4 в качестве структурирующего элемента)

    se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4))
    cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)  
    

Результирующее изображение после Шага 5.

enter image description here

  1. Найдите внешние контуры этого изображения.

    cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE) 
    
  2. Для каждого контура найдите minAreaRect() ограничивая его.

  3. Выберите прямоугольники на основе соотношения сторон, минимальной и максимальной площади и угла наклона к горизонтали.(Я использовал 2.2 <= Соотношение сторон <= 8, 500 <= Площадь <=15000, и угол <= 45 градусов)

Все minAreaRect()s показаны оранжевым цветом, а тот, который удовлетворяет нашим критериям, - зеленым.

enter image description here

  1. После этого шага могут быть ложноположительные результаты, чтобы отфильтровать их, используйте плотность границ.Плотность кромок определяется как количество белых пикселей / общее количество пикселей в виде прямоугольника.Установите пороговое значение для плотности ребер.(Я использовал 0,5)

enter image description here

  1. Размытие обнаруженных областей.

enter image description here

Вы можете применить другие фильтры, которые сочтете подходящими для повышения отзывчивости и точности.Обнаружение также можно обучить с помощью HOG + SVM для повышения точности.

На GitHub появилась новая библиотека с открытым исходным кодом, которая выполняет ANPR для пластинок США и Европы.Это выглядит довольно точно, и оно должно делать именно то, что вам нужно (распознавать области пластины).Вот проект GitHub:https://github.com/openalpr/openalpr

Я наткнулся на этот, написанный на java JavaANPR ( Яванский язык ), Я также ищу библиотеку c #.

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

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

попробуйте эту Простую Автоматическую систему распознавания номерных знаков

http://opos.codeplex.com/

Открытый исходный код и написан на C#

Взгляните на Java ANPR.Бесплатное распознавание номерных знаков...

Да, я использую gocr в http://jocr.sourceforge.net/ это приложение командной строки, которое вы могли бы выполнить из своего приложения.Я использую его в паре своих приложений.

Высокопроизводительная Библиотека ANPR - http://www.dtksoft.com/dtkanpr.php.Это коммерческая программа, но они предоставляют пробный ключ.

http://licenseplate.sourceforge.net Python (я его не тестировал)

Возможно, это сработает, глядя на программное обеспечение для восстановления символов, поскольку существует множество библиотек, которые выполняют то же самое.Я считываю изображение и сохраняю его.Micrsoft office способен считывать файлы tiff и возвращать буквенно-цифровые символы

Размытие не является проблемой, но есть ли библиотека или компонент (предпочтительно с открытым исходным кодом), который поможет найти лицензию на фотографии?

Ans: Программный движок CARMEN FreeFlow ANPR (Коммерческий)

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top