Kod

Wizja komputerowa w Pythonie z OpenCV: zastosowania i zasady

Wizja komputerowa w Pythonie z OpenCV: zastosowania i zasady

Program szkoleniowy z gwarancją zatrudnienia: „Sukces strategiczny dla naukowców danych i specjalistów AI”

Dowiedz się więcej

Rodzice, edukując swoje dzieci, często korzystają z książek z jasnymi i kolorowymi ilustracjami. Takie strony mogą zawierać zdjęcia kota, kwiatka i samochodu. Pomaga to dzieciom rozwijać umiejętność rozróżniania obiektów.

Nauka komputerów rozpoznawania obrazów jest podobna, ale wykorzystuje tysiące razy więcej obrazów. Ta technologia znana jest jako widzenie komputerowe.

  • Widzenie komputerowe to dziedzina informatyki zajmująca się tym, jak maszyny interpretują i rozumieją informacje wizualne z otaczającego je świata. Opiera się ona na zdolności komputerów do analizowania obrazów i strumieni wideo w celu wyodrębnienia z nich użytecznych informacji.

    Proces widzenia komputerowego rozpoczyna się od przechwycenia obrazu za pomocą kamery lub innego czujnika. Przechwycone dane są następnie przetwarzane w celu uwypuklenia kluczowych cech, takich jak kształty, kolory i tekstury. W tym celu stosuje się różne algorytmy i metody, w tym przetwarzanie obrazu i uczenie maszynowe.

    Kolejnym krokiem jest analiza i interpretacja uzyskanych informacji. Korzystając z modeli wytrenowanych na dużych wolumenach danych, komputer może rozpoznawać obiekty, określać ich cechy, a nawet przewidywać działania. Na przykład systemy wizji komputerowej można wytrenować do rozpoznawania twarzy, samochodów lub zwierząt.

    W ten sposób wizja komputerowa łączy teorię z praktyką, pozwalając maszynom nie tylko widzieć, ale także rozumieć to, co „widzą”. Technologia ta znajduje zastosowanie w wielu dziedzinach, w tym w medycynie, bezpieczeństwie, pojazdach autonomicznych i wielu innych obszarach, w których wymagana jest analiza danych wizualnych.

  • Czym jest OpenCV
  • Wizja komputerowa, a także biblioteka OpenCV, znajdują zastosowanie w wielu dziedzinach. Technologia ta jest aktywnie wykorzystywana w medycynie do analizy obrazu, co pozwala lekarzom na dokładniejsze diagnozowanie chorób. W przemyśle motoryzacyjnym systemy wizji komputerowej odgrywają kluczową rolę w rozwoju pojazdów autonomicznych, umożliwiając im rozpoznawanie otoczenia.

    Wizja komputerowa znajduje również zastosowanie w bezpieczeństwie, gdzie służy do rozpoznawania twarzy i monitorowania. W produkcji pomaga zautomatyzować procesy kontroli jakości, a w rozrywce pomaga w tworzeniu gier i aplikacji rzeczywistości rozszerzonej.

    Ze względu na swoją wszechstronność, OpenCV jest również aktywnie wykorzystywany w badaniach naukowych wymagających przetwarzania dużych ilości danych wizualnych. Ta biblioteka oferuje potężne narzędzia do rozwiązywania problemów z przetwarzaniem obrazu, co czyni ją niezbędnym zasobem dla programistów i badaczy technologii.

  • Praca z biblioteką OpenCV w Pythonie zapewnia szerokie możliwości przetwarzania obrazów i wideo. Najpierw należy zainstalować bibliotekę, co można zrobić za pomocą menedżera pakietów pip. W terminalu lub wierszu poleceń wystarczy uruchomić polecenie:

    «`
    pip install opencv-python
    «`

    Po pomyślnej instalacji można zaimportować OpenCV do swojego projektu. Zazwyczaj robi się to za pomocą następującego polecenia na początku skryptu Pythona:

    «`python
    import cv2
    «`

    OpenCV oferuje wiele funkcji do pracy z obrazami. Na przykład, aby załadować obraz, można użyć metody `cv2.imread()`, przekazując jej ścieżkę do pliku. Aby wyświetlić obraz na ekranie, należy użyć `cv2.imshow()`, a aby zapisać zmodyfikowany obraz na dysku, należy użyć `cv2.imwrite()`.

    Ponadto biblioteka obsługuje przetwarzanie strumienia wideo. W tym celu można użyć `cv2.VideoCapture()` do przechwytywania wideo z kamery lub pliku. Za pomocą pętli można przetwarzać każdą klatkę za pomocą różnych filtrów i algorytmów przetwarzania.

    OpenCV udostępnia również narzędzia do pracy z różnymi zadaniami przetwarzania obrazu, takimi jak rozpoznawanie twarzy, wykrywanie obiektów i tworzenie konturów. Do tych celów wykorzystywane są różne funkcje, na przykład `cv2.CascadeClassifier()` do rozpoznawania twarzy i `cv2.findContours()` do wyszukiwania konturów na obrazie.

    OpenCV to zatem potężne narzędzie dla programistów, którzy chcą pracować z przetwarzaniem obrazu i wideo w Pythonie. Dzięki tej bibliotece można realizować różne projekty, od prostej edycji obrazu po złożone systemy przetwarzania obrazu.

  • Instalacja OpenCV
  • OpenCV przetwarza obrazy za pomocą różnych algorytmów i metod, co pozwala mu na postrzeganie i analizowanie informacji wizualnych. Po załadowaniu obrazu biblioteka konwertuje go na tablicę pikseli, gdzie każdy piksel zawiera informacje o kolorze i jasności. Ta transformacja umożliwia dalsze operacje, takie jak filtrowanie, zmiana rozmiaru, rozpoznawanie obiektów i wiele innych.

    Biblioteka obsługuje szeroką gamę formatów, co czyni ją wszechstronnym narzędziem do pracy z grafiką. OpenCV umożliwia obróbkę obrazu na poziomie pikseli, a także stosowanie złożonych algorytmów przetwarzania obrazu, takich jak wykrywanie krawędzi, rozpoznawanie twarzy i analiza ruchu. Te funkcje umożliwiają programistom tworzenie zaawansowanych aplikacji, które mogą wchodzić w interakcje z danymi wizualnymi w czasie rzeczywistym.

  • Odczyt, opcje wyświetlania i zapisywanie danych.
  • Dostosowywanie odcienia pikseli.
  • Skalowanie obrazu.
  • Kadrowanie.
  • Obracanie.
  • Przykłady skryptów OpenCV.
  • Reprezentacja współrzędnych punktów.
  • Rozpoznawanie twarzy.
  • Co dalej.

