1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/liuruoze-EasyPR

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

EasyPR

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

По сравнению с другими системами распознавания номерных знаков, EasyPR имеет следующие особенности:

  • Он основан на открытом источнике OpenCV. Это означает, что вы можете получить все исходные коды и перенести его на все платформы, поддерживающие OpenCV.
  • Он способен распознавать китайский язык. Например, если номерной знак автомобиля представлен как 苏EUK722, система может точно вывести результат типа std::string "苏EUK722".
  • Его точность высока. При четком изображении, распознавание номерного знака и символов достигает более 80% точности.

Обновление

Настоящее обновление версии OnClickListener 1.6 представляет собой официальную версию, которая включает следующие изменения:

  1. Устранены несколько проблем с текстовыми объявлениями в README.
  2. Добавлен пример проекта C#, который позволяет использовать EasyPR, благодаря @zhang-can.

Внимание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 таких проблем нет.## Предстоящие задачи

  • Создание архитектуры CNN
  • Замена ANN на CNN
  • Расширение системы для распознавания новых видов энергетических автомобилей (в процессе)
  • Расширение системы для распознавания двухместных автомобилей (в процессе)

Кросс-платформенные возможности

На данный момент, кроме Windows, существует множество других версий EasyPR для различных платформ. Некоторые версии могут временно отставать от основной версии.

Существует версия 1.5 без необходимости конфигурации OpenCV, доступная здесь ленивая версия. Она поддерживает только VS2013 и работает только в режимах Debug и 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 основан на версии OpenCV 3.0, поэтому версии 3.0 и выше должны быть совместимыми. Версии ниже 3.0 могут вызывать проблемы совместимости.

Пример

Предположим, что у нас есть следующее исходное изображение, которое требуется распознать для получения номера автомобиля и его цвета:

Исходное изображение EasyPR

После применения первой стадии обработки — детектирования номера автомобиля (PlateDetect) — мы получаем изображение, содержащее только номер автомобиля:

Номер автомобиля в EasyPR

Затем мы применяем процесс OCR к этому фрагменту изображения. В EasyPR этот этап называется распознаванием символов (CharsRecognize). Мы получаем строку, которая содержит цвет и символы номера автомобиля:

«Синий номер: SU EUK722»

Пример кода

Вызов 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);

Эта строка устанавливает отображение окна с результатами. Если значение равно true, то окно будет открыто; если false, то закрыто. При необходимости просмотра результатов рекомендуется открывать это окно, при быстрой работе лучше его закрывать.Окно вывода EasyPR

pr.setDetectType(PR_DETECT_CMSER);

Эта строка устанавливает метод детектирования номера автомобиля в EasyPR. CMER представляет собой метод локализации текста, SOBEL и COLOR представляют методы локализации границ и цвета соответственно. Можно использовать символ | для объединения различных методов.

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 равен OnClickListener, это указывает на успешное распознавание, в противном случае — на неудачу.

Класс CPlate содержит различные сведения о номерах автомобилей, среди которых важнейшие представлены ниже:```cpp CPlate plate = plateVec.at(i); Mat plateMat = plate.getPlateMat(); RotatedRect rrect = plate.getPlatePos(); string license = plate.getPlateStr();


plateMat представляет собой изображение номера автомобиля, rrect — ориентированное прямоугольное положение номера, а license — строковое представление номера, например "синий номер: SU EUK722".

Далее приведено объяснение того, как читается результат распознавания, показанный на следующем рисунке.

![Результаты распознавания EasyPR](resources/doc/res/one_image_detect.jpg)

Первая строка отражает имя файла изображения.

Вторая строка представляет собой GroundTruth номер автомобиля, помеченный суффиксом (g). Третья строка представляет собой распознанный номер автомобиля EasyPR, помеченный суффиксом (d). Эти два значения образуют пару, четвертая строка отражает различие между ними по символам.

Подобное повторяется далее. В данном изображении присутствует три номера автомобиля, поэтому имеются три таких пары. Последние метрики Recall и т.д. представляют общую оценку локализации для всего изображения, учитывающую результаты всех трех пар.

Иногда вместо распознанного номера используется "нет номера" и "No string". "Нет номера" означает "локализация не удалась", а "No string" — "локализация удалась, но разделение символов провалилось".

### Авторское право

Исходный код и тренировочные данные EasyPR распространяются под лицензией Apache v2.0.Изображения в папке `resources/image/general_test` распространяются под [лицензией GDSL](image/GDSL.txt) (общей лицензией на использование данных).

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

### Структура каталогов

Следующая таблица содержит описание всех каталогов данного проекта:

| Каталог | Описание |
| ------ | ----------|
| src | Все исходные файлы |
| include | Все заголовочные файлы |
| test | Программы тестирования |
| model | Модели машинного обучения |
| resources/text | Таблицы соответствия символов |
| resources/train | Тренировочные данные и их описание |
| resources/image | Изображения для тестирования |
| resources/doc | Соответствующие документы |
| tmp | Каталог для чтения тренировочных данных, требуется создать |

Следующая таблица содержит описание подкаталогов в каталоге `resources/image`:

| Каталог | Описание |
| ------ | ----------|
| general_test | GDTS (общий набор данных для тестирования) |
| native_test | NDTS (локальный набор данных для тестирования) |
| tmp | Каталог для вывода промежуточных изображений при режиме отладки, требуется создать |

Следующая таблица содержит описание подкаталогов в каталоге `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| Набор общих функций|

Ниже приведена таблица с объяснением файлов в директории test:

|Файл| Описание|
|----|---------|
|main.cpp| Главное окно командной строки|
|accuracy.hpp| Батч тестирования|
|chars.hpp| Файлы, связанные с распознаванием символов|
|plate.hpp| Файлы, связанные с распознаванием номерных знаков автомобилей|

Ниже приведена таблица с объяснением файлов в директории train:

|Файл| Описание|
|----|---------|
|ann_train.cpp| Обучение бинарных символов|
|annCh_train.hpp| Обучение серых символов китайского языка|
|svm_train.hpp| Обучение распознаванию номерных знаков автомобилей|
|create_data.hpp| Создание синтетических данных|

### ИспользованиеПожалуйста, обратитесь [сюда](Usage.md).

### Получение помощи

Подробное руководство по разработке и обучению доступно [здесь](http://www.cnblogs.com/subconscious/p/3979988.html).

Если вы столкнулись с какими-либо проблемами во время использования, сообщите нам [здесь](https://github.com/liuruoze/EasyPR/issues).

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

### Благодарности

taotao1233, Qiu Jinshan, Tang Daxia, jsxyhelu, если бы один день (zhoushiwei), учиться и трудиться, Yuan Chengzhi, Shengcheng Xiao Shijiang, GoldRiver, Micooz, мечты времени, Rain Wang, Ren Xue Ji, AhcCom, звездопад ночью, 海豚嘎嘎(车主之家), Liu Chao, Great God Free, а также все доброжелательные студенты, которые помогли данными для EasyPR.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Описание недоступно Развернуть Свернуть
Apache-2.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/liuruoze-EasyPR.git
git@api.gitlife.ru:oschina-mirror/liuruoze-EasyPR.git
oschina-mirror
liuruoze-EasyPR
liuruoze-EasyPR
master