X-Git-Url: https://adrianiainlam.tk/git/?a=blobdiff_plain;ds=sidebyside;f=include%2Ffacial_landmark_detector.h;h=85f35127d9ceeb7e25f2caea4d729941de6d6c8e;hb=af96b559e637dd8f5eaa4ee702ea8d2aec63d371;hp=7c6f63956c619101ec475519215c499a82012d75;hpb=830d0ba4cbaad94c10181246fefe8e34bf858894;p=facial-landmarks-for-cubism.git diff --git a/include/facial_landmark_detector.h b/include/facial_landmark_detector.h index 7c6f639..85f3512 100644 --- a/include/facial_landmark_detector.h +++ b/include/facial_landmark_detector.h @@ -27,10 +27,18 @@ SOFTWARE. #include #include -#include -#include -#include -#include + +struct Point +{ + double x; + double y; + + Point(double _x = 0, double _y = 0) + { + x = _x; + y = _y; + } +}; class FacialLandmarkDetector { @@ -46,6 +54,9 @@ public: double faceXAngle; double faceYAngle; double faceZAngle; + bool autoBlink; + bool autoBreath; + bool randomMotion; // TODO eyebrows currently not supported... // I'd like to include them, but the dlib detection is very // noisy and inaccurate (at least for my face). @@ -66,29 +77,25 @@ private: RIGHT }; - cv::VideoCapture webcam; - dlib::image_window win; - dlib::frontal_face_detector detector; - dlib::shape_predictor predictor; bool m_stop; - double calcEyeAspectRatio(dlib::point& p1, dlib::point& p2, - dlib::point& p3, dlib::point& p4, - dlib::point& p5, dlib::point& p6) const; + double calcEyeAspectRatio(Point& p1, Point& p2, + Point& p3, Point& p4, + Point& p5, Point& p6) const; - double calcRightEyeAspectRatio(dlib::full_object_detection& shape) const; - double calcLeftEyeAspectRatio(dlib::full_object_detection& shape) const; + double calcRightEyeAspectRatio(Point landmarks[]) const; + double calcLeftEyeAspectRatio(Point landmarks[]) const; double calcEyeOpenness(LeftRight eye, - dlib::full_object_detection& shape, + Point landmarks[], double faceYAngle) const; - double calcMouthForm(dlib::full_object_detection& shape) const; - double calcMouthOpenness(dlib::full_object_detection& shape, double mouthForm) const; + double calcMouthForm(Point landmarks[]) const; + double calcMouthOpenness(Point landmarks[], double mouthForm) const; - double calcFaceXAngle(dlib::full_object_detection& shape) const; - double calcFaceYAngle(dlib::full_object_detection& shape, double faceXAngle, double mouthForm) const; - double calcFaceZAngle(dlib::full_object_detection& shape) const; + double calcFaceXAngle(Point landmarks[]) const; + double calcFaceYAngle(Point landmarks[], double faceXAngle, double mouthForm) const; + double calcFaceZAngle(Point landmarks[]) const; void populateDefaultConfig(void); void parseConfig(std::string cfgPath); @@ -108,14 +115,10 @@ private: struct Config { - int cvVideoCaptureId; - std::string predictorPath; double faceYAngleCorrection; double eyeSmileEyeOpenThreshold; double eyeSmileMouthFormThreshold; double eyeSmileMouthOpenThreshold; - bool showWebcamVideo; - bool renderLandmarksOnVideo; bool lateralInversion; std::size_t faceXAngleNumTaps; std::size_t faceYAngleNumTaps; @@ -124,7 +127,6 @@ private: std::size_t mouthOpenNumTaps; std::size_t leftEyeOpenNumTaps; std::size_t rightEyeOpenNumTaps; - int cvWaitKeyMs; double eyeClosedThreshold; double eyeOpenThreshold; double mouthNormalThreshold; @@ -137,6 +139,9 @@ private: double faceYAngleZeroValue; double faceYAngleUpThreshold; double faceYAngleDownThreshold; + bool autoBlink; + bool autoBreath; + bool randomMotion; } m_cfg; };