10 #include "pcl/recognition/face_detection/face_detector_data_provider.h"
11 #include "pcl/recognition/face_detection/rf_face_utils.h"
12 #include "pcl/ml/dt/decision_forest.h"
23 std::string forest_filename_;
27 float trans_max_variance_;
28 std::size_t min_votes_size_;
31 std::string directory_;
32 float HEAD_ST_DIAMETER_;
33 float larger_radius_ratio_;
34 std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > head_center_votes_;
35 std::vector<std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > > head_center_votes_clustered_;
36 std::vector<std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > > head_center_original_votes_clustered_;
37 std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > angle_votes_;
38 std::vector<float> uncertainties_;
39 std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > head_clusters_centers_;
40 std::vector<Eigen::Vector3f, Eigen::aligned_allocator<Eigen::Vector3f> > head_clusters_rotation_;
48 std::string model_path_;
49 bool pose_refinement_;
63 forest_filename_ = std::string (
"forest.txt");
67 trans_max_variance_ = 1600.f;
68 used_for_pose_ = std::numeric_limits<int>::max ();
70 directory_ = std::string (
"");
71 HEAD_ST_DIAMETER_ = 0.2364f;
72 larger_radius_ratio_ = 1.5f;
73 face_heat_map_.reset ();
74 model_path_ = std::string (
"face_mesh.ply");
75 pose_refinement_ =
false;
89 forest_filename_ = ff;
129 void setModelPath(std::string & model);
133 pose_refinement_ = do_it;
134 icp_iterations_ = iters;
144 trans_max_variance_ = max;
154 min_votes_size_ = mv;
173 heat_map = face_heat_map_;
179 votes_cloud->
points.resize (head_center_votes_.size ());
180 votes_cloud->
width = head_center_votes_.size ();
183 for (std::size_t i = 0; i < head_center_votes_.size (); i++)
185 (*votes_cloud)[i].getVector3fMap () = head_center_votes_[i];
191 votes_cloud->
points.resize (head_center_votes_.size ());
192 votes_cloud->
width = head_center_votes_.size ();
196 for (std::size_t i = 0; i < head_center_votes_clustered_.size (); i++)
198 for (std::size_t j = 0; j < head_center_votes_clustered_[i].size (); j++, p++)
200 (*votes_cloud)[p].getVector3fMap () = head_center_votes_clustered_[i][j];
201 (*votes_cloud)[p].intensity = 0.1f *
static_cast<float> (i);
205 votes_cloud->
points.resize (p);
210 votes_cloud->
points.resize (head_center_votes_.size ());
211 votes_cloud->
width = head_center_votes_.size ();
215 for (std::size_t i = 0; i < head_center_original_votes_clustered_.size (); i++)
217 for (std::size_t j = 0; j < head_center_original_votes_clustered_[i].size (); j++, p++)
219 (*votes_cloud)[p].getVector3fMap () = head_center_original_votes_clustered_[i][j];
220 (*votes_cloud)[p].intensity = 0.1f *
static_cast<float> (i);
224 votes_cloud->
points.resize (p);
230 for (std::size_t i = 0; i < head_clusters_centers_.size (); i++)
232 Eigen::VectorXf head (6);
233 head[0] = head_clusters_centers_[i][0];
234 head[1] = head_clusters_centers_[i][1];
235 head[2] = head_clusters_centers_[i][2];
236 head[3] = head_clusters_rotation_[i][0];
237 head[4] = head_clusters_rotation_[i][1];
238 head[5] = head_clusters_rotation_[i][2];
239 faces.push_back (head);
252 face_heat_map_ = heat_map;
255 void trainWithDataProvider();
256 void faceVotesClustering();