/ / Jak wykryć kąty twarzy? - opencv, numpy, uczenie maszynowe

Jak wykrywać kąty twarzy? - opencv, numpy, uczenie maszynowe

Mam ponad 2000 obrazów w odcieniach szarości z 96x96wymiary pikseli w numpy. Mam (x, y) koordynację kluczowych punktów twarzy, takich jak left_eye_center, right_eye_center, nose_center, mouth_left, mouth_right itd ..

Wiele twarzy w zbiorze danych jest przechylonych w lewo lub w prawo lub w górę lub w dół. Chciałbym więc poznać kąty orientacji twarzy w kierunku kamery.

Czy istnieje jakaś biblioteka do wykrycia tego? Spojrzałem na opencv, ale wydaje się, że robi tylko wykrywanie twarzy, a nie orientację.

Odpowiedzi:

1 dla odpowiedzi № 1

cmon, to po prostu matematyka:

    double eyeXdis = eye_r.x - eye_l.x;
double eyeYdis = eye_r.y - eye_l.y;
double angle   = atan(eyeYdis/eyeXdis);
double degree  = angle*180/CV_PI;

[edytować:]

wydaje się, że to, czego szukasz, to tak naprawdę "oszacowanie głowy" (lub "posit")

potrzebujesz (prymitywnego) modelu głowy 3D, zdobądźodpowiednie punkty 3d dla twoich punktów orientacyjnych raz, a następnie dla każdego obrazu znajdź 2d punkty orientacyjne na obrazku i uzyskaj wektor obrotu / translacji z solvPnP ().


0 dla odpowiedzi nr 2

Podzieliłem dane treningowe na 3 etykiety (po lewej,center, right), a następnie użyj go z wybranym przez ciebie algorytmem uczenia maszynowego do nauki 3 klas. Jeśli używasz opencv możesz np. Użyć HaarCascadeClassifiers (kiedyś miałem projekt, w którym użyłem go do klasyfikacji orientacji), ale tak naprawdę wszystko działa. Musisz tylko rozszerzyć go z klasyfikacji binarnej (wykrywanie twarzy) do klasyfikacji wieloklasowej (twarz orientacja).