Программная инженерия
Разработка и оптимизация алгоритмов оптического распознавания символов и их программная кроссплатформенная реализация с использованием OpenCV
На момент написания данного реферата магистерская работа еще не завершена. Предполагаемая дата завершения: июнь 2019 г. Полный текст работы, а также материалы по теме могут быть получены у автора или его руководителя после указанной даты.
Компьютерное зрение – весьма емкое и всеобъемлющее понятие. Область применения его возможностей – огромна. Начиная с распознавания написанного и напечатанного текста и заканчивая распознаванием лиц в толпе для поиска преступников, определение отклонений на снимках МРТ, восстановление зашумленных изображений, восстановление полной трехмерной сцены и т.д.
По сравнению с другими областями, область компьютерного зрения может быть охарактеризована как молодая, разнообразная и динамично развивающаяся [1].
Ввиду большого разнообразия проблем и методов их решения в области компьютерного зрения, существует большое разнообразие программного обеспечения как общего назначения, так и предназначенного только для узкоспециализированных задач.
В связи с тем, что довольно часто над приложениями работает не один разработчик, а целая команда, встала потребность в создании простой и понятной структуры, ускоряющей процесс разработки приложений, использующих технологии компьютерного зрения. Отсюда возникает проблема, связанная с необходимостью более простого использования существующих алгоритмов и наличия стандартизированных параметров, чтобы при работе с большим проектом разработчикам проще было понимать код друг друга. Для повышения эффективности решения задач компьютерного зрения и были разработаны библиотеки и фреймворки для различных языков программирования, в которых реализованы базовые алгоритмы работы с изображениями, есть структурированный перечень параметров, необходимых для работы каждого из алгоритмов и присутствует единая документация, согласно которой можно понять что значит каждый параметр и за что отвечает та или иная функция.
На текущий момент существует множество разнообразных методов и алгоритмов, позволяющих распознать наличие текста на изображении, выделить его и оцифровать для дальнейшего использования в виде данных.
Распознавание текста – задача, с которой любой человек постоянно сталкивается ежедневно, начиная с момента изучения принципов чтения и правописания. По состоянию на 30 июня 2018 года, доступ в Интернет имеет 4208571287 человек [2]. Соответственно, все эти люди пользуются поисковыми системами. Для упрощения поиска информации о том или ином предмете является возможным воспользоваться технологиями компьютерного зрения, а в частности распознаванием текста для формирования поискового запроса.
В магистерской работе решается задача разработки и оптимизации алгоритмов оптического распознавания символов и их программная кроссплатформенная реализация с использованием библиотеки OpenCV.
Цель исследования — исследовать возможности современных программных средств и технологий для повышения эффективности распознавания образов при решении практических задач распознавания и классификации изображений транзисторов.
Объект исследования — программные технологии компьютерного зрения.
Предмет исследования — методы и средства распознавания изображений символьной информации.
Основные задачи исследования:
На современном этапе развития сообщества разработчиков программного обеспечения существует большое разнообразие библиотек компьютерного зрения, имеющих разную степень развитости и возможностей для использования. В работе будут приведены анализ и сравнение наиболее популярных и стабильно работающих из них.
На основании проведенного поиска были обнаружены 4 библиотеки наиболее похожие между собой, имеющие схожий набор функций и имеющие возможность широкопрофильного применения в зависимости от целей, поставленных разработчиком [10, 11, 13, 15]:
Наибольшее количество информации, уроков и примеров использования существует по библиотеке OpenCV.
Книга «OpenCV и Java. Обработка изображений и компьютерное зрение» Н. Прохоренка [4] знакомит с современными технологиями компьютерного зрения, позволяющими машинам, роботам, веб-камерам и другим устройствам распознавать изображения, приводит структуру библиотеки OpenCV для языка программирования Java и на практических примерах рассматривает возможности использования библиотеки.
На сайтах compvision.ru [5] и robocraft.ru [6] собраны материалы русскоязычных разработчиков, предоставляющие базу знаний для начала работы с библиотекой OpenCV для начинающих разработчиков.
Ввиду широкого профиля использования и наличия огромного количества функциональных возможностей, на сегодняшний день существует внушительное количество магистерских диссертаций, в которых так или иначе упоминается использование библиотек компьютерного зрения, в частности OpenCV. Среди них достойна упоминания работа Колесника А.В. «Распределенная программная система для распознавания изображений» [7], в которой описана разработка компьютерной системы для распознавания лиц на изображении. На рисунке 1 представлен внешний вид приложения.
Интерфейс приложения [7]
Также, необходимым является упоминание работы Личканенко И.С. «Исследование методов и поиск эффективного алгоритма для задачи распознавания номерных знаков транспортных средств» [8], так как в ней показана возможность использования компьютерного зрения для распознавания текста, в частности автомобильных номеров.
Для более убедительного доказательства многофункциональности компьютерного зрения, можно упомянуть работу Гайдукова Н.П. «Распознавание рукописного текста» [9]. В работе проведен анализ методов распознавания рукописных текстов и реализована система по распознаванию рукописного текста.
OpenCV (Open Source Computer Vision Library) представляет собой библиотеку программного обеспечения для компьютерного зрения с открытым исходным кодом и компьютерного обучения. OpenCV была создана для обеспечения общей инфраструктуры приложений для компьютерного зрения и ускорения использования восприятия машины в коммерческих продуктах. Будучи лицензированным BSD продуктом, OpenCV упрощает бизнес для использования и модификации кода [10].
В качестве цели для разработки данной библиотеки было поставлено повышение эффективности в приложениях реального времени. Функционал библиотеки реализован на языке С. OpenCV имеет возможность использовать многоядерные процессоры. В случае необходимости автоматической оптимизации на платформах Intel, возможно дополнительное приобретение и интеграция с библиотекой IPP.
В состав библиотеки входит более 2500 оптимизированных алгоритмов, которые включают в себя полный набор классических и современных алгоритмов компьютерного зрения и машинного обучения. Данные алгоритмы могут использоваться для обнаружения и распознавания лиц, идентификации объектов, классификации действий человека на видео, отслеживание движущихся объектов и движений самой камеры и т.д. OpenCV имеет более 47 тысяч пользователей сообщества, а предполагаемое количество загрузок превышает 14 миллионов. Библиотека широко используется в компаниях, исследовательских группах и в правительственных органах.
Помимо таких известных компаний как Google, Yahoo, Microsoft, Intel, IBM, есть множество разнообразных стартапов, таких как Applied Minds, VideoSurf и Zeitera, которые так же используют функционал OpenCV.
Библиотека имеет интерфейсы для C++, Python, Java и MATLAB и поддерживает Windows, Linux, Android и Mac OS. OpenCV ориентируется в основном на приложения в режиме реального времени и использует преимущества команд MMX и SSE, когда они доступны. В настоящее время активно развиваются полнофункциональные интерфейсы CUDA и OpenCL. На рисунке 2 представлена общая структура проекта OpenCV.
Карта проекта OpenCV
AForge.NET является библиотекой с открытым исходным кодом, созданной на языке C#, которая предназначена для разработчиков и исследователей в области компьютерного зрения. Кроме того, в библиотеке есть функционал для разработчиков в области искусственного интеллекта. Спектр возможностей библиотеки довольно широк: обработка изображений, нейронные сети, генетические алгоритмы, нечеткая логика, машинное обучение, робототехника и многое другое [11].
Библиотека включает несколько основных компонентов. AForge.Imaging — библиотека подпрограмм для обработки изображений и фильтров. AForge.Vision — библиотека компьютерного зрения. AForge.Video — набор библиотек для работы с видеоинформацией. AForge.Neuro — библиотека для выполнения разнообразных действий и операций с нейронными сетями. AForge.Genetic — библиотека подпрограмм для использования генетических алгоритмов для решения различных задач. AForge.Fuzzy — библиотека для работы с нечеткой логикой. AForge.Robotics — библиотека, обеспечивающая поддержку некоторых методов, применяемых в сфере робототехники. AForge.MachineLearning — библиотека для работы с элементами машинного обучения [12]. Существует, так же как и у библиотеки OpenCV, активное сообщество, в котором можно подчерпнуть необходимую информацию, задавая вопросы разработчикам, или поделиться собственными наработками. Но, к сожалению, количество участников данного сообщества уступает своим количеством аналогичным по OpenCV. Еще одним ограничением на пути разработчика является тот факт, что вся документация по библиотеке написана только на английском языке. Ввиду этого возможны трудности в изучении и освоении данного фреймворка. На рисунке 3 приведена общая структура библиотеки AForge.NET.
Структура фреймворка AForge.NET
VXL — это набор библиотек, написанных на языке C++, которые предназначены для научных исследований и реализации технологий компьютерного зрения. VXL была написана в ANSI/ISO C++ и предназначена для портативных платформ. Библиотека состоит из нескольких основных составляющих: VNL (числа) — численные алгоритмы и контейнеры, например, матрицы, векторы, оптимизаторы и т.д., VIL (изображения) — загрузка, сохранение и редактирование изображений во многих наиболее распространенных форматах (также существует возможность работы с очень большими изображениями), VGL (геометрия) — геометрия точек, кривых и других элементарных объектов в одно-, двух- и трехмерном пространствах, VSL (входной и выходной потоки), VBL (основные шаблоны), VUL (утилиты) — разный функционал для независимых платформ [13]. Особенность библиотеки заключается в том, что каждый ее компонент может использоваться отдельно, не ссылаясь на другие компоненты. Таким образом, в приложении можно использовать только то, что действительно необходимо. На рисунке 4 приведено иерархическое строение ядра VXL.
Иерархическое строение ядра VXL [14]
LTI или LTI-lib – объектно-ориентированная библиотека алгоритмов и структур данных. Она часто применяется при обработке изображений и в сфере компьютерного зрения. LTI-lib была разработана как часть научно-исследовательских проектов в области компьютерного зрения с технологиями робототехники, распознавания объектов, голоса и жестов. Основной целью разработки данной библиотеки является создание объектно-ориентированной библиотеки на языке C++, что во многом упрощало бы использование кода и его обслуживание, но при этом были бы обеспечены быстрые алгоритмы, которые можно было бы использовать в реальных приложениях.
Библиотека была разработана с применением GCC (набор компиляторов, применяемый для разнообразных языков программирования) под Linux и Visual C++ под Windows NT. Многие классы инкапсулируют Windows/Linux функциональность для того, чтобы упростить решение системных или аппаратных задач (например, классы для многопоточности и синхронизации, измерения времени и доступ к последовательному порту) [15].
Для решения типовых задач по распознаванию и классификации изображений транзисторов поставлена задача разработки программной системы. Целесообразнее всего будет использовать клиент-серверную архитектуру.
Система должна иметь высокую отказоустойчивость, стабильное подключение к сети Интернет для обмена данными, корректно организованную политику конфиденциальности для доступа к информации на сервере БД. Клиент планируется разрабатывать под платформу Android, как одну из самых распространенных и доступных мобильных систем.
На рисунке 5 представлена укрупненная схема работы данной системы.
Укрупненная структура системы распознавания и классификации изображений транзисторов
Среди рассмотренных вариантов библиотек компьютерного зрения оптимальным будет использование библиотеки OpenCV, так как она является быстро работающей, в ее составе имеются функции, предназначенные не только для распознавания текста, но и для обработки изображения в целом, что упрощает структуру будущего приложения и, также имеется реализация библиотеки специально под ОС Android. На рисунке 6 представлена диаграмма, сравнивающая быстродействие библиотек OpenCV, OpenCV + IPP, VXL и LTI [16].
Сравнение библиотек компьютерного зрения [16]
При анализе данных о приведенных выше библиотеках компьютерного зрения были получены следующие выводы в пользу использования библиотеки OpenCV для разработки приложения по распознаванию транзисторов.