65 lines
2 KiB
C++
65 lines
2 KiB
C++
#ifndef GAZE_ESTIMATOR_HPP
|
|
#define GAZE_ESTIMATOR_HPP
|
|
|
|
#include <opencv2/opencv.hpp>
|
|
|
|
#include "data.hpp"
|
|
#include "face_detector.hpp"
|
|
#include "normalizer.hpp"
|
|
#include "gaze_predictor.hpp"
|
|
|
|
namespace opengaze{
|
|
|
|
class GazeEstimator {
|
|
public:
|
|
GazeEstimator();
|
|
~GazeEstimator();
|
|
|
|
/**
|
|
* On the current implementation, we only has the "MPIIGaze" method which uses the input face/eye image
|
|
* and output gaze direction directly. It is an appearance-based method. The "OpenFace" can also output
|
|
* the gaze vector according to the pupil detection results. However, "OpenFace" implementation is not
|
|
* included inside our OpenGaze toolkit yet.
|
|
*/
|
|
enum Method{MPIIGaze, OpenFace};
|
|
/**
|
|
* for the "MPIIGaze" method, the input image can be face or eye. The full-face patch model can output
|
|
* more accurate gaze prediction than the eye image model, while the eye image base model is much faster.
|
|
*/
|
|
enum InputType{face, eye};
|
|
|
|
/**
|
|
* the main function to estimate the gaze.
|
|
* It performs the face and facial landmarks detection, head pose estimation and then gaze prediction.
|
|
* @param input_image input scene image
|
|
* @param output data structure for output
|
|
*/
|
|
void estimateGaze(cv::Mat input_image, std::vector<opengaze::Sample> &output);
|
|
void getImagePatch(cv::Mat input_image, std::vector<opengaze::Sample> &outputs);
|
|
void setCameraParameters(cv::Mat camera_matrix, cv::Mat camera_dist);
|
|
void setRootPath(std::string root_path);
|
|
void setMethod(Method, std::vector<std::string> arguments);
|
|
void initialFaceDetector(int number_users);
|
|
|
|
Method method_type_;
|
|
InputType input_type_; // the input type
|
|
|
|
private:
|
|
// class instances
|
|
FaceDetector face_detector_;
|
|
Normalizer normalizer_;
|
|
GazePredictor gaze_predictor_;
|
|
// camera intrinsic matrix
|
|
cv::Mat camera_matrix_;
|
|
// camera distortion matrix
|
|
cv::Mat camera_dist_;
|
|
// the root pat is used for load configuration file and models
|
|
std::string root_path_;
|
|
};
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
#endif //GAZE_ESTIMATOR_HPP
|