Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Кубасов С.Е. Разработка ПО распознавания штрихк...docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
4.17 Mб
Скачать
      1. Библиотека генерации и чтения штрихкодов zXing

ZXing (Zebra Crossing) — библиотека с открытым исходным кодом, предоставляющая возможность шифрования и дешифрования штрихкодов с изображений. Использованная версия библиотеки была загружена с помощью пакетного менеджера NuGet, в MS Visual Studio 2012.

Библиотека предоставляет возможность шифрования следующих штрихкодов: UPC-A, EAN-8, EAN-13, Code 39, Code 128, ITF, Codabar, Plessey, MSI, QR Code, PDF-417, Aztec, Data Matrix.

Также она предоставляет возможности расшифрования следующих штрихкодов: UPC-A, UPC-E, EAN-8, EAN-13, Code 39, Code 93, Code 128, ITF, Codabar, MSI, RSS-14 (все варианты), QR Code, Data Matrix, Aztec и PDF-417.

Библиотека поддерживает платформы .Net 2.0, 3.5 и 4.0, Silverlight 4 и 5, Windows Phone 7.0, 7.1 и 8.0, Windows CE, Windows RT Class, Library and Runtime Components (winmd), Portable Class Library, Unity3D и другие.

Выбор данной библиотеки был обусловлен тем, что она является одной из самых удобных и эффективных библиотек шифрования и дешифрования штрихкодов с возможностями кроссплатформенности и открытого кода.

    1. Алгоритм обучения каскада Хаара для задачи распознавания штрихкодов товаров.

Для использования в разрабатываемом программном средстве каскадов Хаара с целью распознавания штрихкодов было принято решение обучить соответствующий каскад с помощью функций библиотеки компьютерного зрения Opencv.

Для осуществления процедуры подготовки обучения каскада необходимо утвердить выборки положительных и негативных изображений (соответственно содержащих искомый объект или объекты (в данном случае штрихкоды) и нет) и сформировать файлы-описатели. Такие выборки возможно создать несколькими способами:

- воспользоваться фото/видео камерой и снять необходимое количество фотографий объекта;

- воспользоваться базой изображений штрихкодов предоставленной фирмой или скачанной из сети Интернет;

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

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

Рисунок 2.1. Пример негативного изображения.

Рисунок 2.2. Пример положительного изображения.

После утверждения выборкой следует формирование вспомогательного описывающего файла и приведение положительных изображений к единому формату. Это позволяет сделать функция opencv_createsamples. Файлы-описатели необходимы как параметры для нее и должны содержать путь в файловой системе к изображениям и координаты искомых объектов на них. Ввиду большого количества изображений для облегчения создания описателей и унификации имен изображений была применена программа «ReNamer v6.2». Пример содержимого описателя и запуск функции с параметрами и показан на рисунках 2.3 и 2.4.

Рисунок 2.3. Содержимое описателя.

Рисунок 2.4. Пример запуска функции с параметрами

В файле-описателе строка «Good\4.bmp 1 0 0 310 310» означает последовательность: путь в системе к файлу относительно opencv_createsamples.exe, наличие одного объекта в прямоугольнике, образуемого точками с координатами (0,0) и (310, 310) (результат работы – успешное создание векторного файла с восемьюстами положительными примерами). В примере запуска функции параметрами являются: полный путь до описателя положительных изображений, имя создаваемого вектор-файла для дальнейшего использования, количество изображений (по умолчанию 1000) и размер шаблона, который должен приблизительно отражать пропорции искомого объекта, но быть достаточно маленьким для возможностей обучения.

Для подсчета итогового каскада используется функция opencv_traincascade. Пример успешного завершения вызова обучающей функции показан на рисунке 2.5. Краткая блок-схема алгоритма обучения каскада представлен на рисунке 2.6.

Рисунок 2.5. Успешное завершение вызова обучающей функции

Параметрами в нем являются:

- data haarcascade — системный адрес папки, для результатов, создаваемой заранее;

- vec samples.vec — адрес посчитанного файла с положительными примерами;

- C:\open3.0\opencv\build\x64\vc12\bin\Bad.dat — адрес файла-описания отрицательных примеров;

Рисунок 2.6. Краткая блок-схема обучения каскада Хаара

- numStages 16 — количество уровней каскада, которые программа будет обучать. Чем больше уровней, тем точнее обучение и тем больше оно занимает времени. Обычно их количество составляет от 16 до 25;

- minhitrate 0.999 — коэффициент, определяющий качество обучения, то есть процент успешных обнаружений. Чем выше коэффициент, тем выше будет уровень ложных тревог;

- maxFalseAlarmRate 0.5 — уровень ложной тревоги. В случае, если выборка разнообразная, то уровень требуемой тревоги будет быстро достигнут, и обучение будет остановлено;

- numPos 950 — количество позитивных примеров. Так как, чем ниже коэффициент «minhitrate», тем больше файлов будет считаться непригодными, то коэффициенту numPos следует придавать значение примерно в 80% от имеющихся положительных файлов;

- numNeg 1100 — количество имеющихся негативных примеров;

- w 30 -h 25 — размер шаблона из подготовительного этапа;

- mode ALL — использование полного комплекта Хаар-признаков, от которого зависит скорость работы и точность алгоритма. (В случае если объект не меняет ориентацию, полного комплекта признаков не требуется);

- precalcValBufSize 4096 -precalcIdxBufSize 4096 — выделяемая под процесс память.

Подсчет использует всю базу изображений и значительный объем ресурсов ПК. Для выборок по 1140 и 1100 изображений и выделенной памяти в 4096 мегабайт, процесс обучения занял 2 часа 13 минут.