Програмна інженерія
Розробка і оптимізація алгоритмів оптичного розпізнавання символів і їх програмна кроссплатформова реалізація з використанням 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 для розробки програми з розпізнавання транзисторів.