Распознавание номеров железнодорожных вагонов
Для распознавания номеров железнодорожных вагонов есть такая библиотека - 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/ за подробностями.