Мета роботи. Ознайомитися з основними методами комп'ютерного зору та розробити програму мовою Python, яка виконує завдання детекції та/або розпізнавання об'єктів на зображеннях з використанням сучасних бібліотек комп'ютерного зору.
Комп'ютерний зір – це технологія, яку використовують для автоматичного розпізнавання зображень та їх точного і ефективного опису. Сьогодні комп'ютерні системи мають доступ до великого обсягу зображень та джерел даних, отриманих зі смартфонів, дорожніх камер, систем безпеки та інших пристроїв. Додатки комп'ютерного зору використовують штучний інтелект та машинне навчання для точної обробки цих даних для ідентифікації об'єктів та розпізнавання осіб, а також для класифікації, рекомендацій, моніторингу та виявлення.
Системи комп'ютерного зору використовують технологію штучного інтелекту для імітації можливостей людського мозку, які відповідають за розпізнавання та класифікацію об'єктів. Фахівці з інформатики навчають комп'ютери розпізнавати візуальні дані, вводячи величезну кількість інформації. Алгоритми машинного навчання виявляють загальні закономірності на цих зображеннях або відео і застосовують отримані знання для точної ідентифікації невідомих зображень. Наприклад, якщо комп'ютери оброблять мільйони зображень автомобілів, вони почнуть створювати ідентичні шаблони, які надають можливість точно визначити автомобіль на зображенні.
У комп'ютерному зорі використовуються технології, подібні до наведених нижче.
- Глибоке навчання - це тип машинного навчання, в якому використовуються нейронні мережі. Нейронні мережі глибокого навчання складаються з багатьох шарів програмних модулів, які називаються штучними нейронами, які працюють разом. Вони використовують математичні розрахунки для автоматичної обробки різних аспектів даних зображення та поступово виробляють комбіноване розуміння зображення.
- Згорткові нейронні мережі використовують систему маркування для класифікації візуальних даних та розуміння всього зображення. Вони аналізують зображення в пікселях і надають кожному пікселю мітку. Це значення вводиться, щоб виконати математичну операцію, яку називають згорткою, і зробити прогнози щодо зображення. Подібно до людини, яка намагається розпізнати об'єкт на відстані, згорткова мережа спочатку визначає контури та прості форми, а потім заповнює їх додатковими деталями, такими як колір, внутрішні форми та текстура. Процес прогнозування повпротягом кількох ітерацій підвищення точності.
- Рекурентні нейронні мережі схожі на згорткові, але можуть обробляти серію зображень для пошуку зв'язків між ними. Рекурентні мережі можуть аналізувати відео та розуміти взаємозв'язки між зображеннями.
Різниця між комп'ютерним зором та обробкою зображень
При обробці зображень використовуються алгоритми зміни зображень, включаючи підвищення різкості, згладжування, фільтрацію чи поліпшення. Комп'ютерний зір не змінює зображення, а навпаки, осмислює те, що бачить, і виконує завдання, наприклад, маркування. В деяких випадках можна використовувати обробку зображень для зміни зображення, щоб система комп'ютерного зору могла краще його розпізнати. В інших випадках використовують комп'ютерний зір для ідентифікації зображень або частин зображення, а потім відбувається обробка зображення для його подальшої зміни.
Загальні завдання комп'ютерного зору
- Класифікація зображень надає можливість комп'ютерам побачити зображення і точно визначити, якого класу воно належить. Комп'ютерний зір розуміє типи зображень і відповідно маркує їх, наприклад, дерева, літаки або будівлі. Наприклад, камера може розпізнавати обличчя на фотографії та фокусуватись на них.
- Виявлення об'єктів — це завдання виявлення і локалізації зображень. Програма використовує класифікацію для ідентифікації, сортування та організації зображень. Виявлення об'єктів використовується в промислових та виробничих процесах для управління автономними додатками та моніторингу виробничих ліній. Виробники камер для підключених будинків та постачальники послуг також використовують функцію виявлення об'єктів для обробки відео потоків з камер у реальному часі, щоб виявляти людей та об'єкти в режимі реального часу та надавати попередження кінцевим користувачам.
- Відстеження об'єктів використовує моделі глибокого навчання для ідентифікації та відстеження предметів, що входять до різних категорій. Ця технологія має кілька реальних застосувань в різних галузях. Першим елементом процесу відстеження об'єктів є виявлення; навколо об'єкта створюється обмежувальна рамка, об'єкту привласнюється ідентифікатор, і його можна відстежувати по кадрах. Наприклад, відстеження об'єктів можна використовувати для моніторингу дорожнього руху у міському середовищі, спостереження за людьми та медичної візуалізації.
- Сегментування – це алгоритм, який ідентифікує об'єкт шляхом поділу його зображень на різні області на основі видимих пікселів. Сегментування також спрощує зображення, наприклад розміщує форму або контур предмета, щоб визначити, що це таке. При цьому сегментування також розпізнає наявність кількох об'єктів на зображенні або кадрі. Наприклад, якщо на зображенні є кішка та собака, можна використовувати сегментування для розпізнавання цих двох тварин. На відміну від виявлення об'єкта, що будує рамку навколо об'єкта, при сегментуванні відстежуються пікселі визначення форми об'єкта, що полегшує його аналіз і маркування.
Cloud Vision API
Cloud Vision API - сервіс від Google для роботи з зображеннями. Програма дає детальний і детальний аналіз картинок за допомогою механізму машинного навчання. Після завантаження зображення сервіс надає звіт про те, як його бачить штучний інтелект (рис.1).
Рис.1. Фотографія-оригінал для аналізу зображення
Вкладка Faces (Обличчя): показує, видно чи особа людини, наскільки він щасливий, які взагалі відчуває емоції, чи є на ньому головний убір, як щодо простору нахилена його голова (рис.2).
Рис.2. Розпізнавання емоцій на обличчі людини
Вкладка Objects (Об'єкти) зазначає, що конкретно зображено на картинці. На цьому зображенні, машина зрозуміла, штани з ймовірністю в 94%, людина - 89%, тварина - 63%, майка - 57% (рис.3).
Рис.3. Розпізнавання загальних об'єктів на фотографії
Вкладка Labels (Мітки): тут показується, що ще зображено на картинці, крім людини (якщо він є). Прописуються деталі і контекстуальні аспекти зображення. На цьому зображенні - хребетна тварина, ссавець, бичача морда тощо (рис.4).
Рис.4. Розпізнавання деталей об'єктів на фотографії
Вкладка Text (Текст) - розпізнається текст, що знайдений на фотографії (рис.5).
Рис.5. Розпізнаний текст на фотографії.
Вкладка Properties (Властивості) - відображаються основні кольори, які присутні на картинці та виявлені об'єкти, окрім людини (рис.6).
Рис.6. Визначення домінуючих кольорів
Вкладка Safe Search (Безпечний пошук) показує, наскільки зображення безпечно для перегляду, чи немає на ньому чогось забороненого (елементи порнографії, жорстокості, містифікації і расизму) (рис.7).
Рис.7. Визначення безпечності фотографії для перегляду
Сервіс має можливість розпізнати відомі географічні чи архітектурні об’єкти, чиї зображення протеговані і містяться у базах пошукової системи Google (рис.8).
Рис.7. Визначення місцезнаходження об’єкту
Python бібліотеки для завдань комп’ютерного зору
- OpenCV. Бібліотека з відкритим вихідним кодом для завдань комп'ютерного зору, таких як виявлення облич, розпізнавання об'єктів, розпізнавання облич, сегментація зображень тощо. Постачається з оболонкою Python і може використовуватися разом з NumPy, SciPy та Matplotlib. Бібліотека надає доступ до понад 2,500 найсучасніших і класичних алгоритмів.
- Scikit-Image. Використовується майже для кожного завдання комп'ютерного зору. Бібліотека використовує масиви NumPy як об'єкти зображень, пропонує багато різних алгоритмів для сегментації, маніпуляції колірним простором, геометричної трансформації, аналізу, морфології, виявлення функцій і багато іншого.
- SciPy. Найкраща бібліотека для обробки багатовимірних зображень шляхом імпорту підмодуля scipy.ndimage. SciPy надає функції для роботи з n-вимірними масивами Numpy. Використовується для широкого спектру програм: сегментація зображень, згортка, читання зображень, розпізнавання облич тощо.
- Mahotas. Може обчислювати 2D- і 3D-зображення за допомогою модуля mahotas.features.haralick і витягувати інформацію з зображень для виконання розширеної обробки зображень. Mahotas має багато популярних функцій, таких як вододіл, обчислення опуклих точок, морфологічна обробка та зіставлення шаблонів. Існує понад 100 функцій комп'ютерного зору.
- Pillow, є вдосконаленою версією PIL (бібліотека зображень Python). Можна виконувати багато процесів обробки зображень, такі як точкові операції, фільтрування та маніпуляції. Підтримує широкий діапазон форматів зображень, проста у використанні.
- SimpleITK. Розглядає зображення як набір точок у фізичній області простору: визначає область, зайняту зображеннями, як матрицю координат, розміру, інтервалу та косинусів напрямку. SimpleITK ефективно обробляє зображення та підтримує 2D, 3D та 4D виміри. Часто використовується для сегментації та реєстрації зображень, що є процесом накладання двох чи більше зображень.
- Matplotlib. Містить два специфічних методи для читання та відображення зображень. Matplotlib спеціалізується на двовимірних графіках масивів як багатоплатформна бібліотека візуалізації даних на масивах Numpy. Зазвичай використовується для двовимірних візуалізацій, таких як точкові діаграми, гістограми та стовпчасті діаграми. Є корисною для обробки зображень, оскільки ефективно витягує інформацію із зображення.
- NumPy. Бібліотеку можна використовувати для завдань обробки зображень, таких як кадрування зображення, маніпулювання пікселями, маскування значень пікселів тощо. NumPy також можна використовувати для зменшення кольору, бінаризації, вставки з фрагментами, позитивної чи негативної інверсії та багатьох інших функцій.
- Pgmagick для бібліотеки GraphicMagick. Інструмент обробки зображень має велику колекцію інструментів і бібліотек, які допомагають у редагуванні та маніпуляції зображеннями.
- SimpleCV. Фреймворк з відкритим кодом для створення програм комп'ютерного зору з обробкою зображень. SimpleCV має зрозумілий інтерфейс для камер, перетворення форматів, обробки зображень, виявлення функцій тощо.
Лабораторне завдання
1. Підготовка середовища Python. Встановити необхідні бібліотеки.
2. Підготовка даних. Обрати набір зображень (власні зображення або готовий датасет). Завантажити зображення та відобразити їх. За потреби виконати:
- Зміну розміру зображень.
- Нормалізацію пікселів.
- Перетворення кольорового простору.
3. Вибір і ініціалізація моделі. Виконати один із варіантів:
- Варіант 1. Використання готової моделі. Завантажити попередньо навчену модель (наприклад, YOLO). Підготувати модель до інференсу (етап, коли навчена модель починає використовуватися для обробки нових даних та видачі передбачень).
- Варіант 2. Навчання простої згорткової мережі. Побудувати згорткову нейронну мережу. Навчити модель для класифікації об’єктів.
4. Реалізація розпізнавання об’єктів. Подати зображення на вхід моделі. Отримати результати розпізнавання:
- Класи об’єктів.
- Координати обмежувальних рамок.
Відобразити результати на зображенні.
5. Проаналізувати правильність розпізнавання. Оцінити точність і кількість помилкових спрацьовувань. Зробити висновки щодо сильних і слабких сторін моделі.
Зміст звіту
- Назва та мета виконання лабораторної роботи.
- Описати обрану модель, подати приклади вхідних та вихідних зображень.
- Скріншоти реалізації з коротким описом.
- Аналітичні висновки щодо якості розпізнавання об’єктів.
Контрольні запитання
- Що таке розпізнавання об’єктів у комп’ютерному зорі?
- Чим відрізняється класифікація зображень від детекції об’єктів?
- Яку роль відіграють згорткові нейронні мережі в задачах комп’ютерного зору?
- Що таке обмежувальна рамка (bounding box)?
- Які архітектури використовуються для розпізнавання об’єктів?
- В чому полягає ідея алгоритму YOLO?
- Які переваги використання попередньо навчених моделей?
- Які фактори впливають на точність розпізнавання об’єктів?
- Які практичні застосування має розпізнавання об’єктів?
- Які обмеження мають сучасні алгоритми комп’ютерного зору?








