/////////////////////////////////////////////////////////////////////////////// // Copyright (C) 2017, Carnegie Mellon University and University of Cambridge, // all rights reserved. // // ACADEMIC OR NON-PROFIT ORGANIZATION NONCOMMERCIAL RESEARCH USE ONLY // // BY USING OR DOWNLOADING THE SOFTWARE, YOU ARE AGREEING TO THE TERMS OF THIS LICENSE AGREEMENT. // IF YOU DO NOT AGREE WITH THESE TERMS, YOU MAY NOT USE OR DOWNLOAD THE SOFTWARE. // // License can be found in OpenFace-license.txt // // * Any publications arising from the use of this software, including but // not limited to academic journal and conference publications, technical // reports and manuals, must cite at least one of the following works: // // OpenFace: an open source facial behavior analysis toolkit // Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency // in IEEE Winter Conference on Applications of Computer Vision, 2016 // // Rendering of Eyes for Eye-Shape Registration and Gaze Estimation // Erroll Wood, Tadas Baltrušaitis, Xucong Zhang, Yusuke Sugano, Peter Robinson, and Andreas Bulling // in IEEE International. Conference on Computer Vision (ICCV), 2015 // // Cross-dataset learning and person-speci?c normalisation for automatic Action Unit detection // Tadas Baltrušaitis, Marwa Mahmoud, and Peter Robinson // in Facial Expression Recognition and Analysis Challenge, // IEEE International Conference on Automatic Face and Gesture Recognition, 2015 // // Constrained Local Neural Fields for robust facial landmark detection in the wild. // Tadas Baltrušaitis, Peter Robinson, and Louis-Philippe Morency. // in IEEE Int. Conference on Computer Vision Workshops, 300 Faces in-the-Wild Challenge, 2013. // /////////////////////////////////////////////////////////////////////////////// #ifndef __SVR_PATCH_EXPERT_h_ #define __SVR_PATCH_EXPERT_h_ // system includes #include // OpenCV includes #include namespace LandmarkDetector { //=========================================================================== /** The classes describing the SVR patch experts */ class SVR_patch_expert{ public: // Type of data the patch expert operated on (0=raw, 1=grad) int type; // Logistic regression slope double scaling; // Logistic regression bias double bias; // Support vector regression weights cv::Mat_ weights; // Discrete Fourier Transform of SVR weights, precalculated for speed (at different window sizes) std::map > weights_dfts; // Confidence of the current patch expert (used for NU_RLMS optimisation) double confidence; SVR_patch_expert(){;} // A copy constructor SVR_patch_expert(const SVR_patch_expert& other); // Reading in the patch expert void Read(std::ifstream &stream); // The actual response computation from intensity or depth (for CLM-Z) void Response(const cv::Mat_ &area_of_interest, cv::Mat_ &response); void ResponseDepth(const cv::Mat_ &area_of_interest, cv::Mat_ &response); }; //=========================================================================== /** A Multi-patch Expert that can include different patch types. Raw pixel values or image gradients */ class Multi_SVR_patch_expert{ public: // Width and height of the patch expert support area int width; int height; // Vector of all of the patch experts (different modalities) for this particular Multi patch expert std::vector svr_patch_experts; // Default constructor Multi_SVR_patch_expert(){;} // Copy constructor Multi_SVR_patch_expert(const Multi_SVR_patch_expert& other); void Read(std::ifstream &stream); // actual response computation from intensity of depth (for CLM-Z) void Response(const cv::Mat_ &area_of_interest, cv::Mat_ &response); void ResponseDepth(const cv::Mat_ &area_of_interest, cv::Mat_ &response); }; } #endif