EasyPR — это открытая система распознавания номерных знаков на китайском языке, цель которой — стать простой, эффективной и точной библиотекой для распознавания номерных знаков в условиях, не требующих специальных ограничений (unconstrained situation).
В отличие от других систем распознавания номерных знаков, EasyPR имеет следующие особенности:
В этом обновлении версия OnClickListener 1.6 является официальной версией, и были внесены следующие изменения:
Внимание1. Для версий OpenCV 3.2 и выше, если возникают проблемы с компиляцией, например, ошибки, связанные с "ANN_MLP", попробуйте изменить #define CV_VERSION_THREE_ZERO на #define CV_VERSION_THREE_TWO в файле config.h. 2. Для Linux систем рекомендуется использовать версии OpenCV 3.2 и выше. Версии ниже 3.2, такие как 3.0 и 3.1, могут привести к пустым результатам распознавания номерных знаков. Для надежности рекомендуется обновить все до последней версии 3.2. В Windows версии этой проблемы нет.## Запланированная работа
В настоящее время, кроме Windows, существуют версии EasyPR для следующих платформ. Некоторые версии могут временно отставать от основной платформы.
Существует версия 1.5 без необходимости настройки OpenCV, доступная по ссылке ленивый вариант. Она поддерживает только VS2013 и работает только в режиме отладки и x86. Для других случаев все же потребуется настройка OpenCV. Благодарим Фан Ваньцзи за помощь. Необходимо скачать оба файла с этой страницы, после чего распаковать их с помощью 7zip.
Версия | Разработчик | Версия | Адрес |
---|---|---|---|
C# | zhang-can | 1.5 | zhang-can/EasyPR-DLL-CSharp |
Android | goldriver | 1.4 | linuxxx/EasyPR_Android |
Linux | Micooz | 1.6 | Интегрирован с EasyPR |
iOS | zhoushiwei | 1.3 | zhoushiwei/EasyPR-iOS |
Mac | zhoushiwei, Micooz | 1.6 | Интегрирован с EasyPR |
Java | fan-wenjie | 1.2 | fan-wenjie/EasyPR-Java |
Ленивая версия | fan-wenjie | 1.5 | git/oschina |
Предположим, что у нас есть следующее исходное изображение, которое нужно распознать для получения номера автомобиля и его цвета:
После обработки EasyPR первым этапом — обнаружение номера автомобиля (PlateDetect) — мы получаем изображение, содержащее только номер автомобиля:
Затем мы обрабатываем этот фрагмент изображения с помощью OCR-процесса, который в EasyPR называется распознаванием символов (CharsRecognize). Мы получаем строку, содержащую цвет и символы номера автомобиля:
"Синий номер: СУЕУК722"
Вызов EasyPR очень прост, вот пример кода:
CPlateRecognize pr;
pr.setResultShow(false);
pr.setDetectType(PR_DETECT_CMSER);
vector<CPlate> plateVec;
Mat src = imread(filepath);
int result = pr.plateRecognize(src, plateVec);
Сначала мы создаем объект CPlateRecognize pr, затем устанавливаем его свойства.
pr.setResultShow(false);
Эта строка устанавливает, будет ли открыто окно вывода результатов EasyPR. Если значение true, окно будет открыто, если false — закрыто. При необходимости просмотра результатов обнаружения рекомендуется открыть окно, при быстром выполнении — закрыть.
pr.setDetectType(PR_DETECT_CMSER);
```Эта строка устанавливает метод обнаружения номера автомобиля, используемый EasyPR. CMER представляет метод обнаружения текста, SOBEL и COLOR — методы обнаружения по краям и цвету соответственно. Методы можно комбинировать с помощью символа "|".```c++
pr.setDetectType(PR_DETECT_COLOR | PR_DETECT_SOBEL);
Кроме того, можно установить другие свойства:
pr.setLifemode(true);
Эта строка устанавливает режим "жизни", который может быть использован при методе обнаружения SOBEL для увеличения области поиска и повышения устойчивости.
pr.setMaxPlates(4);
Эта строка устанавливает максимальное количество номеров автомобилей, которое EasyPR будет искать. Если в изображении больше n номеров автомобилей, EasyPR выведет только n наиболее вероятных номеров.
Теперь рассмотрим методы объекта pr
. Метод plateRecognize()
принимает два параметра: первым является входное изображение, вторым — выходной вектор CPlate
.
vector<CPlate> plateVec;
Mat src = imread(filepath);
int result = pr.plateRecognize(src, plateVec);
Когда результат result
равен 0, это означает успешное распознавание, в противном случае — неудачу.
Класс CPlate
содержит различные сведения о номерном знаке, среди которых важные следующие:
CPlate plate = plateVec.at(i);
Mat plateMat = plate.getPlateMat();
RotatedRect rrect = plate.getPlatePos();
string license = plate.getPlateStr();
plateMat
представляет изображение номерного знака, rrect
— ориентированный прямоугольник положения номерного знака, license
— строка номерного знака, например, "синий знак: SU EUK722".
Рассмотрим, как читать результаты распознавания, представленные на следующем рисунке.
Первая строка представляет имя файла изображения.
Вторая строка представляет GroundTruth номерного знака, обозначенный суффиксом (g). Третья строка представляет распознанный номерной знак EasyPR, обозначенный суффиксом (d). Они образуют пару, четвертая строка представляет разницу между символами двух номерных знаков.
Также следующие строки имеют аналогичное представление. В данном изображении присутствуют три номерных знака, поэтому имеются три пары. Последние показатели Recall и т. д. представляют оценку локализации для всего изображения, учитывающую результаты трёх пар.
Иногда распознанный номерной знак может быть заменён на "нет номерного знака" и "No string". "Нет номерного знака" означает "локализация неудачна", "No string" означает "локализация успешна, но разделение символов провалено".
Исходный код и тренировочные данные EasyPR распространяются под лицензией Apache v2.0.
Изображения в папке resources/image/general_test подчиняются GDSL лицензии (общая лицензия на обмен данными).
Пожалуйста, убедитесь, что вы ознакомились с условиями вышеупомянутых лицензий перед использованием.
Ниже приведена таблица, объясняющая все каталоги данного проекта:| Каталог | Описание | ------ | ---------- | src | Все исходные файлы | include | Все заголовочные файлы | test | Тестовые программы | model | Модели машинного обучения | resources/text | Таблица соответствия китайских символов | resources/train | Тренировочные данные и пояснения | resources/image | Тестовые изображения | resources/doc | Сопутствующие документы | tmp | Каталог для чтения тренировочных данных, необходимо создать самостоятельноНиже приведена таблица, объясняющая подкаталоги каталога resources/image:
Каталог | Описание |
---|---|
general_test | GDTS (общий тестовый набор данных) |
native_test | NDTS (локальный тестовый набор данных) |
tmp | Каталог для отладки, содержащий промежуточные изображения EasyPR, необходимо создать самостоятельно |
Ниже приведена таблица, объясняющая подкаталоги каталога src:
Каталог | Описание |
---|---|
core | Основные функции |
preprocess | Предварительная обработка SVM |
train | Каталог тренировок, содержащий код для обучения моделей |
util | Вспомогательные функции |
Ниже приведены таблицы, описывающие некоторые ключевые файлы в директории src и их взаимосвязи:
Файл | Описание |
---|---|
plate_locate | Определение местоположения номерного знака |
plate_judge | Определение номерного знака |
plate_detect | Обнаружение номерного знака, представляет собой комбинацию функций определения местоположения и определения номерного знака |
chars_segment | Разделение символов |
chars_identify | Идентификация символов |
chars_recognise | Распознавание символов, представляет собой комбинацию функций разделения и идентификации символов |
plate_recognize | Распознавание номерного знака, представляет собой общий подкласс функций обнаружения номерного знака и распознавания символов |
feature | Функция обратного вызова для извлечения признаков |
plate | Абстракция номерного знака |
core_func.h | Общие функции |
Файл | Описание |
---|---|
main.cpp | Основное окно командной строки |
accuracy.hpp | Пакетное тестирование |
chars.hpp | Файлы, связанные с распознаванием символов |
plate.hpp | Файлы, связанные с распознаванием номерных знаков |
Ниже приведены таблицы, описывающие файлы в директории train:
Файл | Описание |
---|---|
ann_train.cpp | Обучение бинарных символов |
annCh_train.hpp | Обучение символов китайского языка в оттенках серого |
svm_train.hpp | Обучение распознавания номерных знаков |
create_data.hpp | Создание синтетических данных |
Пожалуйста, обратитесь здесь
Подробное руководство по разработке и обучению доступно здесь.
Если у вас возникли какие-либо проблемы при использовании, сообщите нам здесь.
QQ-группы EasyPR: одна группа - 366392603, вторая группа - 583022188, третья группа - 637614031, четвертая группа - 548362608. При добавлении укажите, что вы хотите присоединиться к группе для обсуждения и изучения EasyPR.
liuruoze: версии 1.0-1.2, 1.5
Дельфин Гага (владелец сайта): версия 1.3, улучшил точность определения местоположения номерного знака и распознавания символов
Micooz: версии 1.3-1.4, переработка архитектуры, поддержка Linux и Mac, поддержка OpenCV 3.0, конвертация в UTF-8* jsxyhelu: версия deface 1
zhoushiwei: версия deface 2
ahccom: новый функционал plateLocate
Айс: версия 1.3, интеграция данных и другие работы
fan-wenjie: версия 1.5, интеграция OpenCV
Free: версия 1.6, предоставитель данных
taotao12333, Цуй Цзиншань, Тан Дацзя, jsxyhelu, Если有一天(zhoushiwei), Учеба и борьба, Юань Ченчжи, Святой город маленький каменщик, Goldriver, Micooz, Мечты во сне, Rain Wang, Рен Сюэ Цзи, ahccom, Звездопад пыли, Хайдунь гага(владелец дома), Лоу Чао, Free дайшен, а также всем, кто внес вклад в EasyPR.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )