- •Глава 1 Обзор штрихкодов как способов кодирования информации 9
- •Глава 2 Разработка, тестирование и отладка программного средства распознавания штрихкодов на основе каскадов Хаара 42
- •Глава 3 Экспериментальная проверка программного средства распознавания штрихкодов на основе каскадов Хаара 66
- •Введение
- •Обзор штрихкодов как способов кодирования информации
- •Характеристика ооо «k2it»
- •Структура ооо "к2Айти"
- •Обзор существующих видов штрихкодов.
- •Способы кодирования информации
- •Особенности штрихкода AztecCode
- •Использование штрихкода AztecCode
- •Особенности штрихкода DataMatrix
- •Печать 2d штрихкодов
- •Регулирование и стандартизация
- •Типы сканеров
- •Устройства для считывания двухмерных штрихкодов
- •Программное обеспечение для чтения штрихкодов
- •Постановка задачи дипломного проектирования
- •Математические методы решения задачи
- •Интегральное представление изображений
- •Признаки Хаара
- •Обучение классификатора в методе Виолы-Джонса
- •Применяемый в алгоритме бустинг и разработка AdaBoost
- •Каскадная модель разрабатываемого алгоритма
- •Выводы по главе
- •Разработка, тестирование и отладка программного средства распознавания штрихкодов на основе каскадов Хаара
- •Обоснование выбора аппаратных и программных средств разработки программного обеспечения
- •Операционная система Microsoft Windows
- •Интегрированная среда разработки Microsoft Visual Studio
- •Язык программирования Visual c#
- •Платформа .Net framework
- •Библиотека компьютерного зрения Opencv
- •Библиотека генерации и чтения штрихкодов zXing
- •Алгоритм обучения каскада Хаара для задачи распознавания штрихкодов товаров.
- •Состав и структура программного обеспечения
- •Описание процесса тестирования и отладки программного обеспечения
- •Инструкция пользователю
- •Выводы по главе
- •Экспериментальная проверка программного средства распознавания штрихкодов на основе каскадов Хаара
- •Описание результатов испытаний
- •Оценивание характеристик качества программного средства распознавания штрихкодов товаров
- •Обоснование экономической эффективности программного средства распознавания штрихкодов товаров на основе каскадов Хаара.
- •Выводы по главе
- •Заключение
- •Список литературы
- •Приложение Исходный код пс
Библиотека генерации и чтения штрихкодов 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 и другие.
Выбор данной библиотеки был обусловлен тем, что она является одной из самых удобных и эффективных библиотек шифрования и дешифрования штрихкодов с возможностями кроссплатформенности и открытого кода.
Алгоритм обучения каскада Хаара для задачи распознавания штрихкодов товаров.
Для использования в разрабатываемом программном средстве каскадов Хаара с целью распознавания штрихкодов было принято решение обучить соответствующий каскад с помощью функций библиотеки компьютерного зрения 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 минут.
