AI-For-Beginners/translations/bg/lessons/4-ComputerVision/06-IntroCV
leestott fee00e62ca 🌐 Update translations via Co-op Translator 2025-08-30 01:17:50 +00:00
..
lab 🌐 Update translations via Co-op Translator 2025-08-30 01:17:50 +00:00
OpenCV.ipynb 🌐 Update translations via Co-op Translator 2025-08-30 01:17:50 +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 е този курс за 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, което често е за предпочитане пред регулиране на яркостта или контраста.
  • Прилагане на различни трансформации върху изображението:
    • Афинни трансформации могат да бъдат полезни, ако трябва да комбинирате ротация, преоразмеряване и изкривяване на изображението и знаете изходните и целевите местоположения на три точки в изображението. Аффинните трансформации запазват паралелните линии паралелни.
    • Перспективни трансформации могат да бъдат полезни, когато знаете изходните и целевите позиции на 4 точки в изображението. Например, ако направите снимка на правоъгълен документ с камера на смартфон под някакъв ъгъл и искате да получите правоъгълно изображение на самия документ.
  • Разбиране на движението в изображението чрез използване на оптичен поток.

Примери за използване на компютърно зрение

В нашия OpenCV Notebook даваме някои примери за това кога компютърното зрение може да се използва за изпълнение на специфични задачи:

  • Предварителна обработка на снимка на брайлова книга. Фокусираме се върху това как можем да използваме прагова обработка, откриване на характеристики, перспективна трансформация и манипулации с NumPy, за да отделим отделни брайлови символи за по-нататъшна класификация от невронна мрежа.
Брайлово изображение Предварително обработено брайлово изображение Брайлови символи

Изображение от OpenCV.ipynb

  • Откриване на движение във видео чрез разлика между кадри. Ако камерата е фиксирана, тогава кадрите от видео потока трябва да са доста сходни един с друг. Тъй като кадрите се представят като масиви, просто чрез изваждане на тези масиви за два последователни кадъра ще получим разликата в пикселите, която трябва да е малка за статични кадри и да стане по-голяма, когато има значително движение в изображението.

Изображение на видео кадри и разлики между кадри

Изображение от OpenCV.ipynb

  • Откриване на движение чрез оптичен поток. Оптичният поток ни позволява да разберем как отделните пиксели в кадрите на видео се движат. Има два типа оптичен поток:

    • Плътен оптичен поток изчислява векторно поле, което показва за всеки пиксел къде се движи.
    • Редки оптичен поток се основава на вземане на някои отличителни характеристики в изображението (например ръбове) и изграждане на тяхната траектория от кадър на кадър.

Изображение на оптичен поток

Изображение от OpenCV.ipynb

✍️ Примерни тетрадки: OpenCV опитайте OpenCV в действие

Нека направим някои експерименти с OpenCV, като разгледаме OpenCV Notebook.

Заключение

Понякога сравнително сложни задачи като откриване на движение или откриване на върхове на пръсти могат да бъдат решени изцяло чрез компютърно зрение. Затова е много полезно да знаете основните техники на компютърното зрение и какво могат да правят библиотеки като OpenCV.

🚀 Предизвикателство

Гледайте това видео от AI шоуто, за да научите за проекта Cortic Tigers и как те са създали решение на базата на блокове, за да демократизират задачите на компютърното зрение чрез робот. Направете проучване за други подобни проекти, които помагат на нови учащи да навлязат в тази област.

Тест след лекцията

Преглед и самостоятелно обучение

Прочетете повече за оптичния поток в този страхотен урок.

Задача

В тази лабораторна работа ще заснемете видео с прости жестове, а вашата цел е да извлечете движения нагоре/надолу/наляво/надясно, използвайки оптичен поток.

Движение на дланта

Отказ от отговорност:
Този документ е преведен с помощта на AI услуга за превод Co-op Translator. Въпреки че се стремим към точност, моля, имайте предвид, че автоматизираните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия роден език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален човешки превод. Не носим отговорност за недоразумения или погрешни интерпретации, произтичащи от използването на този превод.