AI-For-Beginners/translations/pl/lessons/4-ComputerVision/06-IntroCV
leestott 464396d431 🌐 Update translations via Co-op Translator 2025-08-24 10:52:15 +00:00
..
lab 🌐 Update translations via Co-op Translator 2025-08-24 10:52:15 +00:00
README.md 🌐 Update translations via Co-op Translator 2025-08-24 10:52:15 +00:00

README.md

Wprowadzenie do Wizji Komputerowej

Wizja komputerowa to dziedzina, której celem jest umożliwienie komputerom uzyskania wysokopoziomowego zrozumienia obrazów cyfrowych. Jest to dość szeroka definicja, ponieważ zrozumienie może oznaczać wiele różnych rzeczy, w tym znalezienie obiektu na zdjęciu (detekcja obiektów), zrozumienie, co się dzieje (detekcja zdarzeń), opisanie obrazu w formie tekstu czy rekonstrukcję sceny w 3D. Istnieją również specjalne zadania związane z obrazami ludzi: szacowanie wieku i emocji, detekcja i identyfikacja twarzy oraz estymacja pozycji w 3D, żeby wymienić tylko kilka.

Quiz przed wykładem

Jednym z najprostszych zadań wizji komputerowej jest klasyfikacja obrazów.

Wizja komputerowa często jest uważana za gałąź sztucznej inteligencji. Obecnie większość zadań związanych z wizją komputerową jest rozwiązywana za pomocą sieci neuronowych. W tej sekcji dowiemy się więcej o specjalnym typie sieci neuronowych używanych w wizji komputerowej, konwolucyjnych sieciach neuronowych.

Jednak zanim przekażesz obraz do sieci neuronowej, w wielu przypadkach warto zastosować pewne algorytmiczne techniki, aby poprawić jakość obrazu.

Istnieje kilka bibliotek Python dostępnych do przetwarzania obrazów:

  • imageio może być używana do odczytu/zapisu różnych formatów obrazów. Obsługuje również ffmpeg, przydatne narzędzie do konwersji klatek wideo na obrazy.
  • Pillow (znana również jako PIL) jest nieco bardziej zaawansowana i obsługuje manipulacje obrazami, takie jak morfing, dostosowanie palety i inne.
  • OpenCV to potężna biblioteka do przetwarzania obrazów napisana w C++, która stała się standardem w tej dziedzinie. Posiada wygodny interfejs w Pythonie.
  • dlib to biblioteka C++, która implementuje wiele algorytmów uczenia maszynowego, w tym niektóre algorytmy wizji komputerowej. Posiada również interfejs w Pythonie i może być używana do trudnych zadań, takich jak detekcja twarzy i punktów charakterystycznych twarzy.

OpenCV

OpenCV jest uważane za standard w przetwarzaniu obrazów. Zawiera wiele przydatnych algorytmów zaimplementowanych w C++. Możesz również korzystać z OpenCV w Pythonie.

Dobrym miejscem do nauki OpenCV jest kurs Learn OpenCV. W naszym programie nauczania celem nie jest nauka OpenCV, ale pokazanie kilku przykładów, kiedy można go użyć i jak.

Ładowanie obrazów

Obrazy w Pythonie można wygodnie reprezentować za pomocą tablic NumPy. Na przykład obrazy w skali szarości o rozmiarze 320x200 pikseli byłyby przechowywane w tablicy 200x320, a kolorowe obrazy o tych samych wymiarach miałyby kształt 200x320x3 (dla 3 kanałów kolorów). Aby załadować obraz, możesz użyć następującego kodu:

import cv2
import matplotlib.pyplot as plt

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

Tradycyjnie OpenCV używa kodowania BGR (Blue-Green-Red) dla obrazów kolorowych, podczas gdy reszta narzędzi Pythona używa bardziej tradycyjnego RGB (Red-Green-Blue). Aby obraz wyglądał poprawnie, musisz przekonwertować go na przestrzeń kolorów RGB, albo przez zamianę wymiarów w tablicy NumPy, albo przez wywołanie funkcji OpenCV:

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

Ta sama funkcja cvtColor może być używana do wykonywania innych transformacji przestrzeni kolorów, takich jak konwersja obrazu na skalę szarości lub na przestrzeń HSV (Hue-Saturation-Value).

Możesz również użyć OpenCV do ładowania wideo klatka po klatce - przykład znajduje się w ćwiczeniu OpenCV Notebook.

Przetwarzanie obrazów

