public bool Load(string path) { tbEntry = new TrainFilesCarrier.TrainFileDataTable(); try { XmlDocument doc = new XmlDocument(); doc.Load(path); XmlNode node = doc.SelectSingleNode("Train/TrainFiles"); if (node != null) { XmlNodeList listWords = node.SelectNodes("File"); foreach (XmlNode word in listWords) { TrainFilesCarrier.TrainFileRow row = tbEntry.NewTrainFileRow(); row.Word = word.Attributes["Word"].Value; row.Path = word.Attributes["Path"].Value; row.Start = Convert.ToInt32(word.Attributes["Start"].Value); row.End = Convert.ToInt32(word.Attributes["End"].Value); // row.ID = word.Attribute("ID").Value; string p = VCDir.Instance.TrainDirAudio + row.Path; //if (!words.ContainsKey(w)) // { if (File.Exists(p)) { tbEntry.AddTrainFileRow(row); } else { Debug.WriteLine("Cant Load {0} - Path {1}", row.Word, row.Path); } } } node = doc.SelectSingleNode("Train/HMMModels"); if (node != null) { XmlNodeList listModels = node.SelectNodes("Model"); foreach (XmlNode models in listModels) { string word = models.Attributes["Word"].Value; string file = models.Attributes["Path"].Value; HMMWrapper hmm = new HMMWrapper(); if (word != null && file != null && hmm.Load(VCDir.Instance.TrainDirHMM + file)) { Debug.WriteLine("Load Model {0}: {1}", word, VCDir.Instance.TrainDirHMM + file); _words.Add(word); _hmms.Add(file); _models.Add(hmm); } } } } catch (Exception) { } return(true); }
public bool Train() { _words = new List <string>(); _hmms = new List <string>(); _models = new List <HMMWrapper>(); foreach (TrainFilesCarrier.TrainFileRow ent in tbEntry) { if (!_words.Contains(ent.Word)) { _words.Add(ent.Word); LogUtil.Info("Word : {0}\n", ent.Word); } } foreach (string word in _words) { List <string> files = new List <string>(); LogUtil.Info("List File for Word : {0}\n", word); VCDir.CreateDirectory(VCDir.Instance.TrainDirMFCC + word); VCDir.CreateDirectory(VCDir.Instance.TrainDirHMM); foreach (TrainFilesCarrier.TrainFileRow ent in tbEntry) { if (word.Equals(ent.Word)) { string audio = VCDir.Instance.TrainDirAudio + ent.Path; string mfcc = VCDir.Instance.TrainDirMFCC + ent.Path; WavFileWrapper Wav = new WavFileWrapper(audio); if (Wav.Load()) { Wav.NormalizeWave(1.0f); if (VCContext.Instance.MFCCOptions.ShiftSampleToZero) { Wav.ShifToZero(); } Wav.SelectedWave((uint)ent.Start, (uint)ent.End); MFCCWrapper Mfcc = new MFCCWrapper(Wav, VCContext.Instance.MFCCOptions.TimeFrame, VCContext.Instance.MFCCOptions.TimeShift, VCContext.Instance.MFCCOptions.CepFilter, VCContext.Instance.MFCCOptions.LowFreq, VCContext.Instance.MFCCOptions.HighFreq, VCContext.Instance.MFCCOptions.NumCeps, 2); Mfcc.UserStandardization = VCContext.Instance.MFCCOptions.UseStandardization; bool res = Mfcc.Process(); res &= Mfcc.SaveMFCC(mfcc + ".Mfcc" + ".xml"); res &= Mfcc.SaveDeltaMFCC(mfcc + ".Delta" + ".xml"); res &= Mfcc.SaveDoubleMFCC(mfcc + ".Double" + ".xml"); if (res) { switch (VCContext.Instance.MFCCOptions.TrainCofficientType) { case 0: files.Add(mfcc + ".Mfcc" + ".xml"); break; case 1: files.Add(mfcc + ".Delta" + ".xml"); break; case 2: files.Add(mfcc + ".Double" + ".xml"); break; } } LogUtil.Info("File : W - {0} Path - {1} MFCC process - {2}\n", ent.Word, VCDir.Instance.TrainDirMFCC + ent.Path + ".xml", (res) ? "Completed" : "Failed"); } } } HMMWrapper hmm = new HMMWrapper(VCContext.Instance.MFCCOptions.TrainHMMState, VCContext.Instance.MFCCOptions.TrainGMMComponent, VCContext.Instance.MFCCOptions.TrainGMMCovVar); bool ok = hmm.Trainning(files); LogUtil.Info("Train word: {0} - {1}\n", word, (ok)? "Completed": "Failed"); if (ok) { hmm.Save(VCDir.Instance.TrainDirHMM + word + ".xml"); _models.Add(hmm); _hmms.Add(word + ".xml"); LogUtil.Info("Save {0} Model to {1}\n", word, VCDir.Instance.TrainDirHMM + word + ".xml"); } } Save(VCDir.Instance.TrainXmlFile); return(true); }