Rozpoznawanie twarzy w Pythonie i OpenCV

Share

.

Facebook
Twitter
WhatsApp

W tym artykule, dowiemy się czym jest rozpoznawanie twarzy i czym różni się od detekcji twarzy. Przejdziemy krótko przez teorię rozpoznawania twarzy, a następnie przeskoczymy do sekcji kodowania. Pod koniec tego artykułu, będziesz w stanie stworzyć program do rozpoznawania twarzy na obrazach, jak również na żywo z kamery internetowej.

  1. Co to jest wykrywanie twarzy?
  2. Co to jest rozpoznawanie twarzy?
  3. Rozpoznawanie twarzy przy użyciu Pythona
    1. Rozpoznawanie twarzy w obrazie z kamery internetowej
    2. Rozpoznawanie twarzy w obrazach

Co to jest wykrywanie twarzy?

W widzeniu komputerowym, jednym z podstawowych problemów, które staramy się rozwiązać, jest automatyczne wykrywanie obiektów na obrazie bez interwencji człowieka. Wykrywanie twarzy może być uważane za taki problem, w którym wykrywamy ludzkie twarze na obrazie. Mogą istnieć niewielkie różnice w twarzach ludzi, ale ogólnie rzecz biorąc, można bezpiecznie powiedzieć, że istnieją pewne cechy, które są związane z wszystkimi ludzkimi twarzami. Istnieją różne algorytmy wykrywania twarzy, ale Viola-Jones Algorithm jest jedną z najstarszych metod, która jest również używana dzisiaj i będziemy używać tego samego w dalszej części artykułu. Możesz przejść przez Algorytm Viola-Jonesa po ukończeniu tego artykułu, ponieważ połączę go na końcu tego artykułu.

Detekcja twarzy jest zazwyczaj pierwszym krokiem w kierunku wielu technologii związanych z twarzami, takich jak rozpoznawanie twarzy lub weryfikacja. Jednakże, wykrywanie twarzy może mieć bardzo użyteczne zastosowania. Najbardziej udanym zastosowaniem detekcji twarzy byłoby prawdopodobnie robienie zdjęć. Gdy robisz zdjęcie swoim przyjaciołom, algorytm wykrywania twarzy wbudowany w Twój aparat cyfrowy wykrywa, gdzie znajdują się twarze i odpowiednio dostosowuje ostrość.

Aby zapoznać się z samouczkiem na temat samego wykrywania twarzy, kliknij tutaj

Co to jest rozpoznawanie twarzy?

Teraz, gdy udało nam się stworzyć algorytmy wykrywające twarze, czy możemy również rozpoznać, czyje to twarze?

Rozpoznawanie twarzy jest metodą identyfikacji lub weryfikacji tożsamości osoby przy użyciu jej twarzy. Istnieją różne algorytmy, które potrafią rozpoznawać twarze, ale ich dokładność może się różnić. Tutaj zamierzam opisać, jak robimy rozpoznawanie twarzy za pomocą głębokiego uczenia.

Zrozummy więc teraz, jak rozpoznajemy twarze za pomocą głębokiego uczenia. Używamy osadzania twarzy, w którym każda twarz jest przekształcana w wektor i ta technika jest nazywana głębokim uczeniem metrycznym. Pozwól mi dalej podzielić ten proces na trzy proste kroki dla łatwiejszego zrozumienia:

Detekcja twarzy: Pierwszym zadaniem, które wykonujemy jest wykrywanie twarzy w obrazie lub strumieniu wideo. Teraz, gdy znamy już dokładną lokalizację/współrzędne twarzy, wyodrębniamy ją do dalszego przetwarzania.

