AI-For-Beginners/translations/uk/lessons/4-ComputerVision/06-IntroCV
leestott 3ac667ea23 🌐 Update translations via Co-op Translator 2025-08-30 10:45:29 +00:00
..
lab 🌐 Update translations via Co-op Translator 2025-08-30 10:45:29 +00:00
OpenCV.ipynb 🌐 Update translations via Co-op Translator 2025-08-30 10:45:29 +00:00
README.md 🌐 Update translations via Co-op Translator 2025-08-26 01:51:51 +00:00

README.md

Вступ до комп'ютерного зору

Комп'ютерний зір — це дисципліна, метою якої є надання комп'ютерам можливості отримувати високорівневе розуміння цифрових зображень. Це досить широке визначення, адже розуміння може означати багато різних речей, включаючи знаходження об'єкта на зображенні (детекція об'єктів), розуміння того, що відбувається (детекція подій), опис зображення текстом або реконструкцію сцени у 3D. Існують також спеціальні завдання, пов'язані з людськими зображеннями: оцінка віку та емоцій, детекція та ідентифікація облич, а також оцінка 3D-пози, щоб назвати лише кілька.

Тест перед лекцією

Одне з найпростіших завдань комп'ютерного зору — це класифікація зображень.

Комп'ютерний зір часто вважається галуззю штучного інтелекту. Сьогодні більшість завдань комп'ютерного зору вирішуються за допомогою нейронних мереж. Ми дізнаємося більше про спеціальний тип нейронних мереж, які використовуються для комп'ютерного зору, згорткові нейронні мережі, у цьому розділі.

Однак, перш ніж передати зображення нейронній мережі, у багатьох випадках має сенс використати деякі алгоритмічні техніки для покращення зображення.

Існує кілька бібліотек Python для обробки зображень:

  • imageio можна використовувати для читання/запису різних форматів зображень. Вона також підтримує ffmpeg — корисний інструмент для перетворення відеокадрів у зображення.
  • Pillow (також відома як PIL) є трохи потужнішою і підтримує деякі маніпуляції із зображеннями, такі як морфінг, налаштування палітри тощо.
  • OpenCV — це потужна бібліотека обробки зображень, написана на C++, яка стала де-факто стандартом для обробки зображень. Вона має зручний інтерфейс для Python.
  • dlib — це бібліотека на C++, яка реалізує багато алгоритмів машинного навчання, включаючи деякі алгоритми комп'ютерного зору. Вона також має інтерфейс для Python і може використовуватися для складних завдань, таких як детекція облич і визначення ключових точок обличчя.

OpenCV

OpenCV вважається де-факто стандартом для обробки зображень. Вона містить багато корисних алгоритмів, реалізованих на C++. Ви також можете викликати OpenCV з Python.

Хорошим місцем для вивчення OpenCV є цей курс Learn OpenCV. У нашій програмі ми не ставимо за мету вивчити OpenCV, а лише показати кілька прикладів, коли її можна використовувати і як.

Завантаження зображень

Зображення в Python зручно представляти у вигляді масивів NumPy. Наприклад, чорно-білі зображення розміром 320x200 пікселів зберігатимуться у масиві 200x320, а кольорові зображення такого ж розміру матимуть форму 200x320x3 (для 3 кольорових каналів). Щоб завантажити зображення, можна використати такий код:

import cv2
import matplotlib.pyplot as plt

im = cv2.imread('image.jpeg')
plt.imshow(im)

Традиційно OpenCV використовує кодування BGR (синій-зелений-червоний) для кольорових зображень, тоді як інші інструменти Python використовують більш традиційне RGB (червоний-зелений-синій). Щоб зображення виглядало правильно, його потрібно перетворити у кольоровий простір RGB, або переставивши виміри у масиві NumPy, або викликавши функцію OpenCV:

im = cv2.cvtColor(im,cv2.COLOR_BGR2RGB)

Ту ж функцію cvtColor можна використовувати для виконання інших перетворень кольорового простору, таких як перетворення зображення у чорно-біле або у HSV (відтінок-насиченість-яскравість).

Ви також можете використовувати OpenCV для завантаження відео покадрово — приклад наведено у вправі OpenCV Notebook.

Обробка зображень

