Spisu treści:

Podstawowe projekty OpenCV: 5 kroków
Podstawowe projekty OpenCV: 5 kroków

Wideo: Podstawowe projekty OpenCV: 5 kroków

Wideo: Podstawowe projekty OpenCV: 5 kroków
Wideo: Jak zbudować robota który śledzi piłkę? (Python, OpenCV) 2024, Lipiec
Anonim
Podstawowe projekty OpenCV
Podstawowe projekty OpenCV

W tym projekcie badamy niektóre podstawowe funkcje OpenCV poprzez 4 proste projekty obejmujące strumień wideo na żywo. Są to rozpoznawanie twarzy, usuwanie tła, specjalne renderowanie wizualne krawędzi i stosowanie efektu rozmycia w strumieniu wideo na żywo. Moim głównym celem wypróbowania tych projektów było po prostu zmoczenie stóp z interfejsem OpenCV, ponieważ planuję zagłębić się w pole widzenia komputerowego

Kieszonkowe dzieci

  • Komputer z systemem Python
  • Biblioteka Open CV, biblioteka Numpy, biblioteka tkinter, biblioteka sys
  • Aparat do podłączenia do komputera (jeśli komputer jeszcze go nie zawiera)
  • Plik Pythona programu (zawarty w tej instrukcji)
  • plik haarcascade xml (zawarty w tej instrukcji)

Krok 1: Funkcja wykrywania twarzy

Funkcja wykrywania twarzy
Funkcja wykrywania twarzy
Funkcja wykrywania twarzy
Funkcja wykrywania twarzy

Ta funkcja wyświetla wideo z kamery z zielonymi kwadratami na wszystkich wykrytych przez nią twarzach. W kodzie używamy funkcji cv2. VideoCapture() do przechowywania przechwyconego wideo w obiekcie o nazwie „capture”. CAPTURE_INDEX to liczba ustawiona przez komputer, która odpowiada indeksowi kamery na liście wejść wideo komputera. Jeśli nie masz kamery zewnętrznej podłączonej do komputera, powinno działać 0 lub 1.

Obiekt face_cascade jest inicjowany za pomocą funkcji cascadeClassifier i pliku „haarcascade_frontalface_default.xml” znajdującego się na githubie OpenCV. Używamy tego obiektu do przechowywania twarzy wykrytych na liście "twarze" jako wpisu czterokierunkowej krotki zawierającej współrzędną x, współrzędną y, szerokość i wysokość twarzy. Następnie rysujemy prostokąt, który idealnie otacza twarz za pomocą funkcji cv2.rectangle

Z tego filmu OpenCV przechwytuje wiele obrazów w naszej pętli while za pomocą capture.read() i przechowuje obraz w ramce, którą nazwaliśmy „img”. Każdy obraz jest następnie interpretowany i modyfikowany według własnego uznania. W przypadku faceDetect robimy obraz szary za pomocą funkcji cvtColor, która konwertuje dowolny obraz podany w pierwszym parametrze na określony typ koloru obrazu określony w drugim parametrze. Listę dopuszczalnych wartości drugiego parametru można znaleźć w Internecie. Następnie wyświetlamy obraz w oknie o nazwie „Wykrywanie twarzy” za pomocą funkcji imshow(), która pobiera ciąg znaków dla nazwy okna i ramki obrazu, która ma zostać wyświetlona.

Na koniec czekamy, aż użytkownik wprowadzi klawisz q za pomocą funkcji cv2.waitKey(). Maska 0xFF jest używana jako konwencja dla komputerów 64-bitowych. Po zakończeniu strumienia wideo przez użytkownika funkcja faceDetect zwalnia obiekt przechwytywania, a następnie niszczy wszystkie inne okna otwarte w interfejsie OpenCV. Wszystkie pozostałe funkcje mają podobną strukturę projektową.

Krok 2: Funkcja usuwania tła

Funkcja usuwania tła
Funkcja usuwania tła
Funkcja usuwania tła
Funkcja usuwania tła

