face_recognizer.h
Go to the documentation of this file.
00001 
00061 #ifndef __FACE_RECOGNIZER_H__
00062 #define __FACE_RECOGNIZER_H__
00063 
00064 #ifdef __LINUX__
00065 #include <cob_people_detection/abstract_face_recognizer.h>
00066 #include <cob_people_detection/face_normalizer.h>
00067 #include <cob_people_detection/face_recognizer_algorithms.h>
00068 #else
00069 #include "cob_vision/cob_vision_ipa_utils/common/include/cob_vision_ipa_utils/MathUtils.h"
00070 #include "cob_vision/cob_sensor_fusion/common/include/cob_sensor_fusion/ColoredPointCloud.h"    // todo: necessary?
00071 #endif
00072 
00073 // opencv
00074 #include <opencv2/opencv.hpp>
00075 
00076 // boost
00077 #include <boost/thread/mutex.hpp>
00078 #include <boost/thread/locks.hpp>
00079 #include "boost/filesystem/path.hpp"
00080 #include "boost/lexical_cast.hpp"
00081 
00082 #include <algorithm>
00083 namespace ipa_PeopleDetector
00084 {
00085 
00086 class FaceRecognizer: public AbstractFaceRecognizer
00087 {
00088 public:
00089 
00091         FaceRecognizer(void); 
00092         ~FaceRecognizer(void); 
00093 
00099         virtual unsigned long init(std::string data_directory, int norm_size, bool norm_illumination, bool norm_align, bool norm_extreme_illumination, int metric, bool debug,
00100                         std::vector<std::string>& identification_labels_to_recognize, int subs_meth, int feature_dim, bool use_unknown_thresh, bool use_depth);
00101 
00107         virtual unsigned long initTraining(std::string data_directory, int norm_size, bool norm_illumination, bool norm_align, bool norm_extreme_illumination, bool debug,
00108                         std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps, bool use_depth);
00109 
00117         virtual unsigned long addFace(cv::Mat& color_image, cv::Mat& depth_image, cv::Rect& face_bounding_box, cv::Rect& head_bounding_box, std::string label,
00118                         std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00119 
00124         virtual unsigned long updateFaceLabels(std::string old_label, std::string new_label);
00125 
00130         virtual unsigned long updateFaceLabel(int index, std::string new_label);
00131 
00136         virtual unsigned long deleteFaces(std::string label, std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00137 
00142         virtual unsigned long deleteFace(int index, std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00143 
00147         virtual unsigned long saveTrainingData(std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00148         virtual unsigned long saveTrainingData(std::vector<cv::Mat>& face_images);
00149 
00153         virtual unsigned long trainRecognitionModel(std::vector<std::string>& identification_labels_to_train);
00154 
00157         virtual unsigned long saveRecognitionModel();
00158 
00162         virtual unsigned long loadRecognitionModel(std::vector<std::string>& identification_labels_to_recognize);
00163 
00164         enum Metrics
00165         {
00166                 EUCLIDEAN, MAHALANOBIS, MAHALANOBISCOSINE
00167         };
00168 
00169 protected:
00170 
00177         virtual unsigned long recognizeFace(cv::Mat& color_image, std::vector<cv::Rect>& face_coordinates, std::vector<std::string>& identification_labels);
00178         virtual unsigned long recognizeFace(cv::Mat& color_image, cv::Mat& depth_image, std::vector<cv::Rect>& face_coordinates, std::vector<std::string>& identification_labels);
00179 
00186         virtual unsigned long convertAndResize(cv::Mat& img, cv::Mat& resized, cv::Rect& face, cv::Size new_size);
00187 
00192         virtual unsigned long loadTrainingData(std::vector<cv::Mat>& face_images, std::vector<std::string>& identification_labels_to_train);
00193         virtual unsigned long loadTrainingData(std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps, std::vector<std::string>& identification_labels_to_train);
00194 
00198         void assertDirectories(boost::filesystem::path& data_directory);
00199 
00200         // DEPTH
00201         std::vector<std::string> depth_str_labels; 
00202         std::vector<std::string> depth_str_labels_unique; 
00203         std::vector<int> depth_num_labels; 
00204         //
00205         FaceNormalizer face_normalizer_; 
00206 
00207         ipa_PeopleDetector::FaceRecognizerBaseClass* eff_depth; 
00208         ipa_PeopleDetector::FaceRecognizerBaseClass* eff_color; 
00209         std::vector<int> m_label_num;
00210         int m_rec_method; 
00211         std::vector<bool> dm_exist; 
00212         bool m_depth_mode; 
00213         ipa_PeopleDetector::Method m_subs_meth; 
00214         bool m_use_unknown_thresh; 
00215         unsigned long trainFaceRecognition(ipa_PeopleDetector::FaceRecognizerBaseClass* eff, std::vector<cv::Mat>& data, std::vector<int>& labels);
00216         //----------------------------------------------------
00217         //----------------------------------------------------
00218 
00219         // data
00220         std::vector<cv::Mat> m_eigenvectors; 
00221         IplImage** m_eigenvectors_ipl; 
00222         cv::Mat m_eigenvalues; 
00223         cv::Mat m_average_image; 
00224         cv::Mat m_projected_training_faces; 
00225         std::vector<std::string> m_face_labels; 
00226         cv::Mat m_face_class_average_projections; 
00227         std::vector<std::string> m_current_label_set; 
00228 #if CV_MAJOR_VERSION == 2
00229         cv::SVM m_face_classifier; 
00230 #else
00231 // OpenCV 3
00232         cv::Ptr<cv::ml::SVM> m_face_classifier; 
00233 #endif
00234         boost::filesystem::path m_data_directory; 
00235 
00236         // mutex
00237         boost::mutex m_data_mutex; 
00238 
00239         // parameters
00240         int m_norm_size; 
00241         int m_eigenvectors_per_person; 
00242         double m_threshold_facespace; 
00243         double m_threshold_unknown; 
00244         int m_metric; 
00245         bool m_debug; 
00246 
00247         int m_feature_dim; 
00248 };
00249 
00250 } // end namespace
00251 
00252 #endif // __FACE_RECOGNIZER_H__


cob_people_detection
Author(s): Richard Bormann , Thomas Zwölfer
autogenerated on Mon May 6 2019 02:32:06