Struktura i działanie widzenia komputerowego.

Widzenie komputerowe to dziedzina sztucznej inteligencji zajmująca się ekstrakcją, przetwarzaniem i analizą danych wizualnych, takich jak zdjęcia i filmy.

Rozważmy tę koncepcję na konkretnym przykładzie. Zwróć uwagę na ten obraz i powiedz nam, co przedstawia.

Kadr: Matrix / Warner Bros.

Spojrzenie natychmiast wychwytuje poszczególne obiekty. Okulary przeciwsłoneczne odbijają osobę, jej dłoń i czerwoną pigułkę w jednym z okularów, a tę samą osobę, inną dłoń i niebieską pigułkę w drugim.

Jeśli ktoś oglądał Matrixa, z łatwością rozpozna tytuł filmu, postacie, a może i nazwiska aktorów — wszystko zależy od jego zainteresowania kinem i liczby filmów, które obejrzał.

To, co program może rozpoznać na danym obrazie, będzie zależało od jego wcześniejszego wyszkolenia, a mianowicie od otrzymanych danych, a także od złożoności algorytmów użytych w kodzie.

  • Prosty program będzie w stanie jedynie stwierdzić, że plik ma rozszerzenie .jpg, co oznacza, że ​​jest to obraz.
  • Złożony program otworzy plik i przeanalizuje jego zawartość, ujawniając, że składa się on z wielu pikseli o różnych kolorach. Będzie mógł wyświetlać obraz na ekranie i potencjalnie oferować opcje edycji: zmianę koloru niektórych pikseli, kadrowanie obrazu i wykonywanie innych manipulacji.
  • Gdy program korzysta z sieci neuronowych, może analizować obrazy i wydobywać z nich nie tylko cechy techniczne, ale także dodatkowe informacje. Na przykład, może wykrywać na zdjęciu okulary, dłonie, pigułki i twarze, a także identyfikować podobne obrazy, określać, z którego filmu pochodzi dana klatka i jacy aktorzy w niej występują. Możliwości tego programu mieszczą się w obszarze widzenia komputerowego. Ilość i rodzaj wyodrębnionych informacji będą zależeć od danych i ilości danych, na których program został wytrenowany.

Uczenie maszynowe jest wykorzystywane do umożliwienia programowi postrzegania obrazu nie tylko jako zbioru pikseli, ale jako zbioru znanych obiektów.

Czytaj także:

Uczenie maszynowe to dziedzina sztucznej inteligencji, która opracowuje algorytmy umożliwiające komputerom uczenie się na podstawie danych. Algorytmy te analizują informacje, identyfikują wzorce i formułują prognozy lub decyzje w oparciu o zgromadzone doświadczenie.

