#ifndef _PL_SENSETIMEFACETRACK_H_ #define _PL_SENSETIMEFACETRACK_H_ #include "PipeLine.h" #include "GraphicHelper.h" #include #include struct SensetimeFaceFeature { PLGH_Rect rect; int id; float score; /* Camera vision vector point to face * * * * * * * * * * * * */ float yaw; /* Camera vision vector point to face * * * * * * * * * * * * */ float pitch; /* Camera vision vector point to face * * * * * * * * * * * * */ float roll; float eyeDistance; PLGH_Path featurePoints; bool outOfFrame; SensetimeFaceFeature() : rect(), id(0), score(0.0), yaw(0.0), pitch(0.0), roll(0.0), eyeDistance(0.0), featurePoints(), outOfFrame(false) {} bool test_face_in_cone(float _yaw, float _pitch, float _roll) const { return (std::abs(yaw) < _yaw && std::abs(pitch) < _pitch && std::abs(roll) < _roll); } }; typedef std::vector st_ff_vect_t; struct SensetimeFaceTrackConfig { int point_size; // 21 / 106 int point_size_config; // CV_DETECT_ENABLE_ALIGN_21 / CV_DETECT_ENABLE_ALIGN_106 int detect_face_cnt_limit; // -1 bool draw_face_rect; bool draw_face_feature_point; bool generate_face_feature; bool generate_face_point; int explode_feature_rect_x; int explode_feature_rect_y; bool clamp_feature_rect; // clamp fr width and height int doTrackPerFrame; std::string license_file_path; std::string license_str; float visionConeAngle; bool evenWidthHeight; float score_min; SensetimeFaceTrackConfig() : point_size(21), point_size_config(-1), detect_face_cnt_limit(-1), draw_face_rect(true), draw_face_feature_point(true), generate_face_feature(false), generate_face_point(false), explode_feature_rect_x(0), explode_feature_rect_y(0), clamp_feature_rect(false), doTrackPerFrame(1), license_file_path(), license_str(), visionConeAngle(90.1), evenWidthHeight(true), score_min(0.0f) { } }; class PL_SensetimeFaceTrack : public PipeLineElem { public: PL_SensetimeFaceTrack(); virtual ~PL_SensetimeFaceTrack(); virtual bool init(void* args); virtual void finit(); virtual bool pay(const PipeMaterial& pm); virtual bool gain(PipeMaterial& pm); private: static bool pay_breaker_MBFT_YUV(const PipeMaterial* pm, void* args); private: void* internal; }; PipeLineElem* create_PL_SensetimeFaceTrack(); #endif