Spisu treści:
- Kieszonkowe dzieci
- Krok 1: Funkcja wykrywania twarzy
- Krok 2: Funkcja usuwania tła
- Krok 3: Funkcja VideoEdges
- Krok 4: Funkcja VideoBlur
- Krok 5: Ulepszenia
Wideo: Podstawowe projekty OpenCV: 5 kroków
2024 Autor: John Day | [email protected]. Ostatnio zmodyfikowany: 2024-01-30 11:28
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
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
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
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
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:
Wskaźnik poziomu wody - Podstawowe obwody tranzystora: 5 kroków
Wskaźnik poziomu wody | Podstawowe obwody tranzystorowe: Znacznik poziomu wody to urządzenie z obwodem elektronicznym, które przesyła dane z powrotem do tablicy kontrolnej, aby pokazać, czy w drodze wodnej jest wysoki lub niski poziom wody. Niektóre znaczniki poziomu wody wykorzystują kombinację czujników testowych lub zmian do wykrywania poziomu wody. Tam
Podstawowe debugowanie Javy: 9 kroków
Podstawowe debugowanie języka Java: Ten przewodnik zawiera podstawowe informacje na temat sprawdzania krok po kroku obsługi błędów Java. Ten przewodnik nie zapewnia żadnej pomocy przy konfigurowaniu oprogramowania do programowania Java i oczekuje, że wykonałeś już to zadanie z wyprzedzeniem. Dla najlepszych
Podstawowe obliczenia IOT przy użyciu Nodemcu i Micropython: 11 kroków
IOT Base Computing przy użyciu Nodemcu i Micropython: W tym samouczku zamierzam użyć połączenia NodeMcu, micropython i Mqtt do połączenia z serwerem. Ten samouczek używa połączenia mqtt opartego na https do połączenia z Nodemcu do serwera Adafruit.io. W tym projekcie jestem za pomocą języka programowania micropython
Jak uruchomić podstawowe operacje dźwiękowe w sercu Junction: 8 kroków
Jak uruchomić podstawowe operacje dźwiękowe w Heart of Junction: Ten Instruktaż jest przeznaczony dla każdego, kto wykonuje operacje dźwiękowe / komputerowe w Heart of Junction w Grand Junction, Kolorado, kiedy ja, główny dźwiękowiec / technik, muszę odejść na jakiś czas powód lub inny. Przepraszam, jeśli to długo, ale spróbuję
Podstawowe gięcie obwodu: 5 kroków
Podstawowe zginanie obwodów: weź swoją starą elektronikę i spraw, aby krzyczała z glitchy dobroci. To niezwykle łatwy projekt i sprawia, że jest to świetny projekt dla lutujących po raz pierwszy. Uczono mnie, że zginanie obwodów polega na używaniu urządzeń elektronicznych, które wydają wiele dźwięków i