Ta funkcja próbuje usunąć część tła naszego wideo i pozostawić tylko obraz pierwszego planu. Może nie działać w niektórych kamerach, ponieważ wykorzystują one funkcję regulacji oświetlenia, która jest aktywowana, gdy różne obiekty/ogniska wejdą w kadr. Jeśli funkcja backgroundRemove nie działa, nie martw się - może to być po prostu Twój aparat!

Aby skorzystać z tej funkcji, odsuń się od kadru kamery i naciśnij klawisz „d”, aby przechwycić obraz tła. Ważne jest, aby w tle nie było ruchomych obiektów, które chcesz uchwycić. Następnie możemy cofnąć się w kadr aparatu. Jeśli funkcja działała, użytkownik powinien widzieć siebie tylko w strumieniu wideo funkcji. Wszelkie szumy/czarne plamy na pierwszym planie obrazu mogą być wynikiem regulacji oświetlenia aparatu. Aby przechwycić inne tło, naciśnij klawisz „r”, aby ponownie zainicjować, a następnie ponownie naciśnij „d”.

Niektóre kluczowe elementy tej funkcji to użycie wartości logicznej „flaga”, która jest podnoszona w momencie naciśnięcia przez użytkownika przycisku d. Przechwytuje to tło i pozwala nam usunąć je z wideo przesyłanego strumieniowo przez funkcję. Staramy się przechowywać obraz tła w ref_img, abyśmy mogli odróżnić go od obrazu pierwszego planu, który przechwytuje dowolny poruszający się obiekt. Używamy funkcji cv2.subtract(), aby odjąć obraz pierwszego planu od obrazu tła i vice versa, a następnie usunąć wszelkie drobne różnice w dwóch obrazach bezpośrednio po. Tło jest zaciemnione.

fgmask jest tworzony przy użyciu różnicy między tymi dwoma obrazami, a następnie stosowany do strumienia wideo funkcji za pomocą funkcji OpenCV cv2.bitwise_and().

Krok 3: Funkcja VideoEdges

Funkcja VideoEdges
Funkcja VideoEdges
Funkcja VideoEdges
Funkcja VideoEdges

Ta funkcja zwraca nasz strumień wideo na żywo, ale wykrywalne krawędzie są renderowane na biało, podczas gdy wszystko inne jest zaciemnione. To, co odróżnia tę funkcję od innych, to konwersja naszego oryginalnego wideo z formatu RBG do HSV, co oznacza odcień, nasycenie i zmienność - inny sposób przetwarzania światła i koloru z wideo. Dzięki tej metodzie możemy łatwiej rozróżnić kontury w filmie, stosując filtr (od red_low do red_high).

Funkcja Canny Edge Detection służy do wykrywania krawędzi obrazu. Jako dane wejściowe przyjmuje obraz w skali szarości i używa wielostopniowego algorytmu.

Krok 4: Funkcja VideoBlur

Funkcja rozmycia wideo
Funkcja rozmycia wideo
Funkcja rozmycia wideo
Funkcja rozmycia wideo

Ta funkcja służy do dodania efektu rozmycia do naszego strumienia wideo. Funkcja simple wywołuje funkcję GaussianBlur cv2 w naszej ramce. Więcej informacji na temat funkcji gaussianBlur można znaleźć tutaj:

opencv-python-tutroals.readthedocs.io/en/l…

Krok 5: Ulepszenia

Najbardziej czułą funkcją w tym projekcie jest funkcja usuwania tła, ponieważ wymaga użycia kamery, która nie posiada funkcji regulacji oświetlenia. Może istnieć lepszy zestaw funkcji w bibliotece OpenCV, które mogą uwzględniać tę regulację oświetlenia i płynnie usuwać tło (podobnie jak zielony ekran).

Moglibyśmy również wykorzystać inne funkcje wykrywania twarzy, które mogą tworzyć obiekty o większej funkcjonalności, poza zwracaniem współrzędnych (x, y). Być może program rozpoznawania twarzy z możliwością zapamiętywania twarzy nie byłby zbyt trudny do wdrożenia.

Funkcję rozmycia można bardziej dostosować dzięki intuicyjnemu sterowaniu przez użytkownika. Na przykład użytkownik może chcieć dostosować intensywność efektu rozmycia lub wybrać określony obszar w ramce do rozmycia.

Zalecana: