在training-faces xml文件中的名称旁边加载年龄和信息 [英] Loading Age and information beside the name in my training-faces xml file
问题描述
根据这篇文章的一些代码: EMGU使用PCA和并行优化进行多人脸识别 [ ^ ]
// trainingfaces文件
< span class =code-pagedirective><? xml version = 1.0 encoding = utf-8 ?>
< Faces_For_Training >
< FACE >
< NAME > john < / NAME >
< 年龄 > 25 < /年龄 >
< 信息 > MS大学的学生< / informations >
< FILE > face_john 25在MS university_905807542.jpg < / FILE >
< / FACE >
< FACE >
< NAME > 标记< / NAME >
< 年龄 > 40 < /年龄 >
< 信息 > engineer .... < / informations >
< FILE > face_mark 40engineer ....._ 390671740.jpg < / FILE >
< / FACE >
< / Faces_For_Training >
我确实申请了一步以保存额外信息,但未加载它
私人bool LoadTrainingData(字符串Folder_location)
{
if(File。存在(Folder_location +\\TrainedLabels.xml))
{
try
{
//message_bar.Text =;
Names_List.Clear();
Names_List_ID.Clear();
trainingImages.Clear();
FileStream filestream = File.OpenRead(Folder_location +\\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)
{
caseNAME:
if(xmlreader.Read())
{
Names_List_ID.Add(Names_List.Count); // 0,1,2,3 ....
Names_List.Add(xmlreader.Value.Trim());
NumLabels + = 3;
}
休息;
caseFILE:
if(xmlreader.Read())
{
//此处有问题如果训练动员
trainingImages.Add(新图片< Gray, byte>(Application.StartupPath +\\TrainedFaces\\+ xmlreader.Value.Trim()));
}
休息;
// caseAge:
// if(xmlreader.Read())
// {
// Age_List.Add(xmlreader.Value.Trim()) ;
//}
// break;
}
}
}
}
ContTrain = NumLabels;
任何人都可以帮助我引导我以正确的方式加载年龄和信息旁边的名字。它只加载名称,我尝试了几种方法来加载它的名称,但我失败了。
在下面片段, load_training_data 使用 XPath [ ^ ]。
使用系统;
使用 System.Collections.Generic;
使用 System.Windows.Forms;
使用 System.Xml;
命名空间 LoadingFace
{
public partial class LoadingFace:Form
{
// 项目/ bin / Debug中的文件
const string PATH = @ TrainedLabels.xml;
// 列表
列表 < string > ages = new 列表< string> ();
列表< 字符串 > files = new 列表< string> ();
列表< 字符串 > informations = new List< string> ();
列表< 字符串 > names = new List< string> ();
// **************** ******************************* LoadingFace
public LoadingFace()
{
InitializeComponent();
load_training_data(PATH);
}
// *********** ************************ retrieve_training_data
string retrieve_training_data(XmlNode root,
string item)
{
string inner_text;
XmlNode node = null ;
try
{
node = root.SelectSingleNode(item);
inner_text = node.InnerText.Trim();
}
catch
{
inner_text = String .Empty;
}
return (inner_text);
}
// *********** ***************************** load_training_data
void load_training_data( string path)
{
try
{
XmlNodeList node_list;
XmlNode root;
XmlDocument xml_document = new XmlDocument();
ages.Clear();
files.Clear();
informations.Clear();
names.Clear();
xml_document.Load(path);
root = xml_document.DocumentElement;
node_list = root.SelectNodes( face);
foreach ( node_list中的XmlNode节点)
{
string age = String .Empty;
string file = String .Empty;
string information = String .Empty;
string name = String .Empty;
age = retrieval_training_data(node, age);
ages.Add(年龄);
file = retrieval_training_data(node, file);
files.Add(file);
information = retrieval_training_data(
node,
informations);
informations.Add(information);
name = retrieval_training_data(node, name);
names.Add(name);
}
}
catch (例外情况)
{
}
}
} // class LoadingFace
} // 命名空间LoadingFace
< / string > < / string > < / 字符串 > < / < span class =code-leadattribute> string >
它使用辅助函数 retrieve_training_data 。
希望有所帮助。
Based on this article some code : EMGU Multiple Face Recognition using PCA and Parallel Optimisation[^]
// The trainingfaces file
<?xml version="1.0" encoding="utf-8"?>
<Faces_For_Training>
<FACE>
<NAME>john</NAME>
<Age>25</Age>
<informations>Student in MS university</informations>
<FILE>face_john 25Student in MS university_905807542.jpg</FILE>
</FACE>
<FACE>
<NAME>mark</NAME>
<Age>40</Age>
<informations>engineer ....</informations>
<FILE>face_mark 40engineer ....._390671740.jpg</FILE>
</FACE>
</Faces_For_Training>
I did apply step to save extra information's but failed to load it
private bool LoadTrainingData(string Folder_location) { if (File.Exists(Folder_location +"\\TrainedLabels.xml")) { try { //message_bar.Text = ""; Names_List.Clear(); Names_List_ID.Clear(); trainingImages.Clear(); FileStream filestream = File.OpenRead(Folder_location + "\\TrainedLabels.xml"); long filelength = filestream.Length; byte[] xmlBytes = new byte[filelength]; filestream.Read(xmlBytes, 0, (int)filelength); filestream.Close(); 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.Add(xmlreader.Value.Trim()); NumLabels += 3; } break; case "FILE": if (xmlreader.Read()) { //PROBLEM HERE IF TRAININGG MOVED trainingImages.Add(new Image<Gray, byte>(Application.StartupPath + "\\TrainedFaces\\" + xmlreader.Value.Trim())); } break; // case "Age": // if (xmlreader.Read()) //{ // Age_List.Add(xmlreader.Value.Trim()); // } // break; } } } } ContTrain = NumLabels;
Can anybody help me to lead me to right way to load Age and information's beside the name . it load only the name and I tried several ways to load it with name but I failed .
In the following fragment, load_training_data does what you want using XPath[^].
using System; using System.Collections.Generic; using System.Windows.Forms; using System.Xml; namespace LoadingFace { public partial class LoadingFace : Form { // file in project/bin/Debug const string PATH = @"TrainedLabels.xml"; // lists List < string > ages = new List<string> ( ); List < string > files = new List<string> ( ); List < string > informations = new List<string> ( ); List < string > names = new List<string> ( ); // *********************************************** LoadingFace public LoadingFace ( ) { InitializeComponent ( ); load_training_data ( PATH ); } // *********************************** retrieved_training_data string retrieved_training_data ( XmlNode root, string item ) { string inner_text; XmlNode node = null; try { node = root.SelectSingleNode ( item ); inner_text = node.InnerText.Trim ( ); } catch { inner_text = String.Empty; } return ( inner_text ); } // **************************************** load_training_data void load_training_data ( string path ) { try { XmlNodeList node_list; XmlNode root; XmlDocument xml_document = new XmlDocument ( ); ages.Clear ( ); files.Clear ( ); informations.Clear ( ); names.Clear ( ); xml_document.Load ( path ); root = xml_document.DocumentElement; node_list = root.SelectNodes ( "face" ); foreach ( XmlNode node in node_list ) { string age = String.Empty; string file = String.Empty; string information = String.Empty; string name = String.Empty; age = retrieved_training_data ( node, "age" ); ages.Add ( age ); file = retrieved_training_data ( node, "file" ); files.Add ( file ); information = retrieved_training_data ( node, "informations" ); informations.Add ( information ); name = retrieved_training_data ( node, "name" ); names.Add ( name ); } } catch ( Exception ex ) { } } } // class LoadingFace } // namespace LoadingFace </string></string></string></string>
It uses the helper function retrieved_training_data.
Hope that helps.
这篇关于在training-faces xml文件中的名称旁边加载年龄和信息的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!