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 <opencv/cv.h>
00075 #include <opencv/ml.h>
00076 
00077 // boost
00078 #include <boost/thread/mutex.hpp>
00079 #include <boost/thread/locks.hpp>
00080 #include "boost/filesystem/path.hpp"
00081 #include "boost/lexical_cast.hpp"
00082 
00083 #include <algorithm>
00084 namespace ipa_PeopleDetector
00085 {
00086 
00087 class FaceRecognizer: public AbstractFaceRecognizer
00088 {
00089 public:
00090 
00092         FaceRecognizer(void); 
00093         ~FaceRecognizer(void); 
00094 
00100         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,
00101                         std::vector<std::string>& identification_labels_to_recognize, int subs_meth, int feature_dim, bool use_unknown_thresh, bool use_depth);
00102 
00108         virtual unsigned long initTraining(std::string data_directory, int norm_size, bool norm_illumination, bool norm_align, bool norm_extreme_illumination, bool debug,
00109                         std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps, bool use_depth);
00110 
00118         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,
00119                         std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00120 
00125         virtual unsigned long updateFaceLabels(std::string old_label, std::string new_label);
00126 
00131         virtual unsigned long updateFaceLabel(int index, std::string new_label);
00132 
00137         virtual unsigned long deleteFaces(std::string label, std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00138 
00143         virtual unsigned long deleteFace(int index, std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00144 
00148         virtual unsigned long saveTrainingData(std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps);
00149         virtual unsigned long saveTrainingData(std::vector<cv::Mat>& face_images);
00150 
00154         virtual unsigned long trainRecognitionModel(std::vector<std::string>& identification_labels_to_train);
00155 
00158         virtual unsigned long saveRecognitionModel();
00159 
00163         virtual unsigned long loadRecognitionModel(std::vector<std::string>& identification_labels_to_recognize);
00164 
00165         enum Metrics
00166         {
00167                 EUCLIDEAN, MAHALANOBIS, MAHALANOBISCOSINE
00168         };
00169 
00170 protected:
00171 
00178         virtual unsigned long recognizeFace(cv::Mat& color_image, std::vector<cv::Rect>& face_coordinates, std::vector<std::string>& identification_labels);
00179         virtual unsigned long recognizeFace(cv::Mat& color_image, cv::Mat& depth_image, std::vector<cv::Rect>& face_coordinates, std::vector<std::string>& identification_labels);
00180 
00187         virtual unsigned long convertAndResize(cv::Mat& img, cv::Mat& resized, cv::Rect& face, cv::Size new_size);
00188 
00193         virtual unsigned long loadTrainingData(std::vector<cv::Mat>& face_images, std::vector<std::string>& identification_labels_to_train);
00194         virtual unsigned long loadTrainingData(std::vector<cv::Mat>& face_images, std::vector<cv::Mat>& face_depthmaps, std::vector<std::string>& identification_labels_to_train);
00195 
00199         void assertDirectories(boost::filesystem::path& data_directory);
00200 
00201         // DEPTH
00202         std::vector<std::string> depth_str_labels; 
00203         std::vector<std::string> depth_str_labels_unique; 
00204         std::vector<int> depth_num_labels; 
00205         //
00206         FaceNormalizer face_normalizer_; 
00207 
00208         ipa_PeopleDetector::FaceRecognizerBaseClass* eff_depth; 
00209         ipa_PeopleDetector::FaceRecognizerBaseClass* eff_color; 
00210         std::vector<int> m_label_num;
00211         int m_rec_method; 
00212         std::vector<bool> dm_exist; 
00213         bool m_depth_mode; 
00214         ipa_PeopleDetector::Method m_subs_meth; 
00215         bool m_use_unknown_thresh; 
00216         unsigned long trainFaceRecognition(ipa_PeopleDetector::FaceRecognizerBaseClass* eff, std::vector<cv::Mat>& data, std::vector<int>& labels);
00217         //----------------------------------------------------
00218         //----------------------------------------------------
00219 
00220         // data
00221         std::vector<cv::Mat> m_eigenvectors; 
00222         IplImage** m_eigenvectors_ipl; 
00223         cv::Mat m_eigenvalues; 
00224         cv::Mat m_average_image; 
00225         cv::Mat m_projected_training_faces; 
00226         std::vector<std::string> m_face_labels; 
00227         cv::Mat m_face_class_average_projections; 
00228         std::vector<std::string> m_current_label_set; 
00229         cv::SVM m_face_classifier; 
00230         boost::filesystem::path m_data_directory; 
00231 
00232         // mutex
00233         boost::mutex m_data_mutex; 
00234 
00235         // parameters
00236         int m_norm_size; 
00237         int m_eigenvectors_per_person; 
00238         double m_threshold_facespace; 
00239         double m_threshold_unknown; 
00240         int m_metric; 
00241         bool m_debug; 
00242 
00243         int m_feature_dim; 
00244 };
00245 
00246 } // end namespace
00247 
00248 #endif // __FACE_RECOGNIZER_H__


cob_people_detection
Author(s): Richard Bormann , Thomas Zwölfer
autogenerated on Fri Aug 28 2015 10:24:12