Jeśli używasz klasyfikatora kaskadowego do wykrycia prawego oka, lewego oka i nosa, obliczyć środek ciężkości każdej funkcji (funkcja x/2, funkcja y/2), otrzymasz trzy punkty x-y na obrazie.
Możesz wykryć przechylenie, patrząc na wartości Y każdego oka, jeśli jeden jest wyższy od drugiego, oznacza to, że głowa jest pochylona w kierunku najniższej wartości Y (gdy jedno oko przesuwa się w górę, drugie porusza się w dół)
Możesz wykryć zbaczanie, patrząc na wartość X nosa, jeśli użytkownik patrzy w lewo, wartość X ich nosa będzie bliżej wartości X lewego oka, i to samo z patrzeniem w prawo na prawe oczy X wartość.
Możesz wykryć wysokość dźwięku, patrząc na wartość Y nosa, jeśli użytkownik patrzy w górę, wartość Y będzie zbliżona do obu wartości Y oczu, a jeśli spojrzą w dół, wartość Y będzie dalej od wartość oka.
To oczywiście nie jest bardzo dokładne i nie podaje dokładnych kątów, jednak możesz użyć tych informacji, aby spróbować zaklasyfikować każdą wartość w ramach pewnych grup, tj. (Patrząc w przyszłość, patrząc w lewo, wyglądając na naprawdę po lewej)
Jedyne, co widzę, pozwalające wyliczyć wszystkie trzy w jednym obrazie, może być, jeśli rolka jest dość drastyczna, obliczanie odchylenia może być kłopotliwe, ponieważ oś X nie jest już płaska.
Można to rozwiązać, poprawiając obraz poprzez obrót 2D. Trzeba będzie znaleźć, ile potrzebuje obraz ma być obracany z
Value = (right eye Y/2) - (left eye Y/2)
Dzięki tym informacjom można skorygować obraz i kontynuować przetwarzania (aby obrócić obraz spojrzeć w górę tworząc macierz obrotu 2D i korzystania warp afiniczne)
Przepraszam, jeśli jest trochę Necro, ale uważam, że powyższa metoda być całkiem udany i mam nadzieję, że to pomoże ktoś
to nie jest C++ pytanie więc usunąłem ten tag. –