Как распознать автомобильную лицензию / номерной знак (ANPR) с изображения?
У меня есть веб-сайт, который позволяет пользователям загружать изображения автомобилей, и я хотел бы поставить фильтр конфиденциальности для выявления регистрационных знаков на транспортном средстве и стирают их.
размытие не является проблемой, но есть ли библиотека или компонент (предпочтительный с открытым исходным кодом), который поможет найти лицензию в фотографии?
предостережения;
- Я знаю, что ничто не идеально, и распознавание изображений этого типа обеспечит ложное срабатывание и отрицания.
- Я ценю, что мы можем попросить пользователя выбрать область для размытия, и мы тоже это сделаем, но вопрос заключается в том, чтобы найти эти данные программно; поэтому ответы, такие как "заставить человека проверить каждое изображение", не помогают.
- этот программный метод называется "автоматическое распознавание номерных знаков" в Великобритании, но я не вижу никаких реализаций его как библиотек.
- любой язык велик, хотя .Net предпочтительный.
12 ответов:
я закодировал версию C# на основе JAVA ANPR, но я изменил функции библиотеки awt с помощью OpenCV. Вы можете проверить это на http://anprmx.codeplex.com
EDIT: я написал Python script для этого.
поскольку ваша цель размывается (для защиты конфиденциальности), вам в основном нужен высокий напомним детектор в качестве первого шага. Вот как это сделать. Включенные подсказки кода используют OpenCV с Python.
- преобразование в оттенки серого.
Применить Гауссово Размытие.
img = cv2.imread('input.jpg',1) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)
пусть входное изображение будет следующий.
- применить фильтр Собеля для обнаружения вертикального края.
пороговое значение результирующего изображения, используя строгий порог бинаризации Отсу.
cv2.Sobel(image, -1, 1, 0) cv2.threshold()
примените морфологическую операцию закрытия с использованием подходящего структурирующего элемента. (Я использовал 16x4 в качестве структурирующего элемента)
se = cv2.getStructuringElement(cv2.MORPH_RECT,(16,4)) cv2.morphologyEx(image, cv2.MORPH_CLOSE, se)
результирующее изображение после шага 5.
найти внешние контуры этого изображения.
cv2.findContours(image, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_NONE)
для каждого контура, найдите
minAreaRect()
ограничивающий его.- выберите прямоугольники на основе соотношения сторон, минимальной и максимальной площади и угла с горизонталью. (Я использовал 2.2
все
minAreaRect()
s показаны оранжевым и один который удовлетворяет нашим критериям, находится в зеленом цвете.
- после этого шага могут быть ложные срабатывания, чтобы отфильтровать его, используйте плотность края. Плотность края определяется как количество белых пикселей / общее количество пикселей в прямоугольник. Установите порог для плотности края. (Я использовал 0.5)
- размытие обнаруженных областей.
вы можете применить другие фильтры, которые вы считаете подходящими для увеличения отзыва и точности. Обнаружение можно также натренировать используя HOG + SVM для того чтобы увеличить точность.
на GitHub есть новая библиотека с открытым исходным кодом, которая делает ANPR для американских и европейских пластин. Он выглядит довольно точно, и он должен делать именно то, что вам нужно (распознавать области пластины). Вот проект GitHub: https://github.com/openalpr/openalpr
я наткнулся на этот, который написан на java javaANPR, Я также ищу библиотеку c#.
Я хотел бы систему, где я могу указать видеокамеру на некоторые парусные лодки, все из которых имеют большие, идентифицируемые номера на них, и иметь его идентифицировать лодки и отправить твит, когда они проплывают мимо видеокамеры.
Я сделал некоторые погуглить об этом пару месяцев назад. Есть довольно много статей об этой теме, но я никогда не находил никакой конкретной реализации с открытым исходным кодом. Есть много коммерческих реализаций хотя, но ни один из них не имеет ценового предложения, поэтому они, вероятно, довольно дороги.
попробуйте эту простую автоматическую систему распознавания номерных знаков
с открытым исходным кодом и написано с помощью 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)