Как распознать автомобильную лицензию / номерной знак (ANPR) с изображения?


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

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

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

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

12 ответов:

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

EDIT: я написал Python script для этого.

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

    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

все 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 (я его не тестировал)

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

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

Ans:Кармен свободное модуль программного обеспечения двигателя (Commerical)