Распознавание номеров железнодорожных вагонов на основе iANRCR SDK / Прикладные вопросы распознавания образов / Recog.ru - Распознавание образов для программистов


Распознавание номеров железнодорожных вагонов на основе iANRCR SDK

Распознавание с помощью iANRCR SDK очень просто, поскольку используется библиотека OpenCV. Предположим с камеры поступает стабильное, обрезанное так, как нам нужно изображение:

в формате матрицы OpenCV Mat image.
Переводим изображение в градации серого
Mat gray;
cvtColor(image, gray, CV_BGR2GRAY);

И вызываем функцию распознавания библиотеки
out_param = iANRCR(gray, in_param);

Где in_param определяет настройки распознавания, высоту символов и флаги, например так:
IN_ANRCR in_param = { 18, iANRCR_NO_LOW_REL };

Если номер распознан, то можно вывести его:
if (out_param.all_objects < 0)
{
rectangle(image, R.at(pointer), CV_RGB(255, 255, 255), 1, 8);
// далее вывести номер
}
Результат – на следующем изображении


Если камера наклонена и номера не плоские, а также искажения по области изображения (например, «рыбий глаз»). То не спешите говорить, что библиотека не работает. Вы легко можете:
А) повернуть изображение, например так
Point2f src_center(src.cols / 2.0F, src.rows / 2.0F);
Mat rot_mat = getRotationMatrix2D(src_center, 2, 1.0);
Mat dst;
warpAffine(src, dst, rot_mat, dist2.size(), 1, 0, cvScalar(0));

Естественно указав нужный вам угол
Б) откорректировать изображение, например, с помощью функции CorrectDistorsionANRCR

При поступлении видео на распознавание, достоверность может быть повышена за счет результатов из разных кадров.
Перед начало работы создается буфер, например, так
void* sum = CreateSumBuf(30, 5);

Где 30, это общий размер буфера, а 5 – количество одинаково распознанных номеров, когда выдается результат
После удачного распознавания записываете результат в буфер
res = ProcessSumBuf(sum, out_param.objects[0].number, strlen(out_param.objects[0].number), out, &size_);

после неудачного также
res = ProcessSumBuf(sum, "", 0, out, &size_);

Если res равен нулю, то номер найден

В конце не забудьте очистить буфер.
DeleteSumBuf(&sum);


Подробнее о функциях читайте в документации
http://intbusoft.com/doc/iANRCR.pdf
Скачать библиотеку можно отсюда (Демо)
http://intbusoft.com/download/iANRCRDemo1.0.1.1.ZIP
Страница продукта
http://intbusoft.com/ianrcr/
  • 0
  • 02 сентября 2018, 19:34
  • vidikon

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

RSS свернуть / развернуть

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.