Zaczęliśmy od nauki podstaw OpenCV, a następnie wykonaliśmy podstawowe przetwarzanie obrazu i manipulacje na obrazach, a następnie segmentację obrazu i wiele innych operacji przy użyciu języka OpenCV i python. Tutaj, w tej sekcji, przeprowadzimy kilka prostych technik wykrywania obiektów przy użyciu dopasowywania szablonów. Znajdziemy obiekt na obrazku, a następnie opiszemy jego cechy. Funkcje to typowe atrybuty obrazu, takie jak rogi, krawędzie itp. Przyjrzymy się również niektórym powszechnym i popularnym algorytmom wykrywania obiektów, takim jak SIFT, SURF, FAST, BREIF i ORB.
Jak powiedziano w poprzednich samouczkach, OpenCV to Open Source Commuter Vision Library, która ma interfejsy C ++, Python i Java i obsługuje systemy Windows, Linux, Mac OS, iOS i Android. Dzięki temu można go łatwo zainstalować w Raspberry Pi w środowisku Python i Linux. Raspberry Pi z OpenCV i dołączoną kamerą może być używany do tworzenia wielu aplikacji do przetwarzania obrazu w czasie rzeczywistym, takich jak wykrywanie twarzy, blokowanie twarzy, śledzenie obiektów, wykrywanie tablic rejestracyjnych samochodów, system bezpieczeństwa w domu itp.
Wykrywanie i rozpoznawanie obiektów to najważniejszy przypadek użycia widzenia komputerowego, są one wykorzystywane do robienia potężnych rzeczy, takich jak
- Opisywanie scen
- Nawigacja robotów
- Samochody autonomiczne
- Rozpoznawanie ciała (Microsoft Kinect)
- Wykrywanie chorób i raka
- Rozpoznawanie twarzy
- Rozpoznawanie pisma odręcznego
- Identyfikacja obiektów na zdjęciach satelitarnych
Wykrywanie obiektów VS rozpoznawanie
Rozpoznawanie obiektów to drugi poziom wykrywania obiektów, w którym komputer jest w stanie rozpoznać obiekt z wielu obiektów na obrazie i może go zidentyfikować.
Teraz wykonamy kilka funkcji przetwarzania obrazu, aby znaleźć obiekt z obrazu.
Znajdowanie obiektu na podstawie obrazu
Tutaj użyjemy dopasowywania szablonów do znalezienia znaku / obiektu na obrazie, użyj funkcji cv2.matchTemplate () OpenCV do znalezienia tego obiektu
import cv2 import numpy jako np
Załaduj obraz wejściowy i zamień go na szary
image = cv2.imread ('WaldoBeach.jpg') cv2.imshow ('people', image) cv2.waitKey (0) gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Załaduj obraz szablonu
template = cv2.imread ('waldo.jpg', 0) # wynik dopasowania szablonu obiektu do obrazu wynik = cv2.matchTemplate (gray, template, cv2.TM_CCOEFF) sin_val, max_val, min_loc, max_loc = cv2.minMaxLoc (wynik)
Utwórz obwiednię
top_left = max_loc # zwiększanie rozmiaru prostokąta ograniczającego o 50 pikseli bottom_right = (top_left + 50, top_left + 50) cv2.rectangle (image, top_left, bottom_right, (0,255,0), 5) cv2.imshow ('obiekt znaleziony', obraz) cv2.waitKey (0) cv2.destroyAllWindows ()
W cv2.matchTemplate (gray, template, cv2.TM_CCOEFF) wprowadź obraz w skali szarości, aby znaleźć obiekt i szablon. Następnie zastosuj metodę dopasowania szablonu do znalezienia obiektów z obrazu, tutaj używana jest cv2.TM_CCOEFF .
Cała funkcja zwraca tablicę, która jest wprowadzana jako wynik, będący wynikiem procedury dopasowania szablonu.
Następnie używamy cv2.minMaxLoc (wynik) , który podaje współrzędne lub prostokąt ograniczający, w którym obiekt został znaleziony na obrazie, a kiedy otrzymamy te współrzędne, narysuj nad nim prostokąt i rozciągnij trochę wymiary pudełka, aby obiekt można łatwo zmieścić wewnątrz prostokąta.
Istnieje wiele metod dopasowywania szablonów, w tym przypadku używamy cv2.TM_CCOEFF, co oznacza współczynnik korelacji.
Tutaj punktami kluczowymi są współrzędne (X, Y) wyodrębnione za pomocą detektora przesiewu i narysowane na obrazie za pomocą funkcji cv2 draw keypoint.
SURFOWAĆ
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Utwórz obiekt SURF Feature Detector, tutaj ustawiamy próg Hesji na 500
surf = cv2.xfeatures2d.SURF_create (500) keypoints, descriptors = surf.detectAndCompute (gray, None) print ("Number of keypoints Detected:", len (keypoints))
Rysuj bogate kluczowe punkty na obrazie wejściowym
image = cv2.drawKeypoints (obraz, punkty kluczowe, brak, flagi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcji - SURF', obraz) cv2.waitKey () cv2.destroyAllWindows ()
Wyjście konsoli:
SZYBKI
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Utwórz obiekt FAST Detector
fast = cv2.FastFeatureDetector_create () # Uzyskaj kluczowe punkty, domyślnie nie maksymalne tłumienie jest włączone # aby wyłączyć set fast.setBool ('nonmaxSuppression', False) keypoints = fast.detect (szary, brak) print ("Liczba punktów kluczowych Wykryto: ", len (keypoints))
Rysuj bogate punkty kluczowe na obrazie wejściowym
image = cv2.drawKeypoints (obraz, punkty kluczowe, brak, flagi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcji - FAST', obraz) cv2.waitKey () cv2.destroyAllWindows ()
Wyjście konsoli:
KRÓTKI
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Utwórz obiekt detektora FAST
brief = cv2.xfeatures2d.BriefDescriptorExtractor_create ()
Utwórz obiekt ekstraktora BRIEF
#brief = cv2.DescriptorExtractor_create ("BRIEF") # Określ kluczowe punkty keypoints = fast.detect (szary, brak)
Uzyskaj deskryptory i nowe końcowe punkty kluczowe za pomocą BRIEF
keypoints, descriptors = short.compute (gray, keypoints) print ("Number of keypoints Detected:", len (keypoints))
Rysuj bogate punkty kluczowe na obrazie wejściowym
image = cv2.drawKeypoints (obraz, punkty kluczowe, brak, flagi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcji - SKRÓT , obraz) cv2.waitKey () cv2.destroyAllWindows ()
Wyjście konsoli:
KULA
import cv2 import numpy as np image = cv2.imread ('paris.jpg') gray = cv2.cvtColor (image, cv2.COLOR_BGR2GRAY)
Tworząc obiekt ORB, możemy określić liczbę kluczowych punktów, które chcemy
orb = cv2.ORB_create () # Określ kluczowe punkty keypoints = orb.detect (szary, brak)
Uzyskaj deskryptory
keypoints, descriptors = orb.compute (gray, keypoints) print ("Number of keypoints Detected:", len (keypoints))
Rysuj bogate punkty kluczowe na obrazie wejściowym
image = cv2.drawKeypoints (obraz, punkty kluczowe, brak, flagi = cv2.DRAW_MATCHES_FLAGS_DRAW_RICH_KEYPOINTS) cv2.imshow ('Metoda funkcji - ORB', obraz) cv2.waitKey () cv2.destroyAllWindows ()
Wyjście konsoli:
Możemy określić liczbę punktów kluczowych, których maksymalny limit wynosi 5000, jednak domyślna wartość to 500, tj. ORB automatycznie wykryje najlepsze 500 punktów kluczowych, jeśli nie zostanie określony dla żadnej wartości punktów kluczowych.
Tak więc wykrywanie obiektów odbywa się w OpenCV, te same programy mogą być również uruchamiane w Raspberry Pi z zainstalowanym OpenCV i mogą być używane jako urządzenie przenośne, takie jak smartfony z Google Lens.
Ten artykuł pochodzi z kursu Master Computer Vision ™ OpenCV4 w Pythonie z głębokim uczeniem na Udemy, stworzonego przez Rajeeva Ratana, subskrybuj go, aby dowiedzieć się więcej o Computer Vision i Pythonie.