Ekstrakcja cech: Teraz, gdy wykadrowaliśmy twarz z obrazu, wyodrębniamy z niej cechy. Tutaj będziemy używać embeddingu twarzy, aby wyodrębnić cechy z twarzy. Sieć neuronowa bierze obraz twarzy osoby jako dane wejściowe i wyprowadza wektor, który reprezentuje najważniejsze cechy twarzy. W uczeniu maszynowym, wektor ten nazywany jest embedowaniem i dlatego nazywamy ten wektor jako embedowanie twarzy. Teraz jak to pomaga w rozpoznawaniu twarzy różnych osób?

Podczas szkolenia sieci neuronowej, sieć uczy się wyprowadzać podobne wektory dla twarzy, które wyglądają podobnie. Na przykład, jeśli mam wiele obrazów twarzy w różnych przedziałach czasowych, oczywiście, niektóre z cech mojej twarzy może się zmienić, ale nie w dużym stopniu. Tak więc w tym przypadku wektory związane z twarzami są podobne lub krótko mówiąc, są bardzo blisko siebie w przestrzeni wektorowej. Spójrz na poniższy diagram, aby uzyskać przybliżony obraz:

Teraz, po wytrenowaniu sieci, sieć uczy się wyprowadzać wektory, które są bliższe sobie (podobne) dla twarzy tej samej osoby (wyglądających podobnie). Powyższe wektory przekształcają się teraz w:

Nie będziemy tutaj trenować takiej sieci, ponieważ trenowanie takich sieci wymaga znacznej ilości danych i mocy obliczeniowej. Użyjemy wstępnie wytrenowanej sieci wytrenowanej przez Davisa Kinga na zbiorze danych zawierającym ~3 miliony obrazów. Sieć wyprowadza wektor 128 liczb, które reprezentują najważniejsze cechy twarzy.

Teraz, gdy wiemy już jak działa ta sieć, zobaczmy jak jej użyć na naszych własnych danych. Przekazujemy wszystkie obrazy z naszych danych do tej wstępnie wytrenowanej sieci, aby uzyskać odpowiednie embeddingi i zapisać te embeddingi w pliku dla następnego kroku.

Porównanie twarzy: Teraz, gdy mamy embeddingi twarzy dla każdej twarzy w naszych danych zapisanych w pliku, następnym krokiem jest rozpoznanie nowego obrazu t, który nie znajduje się w naszych danych. Tak więc pierwszym krokiem jest obliczenie embeddingu twarzy dla obrazu przy użyciu tej samej sieci, której użyliśmy powyżej, a następnie porównanie tego embeddingu z resztą embeddingów, które posiadamy. Rozpoznajemy twarz, jeśli wygenerowany embedding jest bliższy lub podobny do jakiegokolwiek innego embeddingu, jak pokazano poniżej:

Przekazaliśmy więc dwa obrazy, jeden z nich przedstawia Władimira Putina, a drugi George’a W. Busha. W naszym przykładzie powyżej, nie zapisaliśmy embeddingów dla Putina, ale zapisaliśmy embeddingi Busha. Tak więc, gdy porównaliśmy dwa nowe embeddingi z istniejącymi, wektor dla Busha jest bliższy innym embeddingom twarzy Busha, podczas gdy embeddingi twarzy Putina nie są bliższe żadnemu innemu embeddingowi i dlatego program nie może go rozpoznać.

Rozpoznawanie twarzy przy użyciu Pythona

W tej sekcji zaimplementujemy rozpoznawanie twarzy przy użyciu OpenCV i Pythona. Po pierwsze, zobaczmy biblioteki, których będziemy potrzebować i jak je zainstalować:

  • OpenCV
  • dlib
  • Face_recognition

OpenCV jest biblioteką przetwarzania obrazów i wideo i jest używana do analizy obrazów i wideo, jak wykrywanie twarzy, odczytywanie tablic rejestracyjnych, edycja zdjęć, zaawansowane widzenie robotyczne, optyczne rozpoznawanie znaków i wiele innych.

