>_ DevTrendspl

Język

Strona główna

Języki

Sekcje

Frontend Backend Mobilne DevOps AI / ML GameDev Blockchain Systemy wbudowane Bezpieczeństwo
Python

Jak zbudować kompletny potok analizy twarzy w jednym pakiecie Pythona dzięki bibliotece UniFace

Jeśli kiedykolwiek musiałeś zbudować projekt rozpoznawania twarzy, prawdopodobnie pamiętasz ten koszmar zależności.

Do detekcji pobierasz jedno repozytorium PyTorch; do siatki 3D twarzy wciągasz kłopotliwy MediaPipe; do segmentacji przeszukujesz archiwum z pięcioletnim modelem; a żeby oszacować kierunek spojrzenia, piszesz własne obejścia na bazie surowych wag z Google Drive. Efektem jest środowisko wirtualne puchnące do dziesiątek gigabajtów, konflikty wersji bibliotek i budowanie obrazów Docker staje się grą losową.

Niedawno natknąłem się na świeżą bibliotekę o nazwie UniFace, której autor postanowił wprowadzić porządek w tym zoo. Projekt konsoliduje praktycznie wszystkie podstawowe zadania z zakresu widzenia komputerowego związane z ludzką twarzą pod jednym, minimalistycznym interfejsem.

Co kryje się w środku

UniFace działa jak zestaw konstrukcyjny. Cała logika wnioskowania działa na ONNX Runtime, więc nie będziesz musiał zmagać się z kompilacją niestandardowych rozszerzeń C++ ani składaniem kapryśnych zależności.

Instalacja dostępna jest w dwóch wariantach:

pip install "uniface[cpu]"   # Для обычных процессоров и Apple Silicon
pip install "uniface[gpu]"   # Для машин с NVIDIA CUDA

Przy pierwszym uruchomieniu biblioteka automatycznie pobiera wymagane wstępnie wytrenowane wagi i weryfikuje ich sumy kontrolne przez SHA-256. Żadnych uszkodzonych plików ani ręcznego umieszczania punktów kontrolnych w folderach.

Punktem wejścia do biblioteki jest klasa FaceAnalyzer. Domyślnie wykonuje podstawowe operacje, takie jak detekcja, wyrównywanie i generowanie osadzeń. Jeśli potrzebujesz dodatkowych atrybutów, po prostu przekazujesz wymagane moduły do listy predyktorów.

import cv2
from uniface import FaceAnalyzer, FairFace

# Подключаем предиктор демографии
analyzer = FaceAnalyzer(predictors=[FairFace()])

# Анализируем изображение
image = cv2.imread("photo.jpg")
for face in analyzer.analyze(image):
    print(face.bbox, face.sex, face.age_group, face.embedding.shape)

Dopóki jawnie nie połączysz modułu, odpowiednie pola (emotion, quality, age_group) pozostają None. Oszczędza to zasoby obliczeniowe i zapobiega zapychaniu pamięci niepotrzebnymi modelami.

Rozłożenie kluczowych funkcji na części pierwsze

UniFace obejmuje piętnaście zastosowań. Zobaczmy, jak wyglądają w praktyce.

1. Detekcja, punkty charakterystyczne i ocena jakości

Biblioteka zawiera sześć architektur detekcji: RetinaFace, SCRFD, CenterFace, BlazeFace, a także adaptacje YOLOv5-Face i YOLOv8-Face. Możesz łatwo przełączać się między lekkimi modelami dla układów mobilnych a ciężkimi sieciami dla złożonych kątów.

Do rozmieszczania punktów charakterystycznych dostępne są zarówno klasyczne adnotacje 68 i 106 punktów (przez PIPNet i 2d106det), jak i gęste siatki 3D Face Mesh z 468 i 478 punktami.

W rzeczywistych potokach rozpoznawania często trzeba odfiltrować rozmazane lub zbyt ciemne klatki. W odpowiedzi na to UniFace dodał metrykę jakości eDifFIQA w czterech rozmiarach (T, S, M, L).

2. Segmentacja portretów i matting

Gdy musisz oddzielić osobę od tła lub wyizolować określone regiony twarzy (usta, oczy, włosy, skóra), przydają się modele parsowania:

  • BiSeNet segmentuje twarz na 19 klas.
  • XSeg tworzy maski nawet przy częściowym zasłonięciu twarzy przez obce obiekty.
  • MODNet wykonuje bezszwowy matting portretowy bez użycia trimap.

Wynik mattingu pozostaje czysty nawet na złożonych konturach, takich jak luźne włosy:

3. Pozycja głowy i kierunek spojrzenia

Oszacowanie kąta obrotu głowy (Head Pose) wykorzystuje sześciowymiarową reprezentację rotacji i zwraca kąty pitch, yaw i roll.

Do śledzenia uwagi użytkownika wbudowany jest MobileGaze oparty na ResNet i MobileNetV2. Przewiduje wektor spojrzenia w przestrzeni, co jest wygodne dla interfejsów monitorowania uwagi kierowcy lub analizy interakcji z ekranem.

4. Atrybuty, emocje i wykrywanie żywotności

Moduły atrybutów określają płeć, grupę wiekową i rasę przez FairFace, rozpoznają emocje w skalach AffectNet-7 i AffectNet-8 oraz wykrywają obecność okularów, okularów przeciwsłonecznych lub masek medycznych.

W przypadku systemów biometrycznych ochrona przed spoofingiem jest krytyczna. UniFace zawiera MiniFASNet, który określa żywotność i blokuje próby przedstawienia wydrukowanego zdjęcia lub powtórki wideo ze smartfona.

5. Porównywanie, wyszukiwanie i anonimizacja

Do dopasowywania twarzy biblioteka oferuje nowoczesne ekstraktory cech: ArcFace, AdaFace, EdgeFace, MobileFace i SphereFace. Do wyszukiwania twarzy w dużej bazie danych pod maską zintegrowano indeks wektorowy oparty na FAISS.

Jeśli zadanie jest odwrócone — ukrywanie danych osobowych w filmach lub zdjęciach do publikacji publicznej — dostępny jest moduł anonimizacji z pięcioma algorytmami rozmycia.

Na co zwrócić uwagę przed wdrożeniem produkcyjnym

Chociaż sam kod źródłowy repozytorium UniFace jest rozpowszechniany na czystej licencji MIT, wstępnie wytrenowane wagi niektórych modeli (takich jak FairFace czy AffectNet) mają ograniczenia dotyczące użytku komercyjnego od ich oryginalnych autorów. Jeśli planujesz komercyjne wydanie, koniecznie sprawdź sekcję dokumentacji licencyjnej projektu i zweryfikuj wybrane punkty kontrolne.

Kto znajdzie ten projekt przydatny

UniFace to świetne rozwiązanie dla zmęczonych sklejaniem rozproszonych bibliotek CV w jeden potok. To gotowy szwajcarski scyzoryk do szybkiego prototypowania systemów biometrycznych, analizy wideo, aplikacji interaktywnych i usług moderacji treści.

Najłatwiejszym sposobem na rozpoczęcie pracy jest oficjalna dokumentacja oraz interaktywne notebooki na Kaggle, gdzie możesz przetestować każdy model na własnych obrazach w ciągu kilku minut.

Powiązane projekty