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

OSCHINA-MIRROR/abcc009-EasyPR

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

EasyPR

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

В отличие от других систем распознавания номерных знаков, 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 и работает только в режиме отладки и 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 и выше должны быть совместимы, а более ранние версии могут вызывать несовместимость.### Пример

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

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

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

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

Затем мы обрабатываем этот фрагмент изображения с помощью 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 — закрыто. При необходимости просмотра результатов обнаружения рекомендуется открыть окно, при быстром выполнении — закрыть.

Окно вывода EasyPR

	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".

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

Результаты обнаружения EasyPRПервая строка представляет имя файла изображения.

Вторая строка представляет 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 )

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

Введение

EasyPR — это открытая система для распознавания номерных знаков на китайских автомобилях, цель которой стать простым, эффективным и точным инструментом для распознавания номерных знаков в неструктурированных условиях. Развернуть Свернуть
Apache-2.0
Отмена

Обновления

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

Участники

все

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

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