#ifndef GAZEESTIMATIONMETHOD_H #define GAZEESTIMATIONMETHOD_H #include #include #include #include #include "data/CollectionTuple.h" #include "gaze-estimation/GazeEstimate.h" class GazeEstimationMethod { public: GazeEstimationMethod() : minPupilConfidence(0.66f) { } virtual ~GazeEstimationMethod() = default; enum InputType { BINOCULAR = 1, MONO_LEFT = 2, MONO_RIGHT = 3, }; virtual std::string description() const = 0; virtual bool calibrate(std::vector& calibrationTuples, QString& error) = 0; void estimate(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right, GazeEstimate& binocular); cv::Point2f estimate2d(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right, GazeEstimate& binocular); float minPupilConfidence; // convenience public functions cv::Point2f estimate2d(const DataTuple& tuple) { GazeEstimate left, right, binocular; return estimate2d(tuple, left, right, binocular); } private: // TODO: this should be public but not yet implemented; move when done cv::Point3f estimate3d(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right, GazeEstimate& binocular); virtual bool has3d() = 0; virtual void implEstimate2d(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right) = 0; virtual void implEstimate3d(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right) = 0; virtual void estimateBinocular2d(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right, GazeEstimate& binocular); virtual void estimateBinocular3d(const DataTuple& tuple, GazeEstimate& left, GazeEstimate& right, GazeEstimate& binocular); }; Q_DECLARE_METATYPE(enum GazeEstimationMethod::InputType) #endif // GAZEESTIMATIONMETHOD_H