Esempio n. 1
0
        /// <summary>
        /// Saves the trained Eigen Recogniser to specified location
        /// </summary>
        /// <param name="filename"></param>
        public void Save_Eigen_Recogniser(string filename)
        {
            recognizer.Save(filename);

            //save label data as this isn't saved with the network
            string     direct     = Path.GetDirectoryName(filename);
            FileStream Label_Data = File.OpenWrite(direct + "/Labels.xml");

            using (XmlWriter writer = XmlWriter.Create(Label_Data))
            {
                writer.WriteStartDocument();
                writer.WriteStartElement("Labels_For_Recognizer_sequential");
                for (int i = 0; i < Names_List.Count; i++)
                {
                    writer.WriteStartElement("LABEL");
                    writer.WriteElementString("POS", i.ToString());
                    writer.WriteElementString("NAME", Names_List[i]);
                    writer.WriteEndElement();
                }

                writer.WriteEndElement();
                writer.WriteEndDocument();
            }
            Label_Data.Close();
        }
        public bool TrainRecognizer()
        {
            var allFaces = _dataStoreAccess.CallFaces("ALL_USERS");

            if (allFaces != null)
            {
                var faceImages = new Image <Gray, byte> [allFaces.Count];
                var faceLabels = new int[allFaces.Count];
                for (int i = 0; i < allFaces.Count; i++)
                {
                    Stream stream = new MemoryStream();
                    stream.Write(allFaces[i].Image, 0, allFaces[i].Image.Length);
                    var faceImage = new Image <Gray, byte>(new Bitmap(stream));
                    faceImages[i] = faceImage.Resize(200, 200, Inter.Cubic);
                    faceLabels[i] = allFaces[i].UserId;
                }


                _faceRecognizer.Train(faceImages, faceLabels);
                _faceRecognizer.Save(_recognizerFilePath);
            }
            return(true);
        }