Czy zastanawiałeś się kiedyś, jak Snapchat dokładnie nakłada różne filtry na twoją twarz? Czy Twój smartfon działa magicznie, gdy odblokowuje się za pomocą rysów twarzy? Nie, po prostu oglądasz wykrywanie twarzy w akcji.
Wykrywanie twarzy to technologia sztucznej inteligencji, która może identyfikować ludzkie twarze na cyfrowym obrazie lub filmie. Dowiedz się, jak zbudować program do wykrywania twarzy w czasie rzeczywistym w mniej niż 25 wierszach kodu za pomocą legendarnego algorytmu Haar Cascade.
Co to jest kaskada Haara?
Haar Cascade to algorytm wykrywania obiektów wprowadzony przez Paula Violę i Michaela Jonesa w celu wykrywania twarzy na obrazach lub filmach. Funkcja kaskadowa jest szkolona przy użyciu wielu pozytywnych i negatywnych obrazów, które można później wykorzystać do identyfikacji dowolnego obiektu lub twarzy w innych mediach. Te przeszkolone pliki są dostępne w formacie Repozytorium OpenCV GitHub.
Korzystając z metody przesuwnego okna, okno o stałym rozmiarze iteruje po obrazie od lewej do prawej, od góry do dołu. W każdej fazie okno zatrzymuje się i klasyfikuje, czy obszar zawiera twarz, czy nie.
OpenCV, komputerowe narzędzie wizyjne, współpracuje z wcześniej wytrenowanym modelem Haar Cascade w celu sklasyfikowania funkcji. Każda faza sprawdza pięć obiektów: dwa obiekty krawędziowe, dwa obiekty liniowe i jeden obiekt z czterema prostokątami.
Podczas obserwacji okolice oczu wydają się ciemniejsze niż okolice policzków, podczas gdy okolice nosa wydają się jaśniejsze niż okolice oczu. Możesz zwizualizować te funkcje w poniższy sposób.
Korzystając z tych funkcji i obliczeń pikseli, algorytm identyfikuje ponad 100 000 punktów danych. Następnie możesz użyć algorytmu Adaboost, aby poprawić dokładność i odrzucić nieistotne funkcje. W wielu iteracjach podejście to minimalizuje poziom błędów i zwiększa wagę funkcji, aż osiągnie akceptowalną dokładność.
Jednak technika przesuwanego okna zatrzymuje się, jeśli konkretny przypadek testowy zawiedzie i jest kosztowna obliczeniowo. Aby rozwiązać ten problem, możesz zastosować koncepcję Kaskady Klasyfikatorów. Zamiast stosować wszystkie funkcje w jednym oknie, to podejście grupuje je i stosuje etapami.
Jeśli okno nie przejdzie pierwszego etapu, proces odrzuca je, w przeciwnym razie kontynuuje. Prowadzi to do drastycznego zmniejszenia liczby operacji do wykonania i sprawia, że można go używać w aplikacjach czasu rzeczywistego.
Przebieg pracy wykrywania twarzy
Postępuj zgodnie z tym algorytmem, aby zbudować program do wykrywania twarzy:
- Załaduj algorytm Haar Cascade Frontal Face.
- Zainicjuj aparat.
- Odczytaj klatki z kamery.
- Konwertuj obrazy kolorowe na skalę szarości.
- Uzyskaj współrzędne twarzy.
- Narysuj prostokąt i umieść odpowiednią wiadomość.
- Wyświetl dane wyjściowe.
Co to jest OpenCV?
OpenCV to biblioteka wizji komputerowej i uczenia maszynowego typu open source. Posiada ponad 2500 zoptymalizowanych algorytmów dla różnych aplikacji. Obejmują one wykrywanie twarzy/obiektów, rozpoznawanie, klasyfikację i wiele innych.
Prywatność danych twarzy jest osobną troską. Setki znanych firm, takich jak Google, IBM i Yahoo, używa OpenCV w swoich aplikacjach. Pokazały to niektóre osoby, które chcą zachować prywatność swoich danych istnieją sposoby na uniknięcie rozpoznawania twarzy.
Aby zainstalować OpenCV w Pythonie, użyj polecenia:
pypeć zainstalować opencv-python
Jak zbudować program do wykrywania twarzy za pomocą Pythona
Wykonaj następujące kroki, aby zbudować wykrywacz twarzy:
Ten przykładowy kod wraz z plikiem algorytmu Haar Cascade jest dostępny w formacie Repozytorium GitHub i jest darmowy do użytku na licencji MIT.
- Pobierz Haar Cascade Frontal Face Domyślny kod XML plik i umieść go w tej samej lokalizacji, co program Pythona.
- Zaimportuj bibliotekę OpenCV.
# importowanie wymaganych bibliotek
import cv2 - Przechowuj plik algorytmu Haar Cascade Frontal Face w celu łatwego odniesienia.
# ładowanie pliku algorytmu przypadku haar do zmiennej alg
alg = "haarcascade_frontalface_default.xml" - Użyj klasy CascadeClassifier, aby załadować plik XML do OpenCV.
# przekazanie algorytmu do OpenCV
haar_cascade = cv2.CascadeClassifier (alg) - Przechwyć wideo z kamery. Przekaż 0 do Przechwytywanie wideo() aby korzystać z głównego aparatu. Jeśli podłączyłeś zewnętrzną kamerę, możesz użyć kolejnych numerów 1, 2 itd., aby jej użyć.
# przechwytywanie strumienia wideo z kamery
cam = cv2.VideoCapture (0) - Skonfiguruj nieskończoną pętlę, aby odczytać wejście kamery klatka po klatce. The Czytać() funkcja zwraca dwa parametry. Pierwsza wartość jest typu boolowskiego i wskazuje, czy operacja się powiodła, czy nie. Drugi parametr zawiera rzeczywistą ramkę, z którą będziesz pracować. Zapisz tę ramkę w img zmienny.
chwilaPRAWDA:
_, img = kamera.odczyt() - Ustaw domyślny tekst, który ma być wyświetlany jako Nie wykryto twarzy. Po wykryciu zaktualizuj wartość tej zmiennej.
tekst = "Nie wykryto twarzy"
- Wejście otrzymane z realnego świata jest kolorowe, w formacie BGR. BGR oznacza niebieski, zielony i czerwony. Stwarza to dużo przetwarzania dla komputerowych aplikacji wizyjnych. Aby to zmniejszyć, użyj formatu w skali szarości.
Przekaż ramkę i format kodu konwersji, KOLOR_BGR2SZARY, Do cvtKolor(), aby zmienić każdą klatkę wideo z koloru na skalę szarości.# przekonwertuj każdą klatkę z BGR na skalę szarości
szaryImg = cv2.cvtColor (img, cv2.COLOR_BGR2GRAY) - Używać wykryjWieloskala() do wykrywania twarzy. Ta metoda przyjmuje trzy parametry jako dane wejściowe. Najpierw jest obraz źródłowy, szaryImg. Drugim parametrem jest scaleFactor. Określa, o ile należy zmniejszyć rozmiar obrazu w każdej skali obrazu. Użyj wartości domyślnej 1,3 jako współczynnika skalowania. Im wyższy współczynnik skali, tym mniej kroków i szybsze wykonanie. Jednak istnieje również większe prawdopodobieństwo braku twarzy. Trzeci parametr to minNeighbors. Określa, ilu sąsiadów powinien mieć każdy kandydujący prostokąt, aby go zachować. Im wyższa wartość, tym mniejsza szansa na fałszywy alarm, ale oznacza to również pominięcie niewyraźnych śladów twarzy.
# wykrywaj twarze za pomocą Haar Cascade
twarz = haar_cascade.detectMultiScale (grayImg, 1.3, 4) - Kiedy wykryjesz twarz, otrzymasz cztery współrzędne. x reprezentuje współrzędną x, y reprezentuje współrzędną y, w reprezentuje szerokość, a h reprezentuje wysokość. Zaktualizuj tekst do Wykryto twarz i narysuj prostokąt używając tych współrzędnych. Kolor prostokąta to format zielony (BGR) o grubości dwóch pikseli.
# narysuj prostokąt wokół twarzy i zaktualizuj tekst do Wykryto twarz
dla (x, y, w, h) na twarzy:
tekst = "Wykryto twarz"
cv2.prostokąt(img, (X, y), (X + w, y + H), (0, 255, 0), 2) - Opcjonalnie wydrukuj tekst na konsoli wyjściowej. Wyświetl tekst na ekranie, używając przechwyconej klatki jako źródła, tekstu uzyskanego w powyższym tekście, czcionki styl FONT_HERSHEY_SIMPLEX, współczynnik skali czcionki 1, kolor niebieski, grubość dwóch pikseli i typ linii AA.
# wyświetl tekst na obrazie
wydrukować(tekst)
obraz = cv2.putText (img, tekst, (50, 50), cv2.FONT_HERSHEY_SIMPLEX, 1, (255, 0, 0), 2, cv2.LINE_AA) - Wyświetl okno z tytułem Wykrywanie twarzy i obraz. Użyj klawisz oczekiwania() metoda wyświetlania okna przez 10 milisekund i sprawdzanie naciśnięcia klawisza. Jeśli użytkownik naciśnie przycisk wyjście key (wartość ASCII 27), wyjdź z pętli.
# wyświetl okno wyjściowe i naciśnij klawisz Escape, aby wyjść
cv2.imshow("Wykrywanie twarzy", obraz)
klucz = cv2.waitKey (10)jeśli klucz == 27:
przerwa - Na koniec zwolnij obiekt kamery z programu Pythona i zamknij wszystkie okna.
krzywka.uwolnienie()
cv2.destroyAllWindows()
Wykrywanie twarzy za pomocą Pythona w akcji
Kiedy twarz jest widoczna, powinieneś zobaczyć wynik taki jak ten:
Gdy nie ma żadnej twarzy, zobaczysz komunikat podobny do tego:
Ograniczenia wykrywania twarzy za pomocą algorytmu kaskady Haara
Chociaż ten algorytm jest lekki, ma mały rozmiar modelu i działa szybko, istnieje kilka ograniczeń:
- W wideo w czasie rzeczywistym twarz musi znajdować się na linii wzroku kamery. Jeśli twarz jest zbyt daleko, zbyt blisko lub zbyt pochylona, algorytm nie wykryje cech.
- Jest to algorytm twarzy czołowej, więc nie można wykryć widoków z boku.
- Wysokie wyniki fałszywie dodatnie. Często wykrywa obszary jako twarze, mimo że nie ma twarzy.
- Potrzebuje optymalnych warunków oświetleniowych. Nadmierne lub słabe oświetlenie utrudnia dokładność algorytmu.
Wiele zastosowań wykrywania twarzy
Wykrywanie twarzy ma szerokie zastosowanie w dzisiejszym świecie. Możesz go używać do rozpoznawania twarzy w smartfonach, domach, pojazdach i punktach kontroli imigracyjnej. Wykrywanie twarzy jest już powszechne w monitoringu CCTV, filtrach mediów społecznościowych i automatycznym śledzeniu twarzy w kinematografii.
To dopiero początek tej wspaniałej technologii. Dzięki postępowi możemy być w stanie zidentyfikować zaginione dzieci, łapać przestępców i zapobiegać przestępstwom, takim jak kradzież tożsamości.