docs
authorKonstantin Matskevich <konstantin.matskevich@itseez.com>
Thu, 8 May 2014 12:43:03 +0000 (16:43 +0400)
committerKonstantin Matskevich <konstantin.matskevich@itseez.com>
Mon, 12 May 2014 06:09:39 +0000 (10:09 +0400)
modules/contrib/doc/facerec/facerec_api.rst
modules/contrib/include/opencv2/contrib/contrib.hpp
modules/contrib/src/facerec.cpp

index 2aa3dcf..8de4359 100644 (file)
@@ -46,6 +46,15 @@ a unified access to all face recongition algorithms in OpenCV. ::
 
       // Deserializes this object from a given cv::FileStorage.
       virtual void load(const FileStorage& fs) = 0;
+
+      // Sets additional information as pairs label - info.
+      virtual void setLabelsInfo(const std::map<int, string>& labelsInfo) = 0;
+
+      // Gets string information by label
+      virtual string getLabelInfo(int label) const = 0;
+
+      // Gets labels by string
+      virtual vector<int> getLabelsByString(const string& str) = 0;
   };
 
 
@@ -70,6 +79,8 @@ Moreover every :ocv:class:`FaceRecognizer` supports the:
 
 * **Loading/Saving** the model state from/to a given XML or YAML.
 
+* **Setting/Getting labels info**, that is storaged as a string.
+
 .. note:: When using the FaceRecognizer interface in combination with Python, please stick to Python 2. Some underlying scripts like create_csv will not work in other versions, like Python 3.
 
 Setting the Thresholds
@@ -293,6 +304,30 @@ to enable loading the model state. ``FaceRecognizer::load(FileStorage& fs)`` in
 turn gets called by ``FaceRecognizer::load(const string& filename)``, to ease
 saving a model.
 
+FaceRecognizer::setLabelsInfo
+-----------------------------
+
+Sets string information about labels into the model.
+.. ocv:function:: void FaceRecognizer::setLabelsInfo(const std::map<int, string>& labelsInfo) = 0
+
+Information about the label loads as a pair label-its info.
+
+FaceRecognizer::getLabelInfo
+----------------------------
+
+Gets string information by label.
+.. ocv:function:: string FaceRecognizer::getLabelInfo(int label) const = 0
+
+If there is no such label in the model or there is no information about the label it will return an empty string.
+
+FaceRecognizer::getLabelsByString
+---------------------------------
+Gets vector of labels by string.
+
+.. ocv:function:: vector<int> FaceRecognizer::getLabelsByString(const string& str) = 0
+
+If the string contained in a string information for a label, this label will be pushed into the vector.
+
 createEigenFaceRecognizer
 -------------------------
 
@@ -319,6 +354,7 @@ Model internal data:
 * ``mean`` The sample mean calculated from the training data.
 * ``projections`` The projections of the training data.
 * ``labels`` The threshold applied in the prediction. If the distance to the nearest neighbor is larger than the threshold, this method returns -1.
+* ``labelsInfo`` The string information about the labels.
 
 createFisherFaceRecognizer
 --------------------------
@@ -346,6 +382,7 @@ Model internal data:
 * ``mean`` The sample mean calculated from the training data.
 * ``projections`` The projections of the training data.
 * ``labels`` The labels corresponding to the projections.
+* ``labelsInfo`` The string information about the labels.
 
 
 createLBPHFaceRecognizer
@@ -375,3 +412,4 @@ Model internal data:
 * ``threshold`` see :ocv:func:`createLBPHFaceRecognizer`.
 * ``histograms`` Local Binary Patterns Histograms calculated from the given training data (empty if none was given).
 * ``labels`` Labels corresponding to the calculated Local Binary Patterns Histograms.
+* ``labelsInfo`` The string information about the labels.
index b3b4f33..e6e11d8 100644 (file)
@@ -948,8 +948,8 @@ namespace cv
         // Deserializes this object from a given cv::FileStorage.
         virtual void load(const FileStorage& fs) = 0;
 
-        // Sets additions information as pairs label - info.
-        virtual void setLabelsInfo(const std::map<int, string>& additionalInfo) = 0;
+        // Sets additional information as pairs label - info.
+        virtual void setLabelsInfo(const std::map<int, string>& labelsInfo) = 0;
 
         // Gets string information by label
         virtual string getLabelInfo(int label) const = 0;
index 9c310e0..ef32b52 100644 (file)
@@ -182,10 +182,10 @@ public:
     // See FaceRecognizer::save.
     void save(FileStorage& fs) const;
 
-    // Sets additions information as pairs label - info.
+    // Sets additional information as pairs label - info.
     void setLabelsInfo(const std::map<int,string>& labelsInfo);
 
-    // Gets additional information by label
+    // Gets string information by label
     string getLabelInfo(int label) const;
 
     // Gets labels by string
@@ -247,10 +247,10 @@ public:
     // See FaceRecognizer::save.
     void save(FileStorage& fs) const;
 
