2016-08-19 10 views
1

このメソッドでは何をすべきか分かりませんLoadFaceRecognition、 このメソッドはトレーニング画像が800枚未満の場合にスムーズにロードしますが、データのロードが停止し、メモリ消費量が増加します。この1000回以上のトレーニング画像をロードするとEmg CVメモリがリークする

トレーニングimgaesは、グレースケール画像

ていると、これはあなたがいくつかのDisposeを欠落しているか、そこにステートメントを使用しているLoadFaceRecognition、

private bool LoadFaceRecognition(string Training_Folder, string TrainedFaces) { 

    if (File.Exists(Training_Folder + TrainedFaces + "/TrainedLabels.xml")) 
    { 
     try 
     { 
      Names_List_Faces.Clear(); 
      trainingImages_Faces.Clear(); 
      FileStream filestream = File.OpenRead(Training_Folder + TrainedFaces + "/TrainedLabels.xml"); 

      long filelength = filestream.Length; 
      byte[] xmlBytes = new byte[filelength]; 
      filestream.Read(xmlBytes, 0, (int)filelength); 
      filestream.Close(); 

      MemoryStream xmlStream = new MemoryStream(xmlBytes); 
      XmlReader xmlreader = XmlTextReader.Create(xmlStream); 

      while (xmlreader.Read()) 
      { 
       if (xmlreader.IsStartElement()) 
       { 
        switch (xmlreader.Name) 
        { 
         case "NAME": 
          if (xmlreader.Read()) 
          { 
           //Names_List_ID.Add(Names_List.Count); //0, 1, 2, 3.... 
           Names_List_Faces.Add(xmlreader.Value.Trim()); 
           NumLabels_Faces += 1; 
          } 
          break; 
         case "FILE": 
          if (xmlreader.Read()) 
          { 
           //PROBLEM HERE IF TRAININGG MOVED 
           trainingImages_Faces.Add(new Image<Gray, byte>(Training_Folder + "/TrainedFaces//" + xmlreader.Value.Trim())); 

          } 
          break; 
        } 
       } 
      } 
      ContTrain_Faces = NumLabels_Faces; 
      if (trainingImages_Faces.ToArray().Length != 0) 
      { 
       recognizer_Faces = new EORecognizer(trainingImages_Faces.ToArray(), Names_List_Faces.ToArray(), Eigen_Threshold, ref termCrit_Faces); 
       return true; 

      } 
      else return false; 
     } 
     catch (Exception ex) 
     { 
      Error = ex.ToString(); 
      return false; 
     } 
    } 
    else return false; 
} 

答えて

0

である私を助けてください。

Stremsのように、使用しているオブジェクトの一部のリソースを解放する必要があります。

次のコードで試してみてください。

private bool LoadFaceRecognition(string Training_Folder, string TrainedFaces) { 

     if (File.Exists(Training_Folder + TrainedFaces + "/TrainedLabels.xml")) 
     { 
      try 
      { 
       Names_List_Faces.Clear(); 
       trainingImages_Faces.Clear(); 
       using (FileStream filestream = File.OpenRead(Training_Folder + TrainedFaces + "/TrainedLabels.xml")) 
       { 

        long filelength = filestream.Length; 
        byte[] xmlBytes = new byte[filelength]; 
        filestream.Read(xmlBytes, 0, (int)filelength); 
        filestream.Close(); 

        using (MemoryStream xmlStream = new MemoryStream(xmlBytes)) 
        { 
         using(XmlReader xmlreader = XmlTextReader.Create(xmlStream)) 
         { 

          while (xmlreader.Read()) 
          { 
           if (xmlreader.IsStartElement()) 
           { 
            switch (xmlreader.Name) 
            { 
             case "NAME": 
              if (xmlreader.Read()) 
              { 
               //Names_List_ID.Add(Names_List.Count); //0, 1, 2, 3.... 
               Names_List_Faces.Add(xmlreader.Value.Trim()); 
               NumLabels_Faces += 1; 
              } 
              break; 
             case "FILE": 
              if (xmlreader.Read()) 
              { 
               //PROBLEM HERE IF TRAININGG MOVED 
               trainingImages_Faces.Add(new Image<Gray, byte>(Training_Folder + "/TrainedFaces//" + xmlreader.Value.Trim())); 

              } 
              break; 
            } 
           } 
          } 
          ContTrain_Faces = NumLabels_Faces; 
          if (trainingImages_Faces.ToArray().Length != 0) 
          { 
           recognizer_Faces = new EORecognizer(trainingImages_Faces.ToArray(), Names_List_Faces.ToArray(), Eigen_Threshold, ref termCrit_Faces); 
           return true; 

          } 
          else return false; 
         } 
        } 
       } 
      } 
      catch (Exception ex) 
      { 
       Error = ex.ToString(); 
       return false; 
      } 
     } 
     else return false; 
    } 
+0

は実際に私はすでにそのコードが、何も変更を試してみました。トレーニング画像の読み込みには時間がかかりすぎ、メモリが不足し、プログラムが高速に読み込めない – rillakkuma

関連する問題