Перед тим як передати зображення нейронній мережі, можливо, вам захочеться застосувати кілька кроків попередньої обробки. OpenCV може виконувати багато завдань, зокрема:

  • Зміна розміру зображення за допомогою im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Розмиття зображення за допомогою im = cv2.medianBlur(im,3) або im = cv2.GaussianBlur(im, (3,3), 0)
  • Зміна яскравості та контрасту зображення може бути виконана за допомогою маніпуляцій з масивами NumPy, як описано у цій нотатці на Stackoverflow.
  • Використання порогової обробки за допомогою функцій cv2.threshold/cv2.adaptiveThreshold, що часто є кращим варіантом, ніж налаштування яскравості чи контрасту.
  • Застосування різних перетворень до зображення:
    • Афінні перетворення можуть бути корисними, якщо потрібно поєднати обертання, зміну розміру та нахил зображення, і ви знаєте початкове та кінцеве розташування трьох точок на зображенні. Афінні перетворення зберігають паралельність ліній.
    • Перспективні перетворення можуть бути корисними, якщо ви знаєте початкові та кінцеві позиції чотирьох точок на зображенні. Наприклад, якщо ви зробили фото прямокутного документа за допомогою камери смартфона під кутом і хочете отримати прямокутне зображення самого документа.
  • Розуміння руху на зображенні за допомогою оптичного потоку.

Приклади використання комп'ютерного зору

У нашому OpenCV Notebook ми наводимо кілька прикладів, коли комп'ютерний зір може бути використаний для виконання конкретних завдань:

  • Попередня обробка фотографії книги шрифтом Брайля. Ми зосереджуємося на тому, як можна використовувати порогову обробку, детекцію ознак, перспективне перетворення та маніпуляції з NumPy, щоб відокремити окремі символи шрифту Брайля для подальшої класифікації нейронною мережею.
Зображення шрифту Брайля Попередньо оброблене зображення Символи шрифту Брайля

Зображення з OpenCV.ipynb

  • Детекція руху у відео за допомогою різниці кадрів. Якщо камера нерухома, то кадри з її потоку мають бути досить схожими один на одного. Оскільки кадри представлені у вигляді масивів, просто віднімаючи ці масиви для двох послідовних кадрів, ми отримаємо різницю пікселів, яка має бути низькою для статичних кадрів і ставати вищою, коли у зображенні відбувається значний рух.

Зображення кадрів відео та різниці кадрів

Зображення з OpenCV.ipynb

  • Детекція руху за допомогою оптичного потоку. Оптичний потік дозволяє зрозуміти, як окремі пікселі на кадрах відео рухаються. Існує два типи оптичного потоку:

    • Щільний оптичний потік обчислює векторне поле, яке показує, куди рухається кожен піксель.
    • Рідкісний оптичний потік базується на виборі деяких характерних ознак на зображенні (наприклад, країв) і побудові їхньої траєкторії від кадру до кадру.

Зображення оптичного потоку

Зображення з OpenCV.ipynb

✍️ Прикладні ноутбуки: OpenCV спробуйте OpenCV у дії

Давайте проведемо кілька експериментів з OpenCV, досліджуючи OpenCV Notebook.

Висновок

Іноді відносно складні завдання, такі як детекція руху або кінчиків пальців, можуть бути вирішені виключно за допомогою комп'ютерного зору. Тому дуже корисно знати базові техніки комп'ютерного зору та можливості таких бібліотек, як OpenCV.

🚀 Виклик

Перегляньте це відео з AI Show, щоб дізнатися про проєкт Cortic Tigers і те, як вони створили рішення на основі блоків для демократизації завдань комп'ютерного зору за допомогою робота. Проведіть дослідження інших подібних проєктів, які допомагають новачкам освоїти цю галузь.

Тест після лекції

Огляд і самостійне навчання

Дізнайтеся більше про оптичний потік у цьому чудовому підручнику.

Завдання

У цій лабораторній роботі вам потрібно буде зняти відео з простими жестами, і ваша мета — визначити рухи вгору/вниз/вліво/вправо за допомогою оптичного потоку.

Рух долоні

Відмова від відповідальності:
Цей документ був перекладений за допомогою сервісу автоматичного перекладу Co-op Translator. Хоча ми прагнемо до точності, будь ласка, майте на увазі, що автоматичні переклади можуть містити помилки або неточності. Оригінальний документ на його рідній мові слід вважати авторитетним джерелом. Для критичної інформації рекомендується професійний людський переклад. Ми не несемо відповідальності за будь-які непорозуміння або неправильні тлумачення, що виникають внаслідок використання цього перекладу.