-    // Sets additions information as pairs label - info.
+    // Sets additional information as pairs label - info.
     void setLabelsInfo(const std::map<int,string>& labelsInfo);
 
-    // Gets additional information by label
+    // Gets string information by label
     string getLabelInfo(int label) const;
 
     // Gets labels by string
@@ -342,10 +342,10 @@ public:
     // See FaceRecognizer::save.
     void save(FileStorage& fs) const;
 
-    // Sets additions information as pairs label - info.
+    // Sets additional information as pairs label - info.
     void setLabelsInfo(const std::map<int,string>& labelsInfo);
 
-    // Gets additional information by label
+    // Gets string information by label
     string getLabelInfo(int label) const;
 
     // Gets labels by string
@@ -487,7 +487,7 @@ void Eigenfaces::load(const FileStorage& fs) {
     // read sequences
     readFileNodeList(fs["projections"], _projections);
     fs["labels"] >> _labels;
-    const FileNode& fn = fs["info"];
+    const FileNode& fn = fs["labelsInfo"];
     if (fn.type() == FileNode::SEQ)
     {
         _labelsInfo.clear();
@@ -509,7 +509,7 @@ void Eigenfaces::save(FileStorage& fs) const {
     // write sequences
     writeFileNodeList(fs, "projections", _projections);
     fs << "labels" << _labels;
-    fs << "info" << "[";
+    fs << "labelsInfo" << "[";
     for (std::map<int, string>::const_iterator it = _labelsInfo.begin(); it != _labelsInfo.end(); it++)
         fs << LabelInfo(it->first, it->second);
     fs << "]";
@@ -522,9 +522,8 @@ void Eigenfaces::setLabelsInfo(const std::map<int,string>& labelsInfo)
 
 string Eigenfaces::getLabelInfo(int label) const
 {
-    if(_labelsInfo.count(label) > 0)
-        return _labelsInfo.at(label);
-    return "";
+    std::map<int, string>::const_iterator iter(_labelsInfo.find(label));
+    return iter != _labelsInfo.end() ? iter->second : "";
 }
 
 vector<int> Eigenfaces::getLabelsByString(const string& str)
@@ -647,7 +646,7 @@ void Fisherfaces::load(const FileStorage& fs) {
     // read sequences
     readFileNodeList(fs["projections"], _projections);
     fs["labels"] >> _labels;
-    const FileNode& fn = fs["info"];
+    const FileNode& fn = fs["labelsInfo"];
     if (fn.type() == FileNode::SEQ)
     {
         _labelsInfo.clear();
@@ -670,7 +669,7 @@ void Fisherfaces::save(FileStorage& fs) const {
     // write sequences
     writeFileNodeList(fs, "projections", _projections);
     fs << "labels" << _labels;
-    fs << "info" << "[";
+    fs << "labelsInfo" << "[";
     for (std::map<int, string>::const_iterator it = _labelsInfo.begin(); it != _labelsInfo.end(); it++)
         fs << LabelInfo(it->first, it->second);
     fs << "]";
@@ -683,9 +682,8 @@ void Fisherfaces::setLabelsInfo(const std::map<int,string>& labelsInfo)
 
 string Fisherfaces::getLabelInfo(int label) const
 {
-    if(_labelsInfo.count(label) > 0)
-        return _labelsInfo.at(label);
-    return "";
+    std::map<int, string>::const_iterator iter(_labelsInfo.find(label));
+    return iter != _labelsInfo.end() ? iter->second : "";
 }
 
 vector<int> Fisherfaces::getLabelsByString(const string& str)
@@ -885,7 +883,7 @@ void LBPH::load(const FileStorage& fs) {
     //read matrices
     readFileNodeList(fs["histograms"], _histograms);
     fs["labels"] >> _labels;
-    const FileNode& fn = fs["info"];
+    const FileNode& fn = fs["labelsInfo"];
     if (fn.type() == FileNode::SEQ)
     {
         _labelsInfo.clear();
@@ -907,7 +905,7 @@ void LBPH::save(FileStorage& fs) const {
     // write matrices
     writeFileNodeList(fs, "histograms", _histograms);
     fs << "labels" << _labels;
-    fs << "info" << "[";
+    fs << "labelsInfo" << "[";
     for (std::map<int, string>::const_iterator it = _labelsInfo.begin(); it != _labelsInfo.end(); it++)
         fs << LabelInfo(it->first, it->second);
     fs << "]";
@@ -920,9 +918,8 @@ void LBPH::setLabelsInfo(const std::map<int,string>& labelsInfo)
 
 string LBPH::getLabelInfo(int label) const
 {
-    if(_labelsInfo.count(label) > 0)
-        return _labelsInfo.at(label);
-    return "";
+    std::map<int, string>::const_iterator iter(_labelsInfo.find(label));
+    return iter != _labelsInfo.end() ? iter->second : "";
 }
 
 vector<int> LBPH::getLabelsByString(const string& str)