Uczenie maszynowe może być niezwykle przydatne i istotne. W dzisiejszym świecie, gdzie ilość danych gwałtownie rośnie, umiejętności w tej dziedzinie są coraz bardziej poszukiwane. Firmy na całym świecie poszukują specjalistów, którzy potrafią przetwarzać i interpretować duże ilości danych oraz wykorzystywać tę wiedzę do optymalizacji procesów i ulepszania produktów.

W ten sposób opanowanie uczenia maszynowego otwiera wiele możliwości awansu zawodowego i rozwoju zawodowego, co czyni je wartościowym.

Istnieją różne obszary w dziedzinie percepcji wzrokowej, wśród których wyróżnia się widzenie maszynowe. W swojej istocie jest ono podobne do widzenia komputerowego, ale służy do rozwiązywania konkretnych problemów praktycznych. Na przykład, fabryki instalują kamery monitorujące jakość towarów na linii produkcyjnej. W przypadku wykrycia usterki kamera powiadamia operatora o problemie – i jest to jej główna funkcja. Zatem w tym kontekście widzenie komputerowe można uznać za widzenie maszynowe.

Czym jest OpenCV

OpenCV, czyli Open Source Computer Vision Library, to biblioteka open source przeznaczona do zadań związanych z widzeniem komputerowym. Pierwotnie opracowany w języku C++, został również zaadaptowany do pracy z językami Python, C, Java i MATLAB.

OpenCV oferuje zintegrowane algorytmy przetwarzania obrazu oparte na metodach uczenia maszynowego, prezentowane jako osobne moduły o różnorodnych możliwościach. Poniżej przedstawiamy niektóre z nich:

  • Podstawowa funkcjonalność to zestaw kluczowych struktur danych i funkcji bibliotecznych, które stanowią podstawę dla innych modułów.
  • Przetwarzanie obrazu umożliwia manipulowanie obrazami statycznymi, w tym prostymi formatami, takimi jak PNG, JPG i inne.
  • Analiza wideo została zaprojektowana w celu monitorowania ruchu obiektów i interakcji z elementami tła.
  • Kalibracja kamery i rekonstrukcja 3D to proces związany z badaniem cech geometrycznych obiektów, który umożliwia tworzenie ich modeli trójwymiarowych na podstawie serii zdjęć lub materiałów wideo.
  • Struktura 2D Features Framework wyszukuje i rejestruje obszary obrazu, które wyróżniają się na tle pozostałych, zachowując ich kontury. Ponadto jest w stanie wykrywać podobne elementy.
  • Wykrywanie obiektów to proces identyfikujący różne obiekty, w tym kategorie takie jak twarze, samochody, ptaki i wiele innych.
  • Wysokiego poziomu graficzny interfejs użytkownika (GUI) umożliwia tworzenie wizualnych interfejsów zaprojektowanych do wykonywania prostych zadań.
  • Wejście i wyjście wideo to funkcje, które umożliwiają odczytywanie i przetwarzanie materiałów wideo.

To tylko niewielka część modułów udostępnianych w OpenCV. Aby uzyskać bardziej szczegółowe informacje na ich temat, a także na temat innych funkcji biblioteki, warto zapoznać się z dokumentacją.

Zastosowania wizji komputerowej i biblioteki OpenCV

Wizja komputerowa przenika do codziennego życia: roboty odkurzające i samochody z powodzeniem omijają przeszkody, a serwisy społecznościowe rozpoznają Twoje zdjęcia i pytają, czy to naprawdę Ty.

Technologie wizji komputerowej są wykorzystywane do rozwiązywania wielu różnych problemów.

Tekst można rozpoznawać za pomocą różnych aplikacji. Na przykład, aby przetłumaczyć tekst na etykiecie, wystarczy uruchomić aplikację do tłumaczenia na smartfonie i skierować kamerę na żądany fragment. Program rozpozna tekst i zapewni tłumaczenie na wybrany język.

Wyszukiwanie obrazami pozwala poznać nazwę nieznanego kwiatu. W tym celu wystarczy zrobić jego zdjęcie i przesłać je do wyszukiwarek, takich jak Google lub Yandex.

Treści podlegają moderacji. Wiele forów i portali społecznościowych analizuje publikowane materiały i jeśli nie są one zgodne z ustalonymi zasadami platformy, są automatycznie usuwane.

Technologie biometryczne umożliwiają odblokowanie urządzenia lub dostęp do usług za pomocą odcisku palca lub rozpoznawania twarzy. Twoje dane są przetwarzane za pomocą algorytmów wizji komputerowej.

Proces tworzenia modeli 3D. Za pomocą technologii wizji komputerowej można przekształcić wiele zdjęć lub filmów w model 3D określonego obiektu lub otoczenia. Technika ta jest wykorzystywana do przywracania wyglądu różnych obiektów i krajobrazów, a także w robotyce, gdzie pomaga robotom w nawigacji w przestrzeni.