Biblioteka dlib, utrzymywana przez Davisa Kinga, zawiera naszą implementację „głębokiego uczenia metrycznego”, która jest używana do konstruowania naszych embeddingów twarzy używanych do rzeczywistego procesu rozpoznawania.

Biblioteka face_recognition, stworzona przez Adama Geitgeya, otacza funkcjonalność rozpoznawania twarzy dlib, a ta biblioteka jest super łatwa do pracy i będziemy jej używać w naszym kodzie. Pamiętaj, aby najpierw zainstalować bibliotekę dlib, zanim zainstalujesz face_recognition.

Aby zainstalować OpenCV, wpisz w wierszu poleceń

pip install opencv-python

Próbowałem różnych sposobów na zainstalowanie dlib w Windows, ale najłatwiejszy z nich wszystkich jest przez Anacondę. Po pierwsze, zainstaluj Anacondę (tutaj jest przewodnik jak ją zainstalować), a następnie użyj tej komendy w wierszu poleceń:

conda install -c conda-forge dlib

Następnie, aby zainstalować face_recognition, wpisz w wierszu poleceń

pip install face_recognition

Teraz, gdy mamy już zainstalowane wszystkie zależności, zacznijmy kodować. Będziemy musieli stworzyć trzy pliki, jeden weźmie nasz zestaw danych i wyodrębni embedding twarzy dla każdej twarzy używając dlib. Następnie zapiszemy te embeddingi w pliku.

W kolejnym pliku porównamy twarze z istniejącym systemem rozpoznawania twarzy na obrazach, a następnie zrobimy to samo, ale będziemy rozpoznawać twarze na żywo z kamery internetowej

Extracting features from Face

Po pierwsze, musisz zdobyć zbiór danych lub nawet stworzyć własny. Upewnij się, że wszystkie obrazy są ułożone w folderach, a każdy folder zawiera obrazy tylko jednej osoby.

Następnie zapisz zbiór danych w folderze takim samym, w jakim zamierzasz utworzyć plik. Teraz oto kod:

Teraz, gdy zapisaliśmy osadzenie w pliku o nazwie „face_enc”, możemy użyć ich do rozpoznawania twarzy na obrazach lub strumieniu wideo na żywo.

Rozpoznawanie twarzy w strumieniu z kamery internetowej na żywo

Tutaj znajduje się skrypt do rozpoznawania twarzy w strumieniu z kamery internetowej na żywo:

Aczkolwiek w powyższym przykładzie użyliśmy kaskady haar do wykrywania twarzy, można również użyć face_recognition.face_locations do wykrywania twarzy, tak jak zrobiliśmy to w poprzednim skrypcie

Rozpoznawanie twarzy w obrazach

Skrypt do wykrywania i rozpoznawania twarzy w obrazach jest prawie podobny do tego, co widziałeś powyżej. Spróbuj sam, a jeśli nie możesz, spójrz na poniższy kod:

Output:

  • Input
  • Output

Tym samym dochodzimy do końca tego artykułu, w którym dowiedzieliśmy się o rozpoznawaniu twarzy. Możesz dostać darmowy kurs na Great learning academy na różnych kursach. Kliknij na poniższy baner, aby dowiedzieć się więcej

Możesz również podnieść swoje kwalifikacje dzięki kursowi PGP Artificial Intelligence and Machine Learning w Great Learning. Kurs oferuje mentoring od liderów branży, a także będziesz miał możliwość pracy nad projektami istotnymi dla branży w czasie rzeczywistym.

Dalsza lektura

  1. Detekcja twarzy przy użyciu algorytmu Viola-Jonesa
  2. Detekcja twarzy w czasie rzeczywistym | Detekcja maski twarzy przy użyciu OpenCV
  3. Detekcja obiektów w czasie rzeczywistym przy użyciu TensorFlow
  4. Detekcja obiektów YOLO przy użyciu OpenCV
  5. Detekcja obiektów w Pytorch | Co to jest detekcja obiektów?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany.