Exemple #1
0
        private void SetIDBox(FeatureData feature, string data, float[] fea, Image img)
        {
            //InvokeRequired属性需要比较调用线程和创建线程的线程ID,如果俩线程ID不同,则返回true
            if (treeView1.InvokeRequired)//调用和创建该控件的线程是不同的线程,必须调用Invoke方法
            {
                if (!closing)
                {
                    //创建该方法的委托实例
                    SetIDback d = new SetIDback(SetIDBox);
                    //调用该委托实例,并传递参数,参数为object类型,使用this调用Invoke(this为当前窗体,是创建该窗体控件的线程)
                    Invoke(d, new object[] { feature, data, fea, img });//this指定创建该控件的线程来Invoke(调用)
                }
            }
            else//调用与创建该控件的线程是同一个线程
            {
                if (closing)
                {
                    return;
                }
                if (!string.IsNullOrEmpty(data))
                {
                    foreach (TreeNode node in treeView1.Nodes)
                    {
                        if (node.GetNodeCount(true) != 0)
                        {
                            if (feature.itemID == node.Text)
                            {
                                TreeNode treeNode = node;
                                treeView1.SelectedNode = treeNode;
                                treeView1.SelectedNode.Nodes.Add(data);
                                facedata[node.Index].feavec.Add(fea);
                                SetFaceBox(img, imageDir + "/" + facedata[node.Index].name + "/" + facedata[node.Index].feavec.Count);
                                return;
                            }
                        }
                    }

                    TreeNode[] Data = new TreeNode[1];
                    Data[0] = new TreeNode(data);
                    TreeNode ID = new TreeNode(feature.itemID, Data);
                    treeView1.Nodes.Add(ID);
                    treeView1.SelectedNode = ID;
                    FaceData face = new FaceData(fea, feature.itemID);
                    facedata.Add(face);
                    if (!Directory.Exists(imageDir + "/" + feature.itemID))
                    {
                        Directory.CreateDirectory(imageDir + "/" + feature.itemID);
                    }
                    SetFaceBox(img, imageDir + "/" + feature.itemID + "/" + facedata[facedata.Count - 1].feavec.Count);
                }
            }
        }
Exemple #2
0
 private void loadFaceData()
 {
     facedata = new List <FaceData>();
     if (!Directory.Exists(fileDir))
     {
         Directory.CreateDirectory(fileDir);
     }
     if (!Directory.Exists(imageDir))
     {
         Directory.CreateDirectory(imageDir);
     }
     if (File.Exists(filePath))
     {
         using (StreamReader sr = new StreamReader(filePath, Encoding.Default))
         {
             String   line;
             FaceData face = new FaceData();
             while ((line = sr.ReadLine()) != null)
             {
                 String[] data = line.Split(' ');
                 if (data[0] == "ID")
                 {
                     face.name = data[1];
                 }
                 else if (data[0] == "end")
                 {
                     facedata.Add(face);
                     face = new FaceData();
                 }
                 else
                 {
                     float[] vec = new float[FaceApi.FeatureVecLen()];
                     for (int idx = 0; idx < vec.Length; ++idx)
                     {
                         vec[idx] = Convert.ToSingle(data[idx]);
                     }
                     face.feavec.Add(vec);
                 }
             }
         }
         if (facedata.Count != 0)
         {
             foreach (FaceData face in facedata)
             {
                 TreeNode[] nodes = new TreeNode[face.feavec.Count];
                 int        idx   = 0;
                 foreach (float[] fea in face.feavec)
                 {
                     float sum = 0;
                     foreach (float single in fea)
                     {
                         sum += single;
                     }
                     nodes[idx] = new TreeNode(sum + "");
                     idx       += 1;
                 }
                 TreeNode treeNode = new TreeNode(face.name, nodes);
                 treeView1.Nodes.Add(treeNode);
             }
         }
     }
 }