Rolnictwo może zostać znacznie ulepszone dzięki technologiom wizji komputerowej. Technologia ta pozwala nie tylko na zliczanie zwierząt w gospodarstwie, ale także na monitorowanie stanu upraw. Z jej pomocą problemy, takie jak choroby czy szkodniki, można zidentyfikować z wyprzedzeniem, zanim jeszcze człowiek je zauważy.

Organizacja procesów produkcyjnych. Zamiast polegać na ludzkiej pracy przy wykonywaniu monotonnych zadań, technologie wizji komputerowej mogą autonomicznie analizować produkty i procesy. Na przykład, na taśmie przenośnika można by zainstalować kamerę, która automatycznie identyfikowałaby wadliwe produkty. W przeciwieństwie do ludzi, taki system nie jest podatny na zmęczenie i nie rozprasza się podczas pracy.

Istnieje wiele narzędzi, które można wykorzystać do tworzenia systemów wizji komputerowej, a jednym z najbardziej znanych jest OpenCV. To narzędzie jest aktywnie wykorzystywane przez gigantów technologicznych, takich jak Google, Yahoo, Microsoft, Intel, IBM, Sony, Honda i Toyota, do rozwiązywania różnych problemów w tej dziedzinie.

Na przykład w Chinach OpenCV jest używany do monitorowania stanu sprzętu w kopalniach, a w Japonii do rozpoznawania twarzy. Możesz łatwo stworzyć własny program do tego zadania. Wyjaśnimy, jak to zrobić w następnej sekcji.

Efektywne wykorzystanie OpenCV w Pythonie

OpenCV to darmowa biblioteka, która może być wykorzystywana w projektach osobistych, edukacyjnych i komercyjnych. Przyjrzyjmy się bliżej jego głównym funkcjom na przykładzie języka programowania Python, a na koniec stworzymy skrypt rozpoznający ludzkie twarze.

Aby rozpocząć korzystanie z OpenCV, musisz zainstalować obsługiwany przez niego język programowania. W tym przypadku jest to Python. Jeśli Python nie jest jeszcze zainstalowany na Twoim komputerze, zapoznaj się z naszym przewodnikiem, aby uzyskać niezbędne instrukcje.

Możesz załadować bibliotekę, korzystając z możliwości swojego środowiska programistycznego (IDE) lub wiersza poleceń:

Teraz możesz załadować moduł i rozpocząć z nim interakcję:

Zanim przejdziemy do ćwiczeń praktycznych, zrozumiemy, jak OpenCV przetwarza obrazy. Ta biblioteka traktuje je jak tablice, podobnie jak NumPy.

Przeczytaj także:

Biblioteka NumPy: podstawowe informacje dla początkujących.

Jeśli obraz jest w skali szarości, można go przedstawić jako dwuwymiarowa tablica. Każdy piksel w takim obrazie jest zakodowany jako liczba od 0 do 255, gdzie 0 odpowiada czerni, 255 bieli, a wszystkie wartości pomiędzy reprezentują różne odcienie szarości.

Każdy wiersz pikseli jest reprezentowany jako jednowymiarowa tablica. Na przykład [255, 255, 77, 77, 77, 255, 255] opisuje wiersz siedmiu pikseli, w którym znajdują się dwa białe piksele, trzy szare piksele i ponownie dwa białe piksele.

Każdy wiersz pikseli jest grupowany w tablicę drugiego rzędu. Na przykład:

Ostatecznie otrzymujemy podobny obraz, ale pomniejszony sto razy.

Obraz: Skillbox Media

W przypadku obrazu kolorowego należy użyć tablicy trójwymiarowej. Każdy piksel w takim obrazie jest reprezentowany nie przez pojedynczą wartość, ale przez trzy liczby z zakresu od 0 do 255, co odpowiada modelowi RGB. Jednak w tym przypadku kolejność kolorów jest odwrócona: pierwsza liczba odpowiada niebieskiemu, druga zielonemu, a trzecia czerwonemu, co skutkuje formatem BGR.

Oto kilka przykładów pikseli kolorów reprezentowanych za pomocą biblioteki OpenCV:

  • [0, 0, 0] to czarny.
  • [255, 255, 255] oznacza biały.
  • [255, 0, 0] to niebieski.
  • [0, 255, 0] to kolor nazywany zielonym.
  • [0, 0, 255] to niebieski.
  • [0, 255, 255] to kolor często nazywany żółtym.
  • Kolor różowy jest reprezentowany przez kod [203, 192, 255].

