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

Для распознавания номеров железнодорожных вагонов есть такая библиотека - iANRCR SDK. Ссылка: https://intbusoft.com/ianrcr/ 

Её версия 2.0 предназначена для работы с GPU и очень удобна. Смотрите сами. У неё Си-интерфейс библиотек dll, что позволяет вызывать из любого языка программирования. Среди них, инициализация:

INIT_ANRCR init_data = { true, true, 20, 3, true };

 

iANRCRObject object = InitANRCR(init_data);

Где структура инициализации следующая:

struct INIT_ANRCR

{

       bool only_8_symbols; // возвращать номера только, если в них не менее 8 символов

       bool memory_sum;     // суммирование результатов из разных кадров

       unsigned char memory_sum_interval;  // интервал кадров

       unsigned char min_frames; // минимальное количество кадров, где распознался номер

       bool control_number; // нужно ли контролировать номер контрольной цифрой

};

 

 Затем для каждого кадра вызывается функция распознавания:

OUT_ANRCR result = ProcessANRCR(object, image);

Где image - это cv::Mat - матрица изображения OpenCV, а выходной результат определяется так:

const int max_characters = 20;

const int max_numbers = 20;

// Структура, возвращающая результат распознавания номера

struct NUMBER_ANRCR

{

       char number[max_characters + 1];

       cv::Rect rect_number;

       float reliability;

};

 

// Выходная структура

struct OUT_ANRCR

{

       int all_objects;

       NUMBER_ANRCR objects[max_numbers];

 

};

Как только запустится обработка первого кадра, то начнётся инициализация видеокарты с помощью Tensorflow, которая займет несколько секунд:

Но зато потом все работает довольно быстро (с учетом сложности задачи). На карте RTX 2080 - это 0.2 секунды 1 кадр. Результат работы вы можете посмотреть на картинке в начале статьи.

В конце не забудьте удалить объект:

DeleteANRCR(&object);

Если вас интересует данная библиотека, то обратитесь на сайт https://intbusoft.com/ за подробностями.