Przed przekazaniem obrazu do sieci neuronowej możesz chcieć zastosować kilka kroków wstępnego przetwarzania. OpenCV oferuje wiele możliwości, w tym:

  • Zmiana rozmiaru obrazu za pomocą im = cv2.resize(im, (320,200),interpolation=cv2.INTER_LANCZOS)
  • Rozmycie obrazu za pomocą im = cv2.medianBlur(im,3) lub im = cv2.GaussianBlur(im, (3,3), 0)
  • Zmiana jasności i kontrastu obrazu może być wykonana za pomocą manipulacji tablicami NumPy, jak opisano w tej notatce na Stackoverflow.
  • Użycie progowania przez wywołanie funkcji cv2.threshold/cv2.adaptiveThreshold, co często jest preferowane w stosunku do regulacji jasności lub kontrastu.
  • Zastosowanie różnych transformacji obrazu:
    • Transformacje afiniczne mogą być przydatne, jeśli potrzebujesz połączyć obrót, zmianę rozmiaru i pochylanie obrazu, a znasz lokalizację źródłową i docelową trzech punktów na obrazie. Transformacje afiniczne zachowują równoległość linii.
    • Transformacje perspektywiczne mogą być przydatne, gdy znasz pozycje źródłowe i docelowe 4 punktów na obrazie. Na przykład, jeśli robisz zdjęcie prostokątnego dokumentu za pomocą kamery smartfona pod pewnym kątem i chcesz uzyskać prostokątny obraz samego dokumentu.
  • Zrozumienie ruchu wewnątrz obrazu za pomocą optycznego przepływu.

Przykłady użycia wizji komputerowej

W naszym OpenCV Notebook przedstawiamy kilka przykładów, kiedy wizja komputerowa może być używana do wykonywania konkretnych zadań:

  • Wstępne przetwarzanie fotografii książki Braille'a. Skupiamy się na tym, jak można użyć progowania, detekcji cech, transformacji perspektywicznej i manipulacji NumPy, aby oddzielić pojedyncze symbole Braille'a do dalszej klasyfikacji przez sieć neuronową.
Obraz Braille'a Obraz Braille'a po przetworzeniu Symbole Braille'a

Obraz z OpenCV.ipynb

  • Detekcja ruchu w wideo za pomocą różnicy klatek. Jeśli kamera jest nieruchoma, to klatki z jej strumienia powinny być dość podobne do siebie. Ponieważ klatki są reprezentowane jako tablice, wystarczy odjąć te tablice dla dwóch kolejnych klatek, aby uzyskać różnicę pikseli, która powinna być niska dla statycznych klatek, a wyższa, gdy w obrazie występuje znaczący ruch.

Obraz klatek wideo i różnic klatek

Obraz z OpenCV.ipynb

  • Detekcja ruchu za pomocą optycznego przepływu. Optyczny przepływ pozwala zrozumieć, jak poszczególne piksele na klatkach wideo się poruszają. Istnieją dwa rodzaje optycznego przepływu:

    • Gęsty optyczny przepływ oblicza pole wektorowe, które pokazuje dla każdego piksela, gdzie się porusza.
    • Rzadki optyczny przepływ opiera się na wybraniu charakterystycznych cech obrazu (np. krawędzi) i budowaniu ich trajektorii od klatki do klatki.

Obraz optycznego przepływu

Obraz z OpenCV.ipynb

✍️ Przykładowe Notatniki: OpenCV wypróbuj OpenCV w działaniu

Przeprowadźmy kilka eksperymentów z OpenCV, eksplorując OpenCV Notebook.

Podsumowanie

Czasami stosunkowo złożone zadania, takie jak detekcja ruchu czy detekcja końców palców, mogą być rozwiązane wyłącznie za pomocą wizji komputerowej. Dlatego warto znać podstawowe techniki wizji komputerowej oraz możliwości bibliotek takich jak OpenCV.

🚀 Wyzwanie

Obejrzyj ten film z programu AI Show, aby dowiedzieć się o projekcie Cortic Tigers i jak stworzyli rozwiązanie oparte na blokach, aby demokratyzować zadania wizji komputerowej za pomocą robota. Poszukaj innych podobnych projektów, które pomagają nowym uczniom wejść w tę dziedzinę.

Quiz po wykładzie

Przegląd i samodzielna nauka

Przeczytaj więcej o optycznym przepływie w tym świetnym tutorialu.

Zadanie

W tym laboratorium nagrasz wideo z prostymi gestami, a Twoim celem będzie wyodrębnienie ruchów góra/dół/lewo/prawo za pomocą optycznego przepływu.

Klatka ruchu dłoni

Zastrzeżenie:
Ten dokument został przetłumaczony za pomocą usługi tłumaczenia AI Co-op Translator. Chociaż staramy się zapewnić dokładność, prosimy mieć na uwadze, że automatyczne tłumaczenia mogą zawierać błędy lub nieścisłości. Oryginalny dokument w jego rodzimym języku powinien być uznawany za wiarygodne źródło. W przypadku informacji krytycznych zaleca się skorzystanie z profesjonalnego tłumaczenia przez człowieka. Nie ponosimy odpowiedzialności za jakiekolwiek nieporozumienia lub błędne interpretacje wynikające z użycia tego tłumaczenia.