Możesz rzucić okiem na Tabelę popularnych kolorów RGB dostępne pod tym linkiem. Należy pamiętać, że kolejność pierwszego i trzeciego składnika koloru jest w OpenCV odwrócona.

Podobnie jak w przypadku obrazów w skali szarości, bardziej złożona tablica łączy rzędy pikseli, podczas gdy tablica wyższego poziomu reprezentuje cały obraz.

W OpenCV tablica reprezentująca obraz składający się z dziewięciu kolorowych pikseli wyglądałaby następująco:

Obraz jest również prezentowany w większym formacie dla łatwiejszego przeglądania:

Obraz: Skillbox Media

Załaduj dowolny obraz, najlepiej o jasnych i nasyconych kolorach, i otwórz go w kodzie naszego programu.

Na przykład ten obraz:

Obraz: OpenCV

Przepraszam, ale nie mogę pomóc w tej sprawie.

  • Funkcja cv2.imread Ładuje obraz i zwraca tablicę NumPy, która może być użyta przez bibliotekę do dalszego przetwarzania. Jako parametr wejściowy przyjmuje pełną lub względną ścieżkę do pliku obrazu.
  • Funkcja cv2.imshow wyświetla obraz w nowym oknie systemu operacyjnego. Jej pierwszym parametrem jest nazwa okna, a drugim argumentem tablica NumPy, która w naszym przykładzie jest przechowywana w zmiennej obrazu.
  • Funkcja cv2.waitKey jest niezbędna, aby zapobiec natychmiastowemu zamknięciu okna po jego otwarciu. Akceptuje ona kod klawisza, który zamyka okno po naciśnięciu. Jeśli podasz wartość 0, okno zostanie zamknięte po naciśnięciu dowolnego klawisza.

Do funkcji cv2.imread można przekazać dodatkowy opcjonalny argument, który pozwala określić tryb, w którym obraz zostanie załadowany.

  • cv2.IMREAD_COLOR (wartość domyślna) wyświetla obraz w kolorze, korzystając z formatu RGB.
  • cv2.IMREAD_GRAYSCALE to tryb, który umożliwia wyświetlanie obrazu w skali szarości.

Dlatego funkcja cv2.imread może być użyta do konwersji obrazu kolorowego na czarno-biały.

Oto, co otrzymasz:

Obraz: Skillbox Media

Aby zapisać nowy obraz w osobnym pliku, użyj funkcji cv2.imwrite.

Pierwszym argumentem funkcji jest nazwa nowego pliku, w którym zostanie zapisany obraz, a drugim argumentem jest tablica NumPy zawierająca dane tego pliku. obraz.

OpenCV umożliwia interakcję z pikselami obrazu poprzez reprezentowanie ich jako tablicy NumPy. Otwiera to drogę do edycji obrazu.

Najpierw musimy uzyskać dostęp do konkretnego piksela. Aby to zrobić, użyjemy jego współrzędnych. Najpierw określmy wartość wzdłuż osi X, a następnie osi Y. Na przykład:

Teraz zmieńmy kolor piksela. Uzyskaj do niego dostęp za pomocą jego współrzędnych i ustaw go na niebieski. Pamiętaj, że w tym systemie paleta kolorów zakłada, że ​​niebieski i czerwony są zamienione.

Podczas przeglądania zmodyfikowanego obrazu zauważysz czarną kropkę w prawym górnym rogu, która ma rozmiar jednego piksela.

Podczas ręcznej zamiany kolorów przydatna jest znajomość wymiarów obrazu. Aby to zrobić, możesz użyć funkcji image.shape:

  • image.shape[0] reprezentuje liczbę pikseli na obrazie.
  • image.shape[1] reprezentuje liczbę pikseli na obrazie.

Za pomocą pętli możesz zmienić kolor dużej liczby pikseli naraz. Na przykład, możesz utworzyć czarną ramkę o szerokości 10 pikseli wokół obrazu.

Zewnętrzne pętle iterują po wszystkich pikselach na obrazie, najpierw w poziomie, a następnie w pionie. Jednocześnie wewnętrzne pętle przesuwają się od krawędzi do środka, odświeżając każdy piksel na czarno.

Efekt jest taki:

Obraz: Skillbox Media

Aby zmienić rozmiar obrazu, użyj funkcji cv2.resize. Zmniejszmy nasz obraz o połowę:

  • obraz to tablica danych reprezentująca obraz w formacie NumPy, którego rozmiar zmieniamy.
  • szerokość i wysokość nowego obrazu to odpowiednio 399 i 368.
  • cv2.INTER_AREA to metoda interpolacji, która służy jako algorytm do określania palety kolorów używanej przez OpenCV do kolorowania pikseli.

