
Wszyscy myślą, że rozpoznawanie twarzy to skomplikowany koncept nieosiągalny dla „zwykłego człowieka”. Nic bardziej mylnego, Python oraz jego community przygotowali materiały które pozwalają osiągnąć ten efekt bez większego wysiłku.
W następnych artykułach po kolei opisane będą takie przykłady jak:
- rozpoznawanie twarzy
- rozpoznawanie punktów charakterystycznych tzw. face encodings
- identyfikacja twarzy konkretnej osoby
- manipulacja obrazem na podstawie znalezionych twarzy.
Dzięki tym przykładom zobaczymy, że jak najbardziej osiągalne jest zbudowanie własnoręcznie na przykład programu który na ściągniętych zdjęciach z internetu rozpozna wszystkie zdjęcia na których jest Brad Pitt. Na własny użytek możesz rozpoznawać Twoją twarz i odblokowywać swoje pliki, bądź stworzyć skrypt który przywita się z Tobą jeśli pojawisz się na ekranie. Idąc krok dalej jeśli wykorzystasz urządzenie zewnętrzne jak kamerka która przymocujesz nad drzwiami możesz sprawdzić i zbudować proste urządzenie które będzie wpuszczać tylko zapisane osoby do pokoju itd. itd. Napiszcie oczywiście w komentarzach co wam udało się zbudować i jak wy wykorzystaliście bibliotekę face_recognition. Zacznijmy od samego początku
Wstęp i instalacja
instalacją powinna być prosta i wymagać jedynie wywołania komendy do instalacji w pythonie
pip install face-recognition
Natomiast biblioteka ta wykorzystuję sporo pośrednich bibliotek, plików instalacyjnych czy kompilatorów. Stąd jeśli ta prosta metoda nie rozwiąże problemu korzystania z biblioteki i plików które będą pokazane w tym artykule można skorzystać ze środowiska które jest załączone na GitHubie już bezpośrednio z całym projektem. Jeśli nadal masz problem z odtworzeniem napisz na kanale na slacku, ktoś z zespołu na pewno Cię wesprze i pokaże jak dokładnie przeprowadzić ten proces.
Rozpoznawanie twarzy to jest skomplikowana matematycznie i technologicznie koncepcja. Natomiast jako, że ten problem został już w dużej mierzenie rozwiązany, należy nauczyć się jedynie z niego korzystać i temu właśnie się przyjrzymy. Dzięki czemu każdy z nas będzie wstanie tworzyć swoje własne rozwiązania oparte o rozpoznawanie twarzy. Zacznijmy od importu biblioteki face_recognition oraz pillow, która oznaczy nam kwadratem znalezione twarze (jeśli korzystasz z udostępnionego już skonfigurowanego środowiska, nie ma potrzeby instalacji, w innym wypadku wykorzystaj „pip install Pillow”):
import PIL.Image import PIL.ImageDraw import face_recognition
Wyszukanie twarzy

Weźmy dla przykładu taki oto obraz z 6 różnymi osobami. Wyszukiwanie twarzy polega na znalezieniu obiektów na zdjęciu które są twarzą, dzięki czemu jesteśmy w stanie określić na przykład ilość osób na zdjęciu oraz wykonać kolejne czynności czyli na przykład identyfikację osoby, bądź rozpoznanie już konkretnego elementu twarzy takiego jak oczy czy nos. Biblioteka face_recognition wystawia nam jedną prostą funkcję która zwraca nam wszystkie znalezione twarze na zdjęciu:
# wczytanie obrazu image = face_recognition.load_image_file("people.jpg") # znalezienie wszystkich lokalizacji twarzy na zdjęciu i zapisanie do listy face_locations = face_recognition.face_locations(image) # wypisanie ilości twarzy number_of_faces = len(face_locations) print("I found {} face(s) in this photograph.".format(number_of_faces))

Wypisaliśmy ilość osób znalezionych na zdjęciu, w kolejnym kroku chcielibyśmy oznaczyć znalezione twarze na tym samym zdjęciu oraz wyświetlić efekt końcowy. Możemy skorzystać z zapisu lokalizacji twarzy w liście face_locations oraz za pomocą biblioteki PILLOW narysować czerwone kwadraty w tych miejscach:
# załaduj do zmiennej zdjęcie na którym będziemy rysować pil_image = PIL.Image.fromarray(image) for face_location in face_locations: # Wypisz lokalizacje twarzy na obrazie, każda zmienna przechowuje wartości (top, right, bottom, left). top, right, bottom, left = face_location print("Twarz znajduję się w lokalizacji pikseli Top: {}, Left: {}, Bottom: {}, Right: {}".format(top, left, bottom, right)) # rysowanie kwadratu dookoła twarzy draw = PIL.ImageDraw.Draw(pil_image) draw.rectangle([left, top, right, bottom], outline="red") # Pokazanie efektu końcowego pil_image.show()

Podsumowanie
Jedynie w 27 linijek kodu udało nam się wczytać zdjęcie z wieloma twarzami, rozpoznać ich lokalizację, narysować na nich kwadrat pokazujący dokładne ułożenie twarzy praktycznie bez wysiłku. Czy teraz widzicie jak może być to proste do zrealizowania w praktyce mimo, że samo zagadnienie jest bardzo skomplikowane? W kolejnych materiałach zajmiemy się identyfikacją charakterystycznych punktów na twarzy takich jak (oczy, nos, usta itd.) oraz identyfikacją konkretnych osób. Pamiętacie funkcję FB, która oznaczała twarze znajomych na zdjęciu i pytała kto to jest ?