Как распознать автомобильный номерной знак (ANPR) по изображению?
У меня есть веб-сайт, который позволяет пользователям загружать изображения автомобилей, и я хотел бы установить фильтр конфиденциальности для обнаружения номерных знаков на транспортном средстве и их размытия.
Размытие не является проблемой, но есть ли библиотека или компонент (предпочтительно с открытым исходным кодом), который поможет найти лицензию на фотографии?
Предостережения;
- Я знаю, что нет ничего идеального, и распознавание изображений этого типа обеспечит ложные положительные и отрицательные стороны.
- Я ценю, что мы могли бы попросить пользователя выбрать область размытия, и мы тоже это сделаем, но вопрос заключается именно в том, чтобы найти эти данные программно; поэтому такие ответы, как "попросите человека проверить каждое изображение", бесполезны.
- Этот программный метод называется "Автоматическое распознавание номерных знаков" в Великобритании, но я не вижу его реализации в виде библиотек.
- Любой язык хорош, хотя предпочтительнее.Net.
12 ответов
Я кодировал версию C# на основе JAVA ANPR, но я изменил функции библиотеки awt с OpenCV. Вы можете проверить это на http://anprmx.codeplex.com/
РЕДАКТИРОВАТЬ: я написал сценарий Python для этого.
Поскольку ваша цель размыта (для защиты конфиденциальности), вам в основном нужен детектор с высоким уровнем отзыва в качестве первого шага. Вот как это сделать. Включенные подсказки кода используют OpenCV с Python.
- Преобразовать в оттенки серого.
Примените Gaussian Blur.
img = cv2.imread('input.jpg',1) img_gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY) img_gray = cv2.GaussianBlur(img_gray, (5,5), 0)
Пусть входное изображение будет следующим.
- Примените фильтр Собела, чтобы обнаружить вертикальные края.
Порог результирующего изображения с использованием строгого порога или бинаризации OTSU.
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 <= форматное соотношение <= 8, 500 <= площадь <=15000 и угол <= 45 градусов)
Все minAreaRect()
s показаны оранжевым цветом, а тот, который удовлетворяет нашим критериям - зеленым.
- После этого шага могут быть ложные срабатывания, для фильтрации используйте граничную плотность. Плотность края определяется как количество белых пикселей / общее количество пикселей в прямоугольнике. Установите порог для плотности края. (Я использовал 0,5)
- Размытие обнаруженных областей.
Вы можете применять другие фильтры, которые вы считаете подходящими, чтобы увеличить отзыв и точность. Обнаружение также может быть обучено с использованием HOG+SVM для повышения точности.
На GitHub есть новая библиотека с открытым исходным кодом, которая поддерживает ANPR для американских и европейских планшетов. Это выглядит довольно точно, и оно должно делать именно то, что вам нужно (распознавать области пластины). Вот проект GitHub: https://github.com/openalpr/openalpr
Я сталкивался с этим, который написан на java javaANPR, я также ищу библиотеку aC#.
Я хотел бы систему, где я мог бы направить видеокамеру на некоторые парусные лодки, у всех из которых есть большие, идентифицируемые числа на них, и заставить это идентифицировать лодки и посылать твит, когда они проплывают мимо видеокамеры.
Я немного погуглил об этом пару месяцев назад. Есть довольно много статей на эту тему, но я никогда не нашел конкретной реализации с открытым исходным кодом. Существует множество коммерческих реализаций, но ни одна из них не имеет ценового предложения, поэтому они, вероятно, довольно дороги.
Попробуйте эту простую автоматическую систему распознавания номерных знаков
Открытый исходный код и написано с C#
Посмотрите на Java ANPR. Бесплатное распознавание номерного знака...
http://licenseplate.sourceforge.net/ Python (я не проверял это)
Высокопроизводительная библиотека ANPR - http://www.dtksoft.com/dtkanpr.php. Это коммерческий, но они предоставляют пробный ключ.
Да, я использую gocr на http://jocr.sourceforge.net/ это приложение командной строки, которое вы можете запустить из своего приложения. Я использую его в нескольких своих приложениях.
Может быть, это сработает, если взглянуть на программное обеспечение для восстановления символов, поскольку существует множество библиотек, которые выполняют ту же функцию. Я читаю образ и храню его. Офис Micrsoft может читать TIFF файлы и возвращать буквенно-цифровые символы
Размытие не является проблемой, но есть ли библиотека или компонент (предпочтительно с открытым исходным кодом), который поможет найти лицензию на фотографии?
Ответ: Программный движок CARMEN FreeFlow ANPR (коммерческий)