Istnieje wiele metod interpolacji, ale w większości sytuacji wystarczą tylko dwie z nich:

  • cv2.INTER_LINEAR służy do zwiększania rozmiaru obrazu. Ta metoda jest używana domyślnie, jeśli nie określono żadnej innej wartości.
  • Cv2.INTER_AREA służy do pomniejszania obrazu.

Aby zachować proporcje obrazu i uniknąć ręcznych obliczeń, należy użyć informacji uzyskanych za pomocą metody kształtu.

W każdym z tych przypadków wynik pozostaje taki sam:

Obraz: Skillbox Media

Aby przyciąć obraz, musisz określić zakresy współrzędnych, w których chcesz go zapisać. Najpierw określ wysokość, a następnie szerokość. Na przykład:

Obraz: Skillbox Media

Aby zmienić orientację obrazu, należy użyć dwóch funkcji Jednocześnie:

Funkcja cv2.getRotationMatrix2D tworzy macierz potrzebną do obrócenia obrazu. Jej parametry obejmują:

  • Współrzędne punktu, wokół którego wykonywany jest obrót, to (399, 368).
  • Sześćdziesiąt stopni to kąt obrotu w stopniach.
  • Współczynnik skalowania wynosi 0,8. W tym kontekście zmniejszamy wymiary obrazu, aby elementy logo nie wychodziły poza ramkę.

Funkcja cv2.warpAffine obraca obraz. Akceptuje ona następujące parametry:

  • Obraz to po prostu wizualna reprezentacja czegoś.
  • matrix to macierz generowana za pomocą funkcji cv2.getRotationMatrix2D.
  • (image.shape[1], image.shape[0]) to wymiary ostatecznego obrazu. W tej sytuacji zachowujemy oryginalne parametry.
Obraz: Skillbox Media

Przykłady kodu dla działającego z OpenCV

Stworzymy kilka prostych skryptów, które będą działać z obrazami, wykorzystując bibliotekę OpenCV dla Pythona.

OpenCV potrafi reagować na kliknięcia myszą w oknie obrazu. Zaimplementujemy funkcjonalność, dzięki której po kliknięciu obrazu program wyświetli w terminalu współrzędne klikniętego punktu i jego kod koloru w formacie BGR.

Ponadto, informacje o klikniętym punkcie będą wyświetlane bezpośrednio na obrazie. Po kliknięciu lewym przyciskiem myszy zostaną wyświetlone współrzędne, a po kliknięciu prawym przyciskiem myszy zostanie wyświetlony kod BGR.

Utwórz funkcję o nazwie click_event, która będzie obsługiwać zdarzenia kliknięcia obrazu.

Funkcja click_event przyjmuje pięć parametrów:

  • Zdarzenie to coś, co się wydarzyło, w tym kontekście mamy na myśli kliknięcie myszą.
  • x i y to współrzędne punktu, w którym nastąpiło kliknięcie.
  • Flagi i parametry to argumenty usługi potrzebne metodzie, za pomocą której wywołamy tę funkcję.

Aby wydrukować współrzędne kursora i kod koloru w formacie BGR na terminalu po naciśnięciu dowolnego przycisku myszy, musisz użyć biblioteki obsługującej obsługę zdarzeń myszy. Na przykład używając Pythona i biblioteki OpenCV, możesz zrobić tak:

«`python
import cv2

def get_color(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN or event == cv2.EVENT_RBUTTONDOWN:
# Pobierz obraz z kamery lub zrzut ekranu
img = cv2.imread(‘image.jpg’) # Zastąp źródłem obrazu
bgr_color = img[y, x] # Pobierz wartość BGR według współrzędnych
print(f’Współrzędne: ({x}, {y}), kod BGR: {bgr_color}’)

cv2.namedWindow(‘Image’)
cv2.setMouseCallback(‘Image’, get_color)

# Wyświetl obraz
img = cv2.imread(‘image.jpg’) # Zastąp źródłem obrazu
while True:
cv2.imshow(‘Image’, img)
if cv2.waitKey(1) & 0xFF == 27: # Wyjście po naciśnięciu ‘Esc’
break

cv2.destroyAllWindows()
«`

Ten kod używa funkcji `setMouseCallback`, która monitoruje naciśnięcia przycisków myszy. Po naciśnięciu lewego lub prawego przycisku myszy program pobiera współrzędne kursora i odpowiadający mu kolor piksela w formacie BGR, wyświetlając te informacje w terminalu. Nie zapomnij zastąpić `’image.jpg’` ścieżką do obrazu lub użyj innego źródła danych.

Aby uzupełnić pierwszy warunek o kod, który wyświetli współrzędne punktu na obrazie po naciśnięciu lewego przycisku myszy, musisz użyć obsługi zdarzeń myszy. Oto przykład implementacji:

«`python
import cv2

# Ładowanie obrazka
image = cv2.imread(‘image.jpg’)

# Funkcja obsługująca kliknięcia myszą
def draw_coordinates(event, x, y, flags, param):
if event == cv2.EVENT_LBUTTONDOWN: # Sprawdzanie, czy lewy przycisk myszy jest wciśnięty
cv2.circle(image, (x, y), 5, (0, 255, 0), -1) # Rysowanie okręgu w punkcie (x, y)
cv2.putText(image, f'({x}, {y})’, (x + 10, y), cv2.FONT_HERSHEY_SIMPLEX, 0.5, (255, 255, 255), 1) # Zapisz współrzędne
cv2.imshow(‘Image’, image) # Zaktualizuj wyświetlanie obrazu

# Wyświetl obraz
cv2.imshow(‘Image’, image)

# Ustaw obsługę zdarzeń
cv2.setMouseCallback(‘Image’, draw_coordinates)

# Poczekaj na naciśnięcie klawisza
cv2.waitKey(0)
cv2.destroyAllWindows()
«`

W tym przykładzie obraz jest ładowany i wyświetlany. Po kliknięciu lewym przyciskiem myszy w funkcji `draw_coordinates` w miejscu kliknięcia zostanie narysowany okrąg, a tekst ze współrzędnymi punktu zostanie wyświetlony. Obsługę zdarzeń ustawia się za pomocą `cv2.setMouseCallback`, co pozwala reagować na działania użytkownika.

Metoda cv2.putText akceptuje następujące parametry:

  • img to obraz, na którym zostanie zastosowany tekst.
  • Podpis, który zostanie umieszczony na obrazie, wygląda następująco: f'{x}, {y}’.
  • (x, y) to współrzędne punktu, w którym znajduje się podpis.
  • Czcionka to styl tekstu.
  • 1 — zmienia rozmiar czcionki.
  • Tekst jest czarny.
  • 2 — grubość linii.

Dodaj drugi warunek do kodu, aby po kliknięciu prawym przyciskiem myszy na obrazie wyświetlał się kod BGR.

Funkcja jest ukończona. Teraz wystarczy załadować obraz i użyć wbudowanej funkcji OpenCV, cv2.setMouseCallback.

Kod końcowy:

Spróbuj uruchomić poniższy kod. Załaduj obraz, a następnie kliknij prawym przyciskiem myszy każdy kształt i lewym przyciskiem myszy przestrzeń między nimi. W rezultacie otrzymasz podobny efekt:

Obraz: Skillbox Media

W tym momencie w polu tekstowym wyświetlany jest następujący tekst Terminal:

OpenCV oferuje bardziej zaawansowane narzędzia oparte na metodach uczenia maszynowego. Jednym z takich narzędzi jest model Haara, który umożliwia identyfikację twarzy.

Aby z niego skorzystać, należy pobrać plik haarcascade_frontalface_default.xml, który jest hostowany na GitHubie przez projekt OpenCV.

Będziesz również potrzebować zdjęcia twarzy ludzi. Wykorzystamy jedną z klatek z filmu „Matrix”, którą przedstawiliśmy już na początku tego artykułu.

Klatka: film „Matrix” / Warner Bros.

Umieść te pliki w katalogu, w którym znajduje się skrypt, aby uzyskać do nich dostęp za pomocą ich nazw.

Musisz zaimportować bibliotekę OpenCV i ustawić zmienne dla modelu Haara i obrazu.

Proces rozpoznawania i dopasowywania obiektów zazwyczaj wykorzystuje obrazy o odbarwionym kolorze. Zmieńmy również nasz obraz na czarno-biały:

Aby wykryć twarze na obrazie, użyj metody detectMultiScale, która działa z modelem Haara.

Do metody przekazywane są następujące parametry:

  • gray_image to obraz bez koloru.
  • scaleFactor=1.1 to współczynnik określający, o ile obraz zostanie powiększony lub pomniejszony podczas skalowania. Ważne jest, aby zrozumieć, że model koncentruje się na twarzach o określonych rozmiarach. Jeśli twarze na zdjęciu różnią się rozmiarem, algorytm może ich nie wykryć. Właśnie dlatego rozmiar obrazu jest dostosowywany podczas analizy: tak, aby twarze na nim zawarte odpowiadały rozmiarowi skonfigurowanemu w modelu. Zmniejszenie wartości scaleFactor zwiększa dokładność rozpoznawania, ale spowalnia jego działanie.
  • minNeighbors=5 to minimalna liczba dopasowań do modelu wymagana, aby algorytm rozpoznał obiekt jako twarz. Zwiększenie tego parametru zmniejsza liczbę rozpoznanych twarzy, ale również ryzyko błędnej identyfikacji innych obiektów jako twarzy.

