在training-faces xml文件中的名称旁边加载年龄和信息 [英] Loading Age and information beside the name in my training-faces xml file

查看:127
本文介绍了在training-faces xml文件中的名称旁边加载年龄和信息的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

根据这篇文章的一些代码: 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