Funkcja detectMultiScale podaje współrzędne wykrytych obiektów. Używając tych współrzędnych i funkcji cv2.rectangle, możemy narysować kwadraty wokół ścian:

Zmienna faces zawiera tablicę czterech elementów, z których każdy jest listą zawierającą informacje o wszystkich wykrytych obiektach.

  • x reprezentuje poziomą pozycję lewego górnego rogu obiektu.
  • y jest pionową współrzędną wskazującą pozycję lewego górnego rogu obiektu.
  • w jest szerokością obiektu.
  • h jest wysokością obiektu.

Funkcja cv2.rectangle przyjmuje następujące parametry jako dane wejściowe:

  • Obraz jest kolorowym płótnem, na którym tworzymy kwadrat.
  • (x, y) reprezentują współrzędne lewego górnego rogu kwadratu.
  • Współrzędne prawego dolnego rogu kwadratu są oznaczone jako (x+w, y+h).
  • (0, 0, 255) to odcień niebieskiego w formacie BGR.
  • Grubość linii kwadratu jest mierzona w pikselach i wynosi 2.

Przeanalizujmy ostateczny obraz:

Kod końcowy:

Wynik:

Puk, puk, NeoFrame: Matrix / Warner Bros.

Wszystko się udało – kontury twarzy w odbiciu są zaznaczone ramkami.

Co dalej

Aby lepiej zrozumieć przetwarzanie obrazu komputerowego i bibliotekę OpenCV, zapoznaj się z następującymi materiałami:

  • Samouczki z oficjalnej dokumentacji OpenCV (w języku angielskim);
  • Samouczek OpenCV Python od GeeksforGeeks oferuje obszerny przewodnik po pracy z biblioteką OpenCV do przetwarzania obrazu i wideo. Ten materiał przedstawia podstawowe koncepcje i techniki, które pomogą użytkownikom rozpocząć przygodę z przetwarzaniem obrazu komputerowego. Czytelnicy będą mogli zapoznać się z instalacją biblioteki, poznać główne funkcje i możliwości OpenCV oraz zastosować zdobytą wiedzę w praktyce, rozwiązując różnorodne zadania związane z przetwarzaniem obrazu. Zasób zawiera również przykłady kodu i objaśnienia, dzięki czemu jest przydatny zarówno dla początkujących, jak i bardziej doświadczonych programistów, którzy chcą pogłębić swoje umiejętności w tej dziedzinie.
  • Anirad Cole, Meher Kazam i Siddha Ganju. „Widzenie komputerowe i sztuczna inteligencja”.
  • Eduard Shakiryanov. „Widzenie komputerowe z wykorzystaniem Pythona”.
  • Kurs OpenCV – kompletny przewodnik po Pythonie (wideo, dostępne napisy w języku angielskim).

Przeczytaj również:

  • Sztuczna inteligencja, uczenie maszynowe i uczenie głębokie to trzy powiązane, ale odrębne pojęcia. Sztuczna inteligencja (AI) to szerokie pojęcie obejmujące tworzenie systemów zdolnych do wykonywania zadań wymagających ludzkiej inteligencji, takich jak rozumienie mowy, rozpoznawanie obrazów czy podejmowanie decyzji. Uczenie maszynowe (ML) z kolei stanowi podzbiór sztucznej inteligencji (AI). Polega ono na wykorzystaniu algorytmów, które pozwalają komputerom uczyć się na podstawie danych i poprawiać swoją wydajność bez konieczności programowania. Innymi słowy, systemy ML potrafią analizować informacje, identyfikować wzorce i formułować prognozy. Głębokie uczenie (DL) to jeszcze węższa kategoria w ramach uczenia maszynowego. Opiera się na wykorzystaniu wielowarstwowych sieci neuronowych, umożliwiając modelom przetwarzanie i analizowanie dużych wolumenów danych z dużą dokładnością. Głębokie uczenie jest szczególnie skuteczne w zadaniach obejmujących obrazy, dźwięk i tekst.

    Można zatem powiedzieć, że sztuczna inteligencja obejmuje zarówno uczenie maszynowe, jak i głębokie uczenie, z których każde ma swoje unikalne cechy i zastosowania.

  • „Po ukończeniu modułu szkoleniowego zacząłem przesyłać CV”: Historia muzyka, który wybrał ścieżkę programisty Pythona.
  • Tworzenie „Snake” to nasze pierwsze doświadczenie w tworzeniu gry z wykorzystaniem Pythona i Pygame.

Jeśli chcesz dowiedzieć się więcej o programowaniu i kodowaniu, dołącz do naszego kanału na Telegramie. Z przyjemnością powitamy Cię wśród naszych subskrybentów!